python發送郵件(smtplib)

  咱們在測試完成後,都會發一份郵件也就是咱們的測試報告,那麼既然要自動化,是否是也能夠經過python幫助咱們發送郵件?固然這麼強大的python能夠幫助你完成這個需求html

SMTP

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。這裏咱們就須要用到這個庫。其中SMTP支持smtplib和Email兩個模塊,其中smtplib負責發送郵件,email負責構建郵件,SMTP支持發送純文本,攜帶附件和攜帶圖片等功能。python

發送文本

源碼服務器

class MIMEText(MIMENonMultipart):
    """Class for generating text/* type MIME documents."""

    def __init__(self, _text, _subtype='plain', _charset=None, *, policy=None):
""" 建立一個文本
/*類型的MIME文檔。     _text是這個消息對象的字符串。     _subtype是MIME子內容類型,默認爲「plain」。     _charset是添加到內容類型的字符集參數頭。默認爲「us-ascii」。注意,做爲一個反作用,還將設置Content-Transfer-Encoding頭。 """ 若是沒有指定_charset,檢查是否有非ascii碼 #字符。若是不是,使用「us-ascii」,不然使用utf-8。 if _charset is None: try: _text.encode('us-ascii') _charset = 'us-ascii' except UnicodeEncodeError: _charset = 'utf-8' MIMENonMultipart.__init__(self, 'text', _subtype, policy=policy, **{'charset': str(_charset)}) self.set_payload(_text, _charset)

一、首先導入smtplib模塊和email模塊中MIMEText(表示文本)app

二、準備發送郵件所須要的參數(服務器,發送者帳號,密碼,和收件人帳號)測試

# 服務器地址
smtpserver = 'smtp.163.com'
# 發送帳號
user = 'XXXXXXXX@163.com'
# 發送密碼
password = 'xxxxxxx'
# 收件人
receivers  = '821006052@qq.com'

三、根據源碼內容完成對參數對應填寫ui

# 郵件標題
subject = 'python 發送郵件'
# 發送內容 (文本內容,發送格式,編碼格式)
message = MIMEText('Python 經過smtplib發送郵件。。。', 'html', 'utf-8')
# 發送地址
message['From'] = user
# 接受地址
message['To'] =  receivers
# 郵件標題
message['subject'] =subject

四、經過對smtplib模塊對郵件進行發送編碼

smtp = smtplib.SMTP()
# 鏈接服務器
smtp.connect(smtpserver)
# 登陸郵箱帳號
smtp.login(user,password)
# 發送帳號信息
smtp.sendmail(user,receivers,message.as_string())
# 關閉
smtp.quit()

而後進行執行,咱們就會收到一份QQ郵箱了,郵箱的內容和標題和上方填寫的一致spa

 

攜帶附件

咱們正常發送郵件的時候可能會攜帶一些附件,固然這個功能python也能夠幫助咱們完成,SMTP中自帶的有攜帶附件的模塊。code

一、導入email中的MIMEMultipart模塊server

二、準備發送郵件的配置和參數

三、郵件攜帶的附件

# coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 服務器地址
smtpserver = 'smtp.163.com'
# 發送帳號
user = 'xxxxxx@163.com'
# 發送密碼
password = 'xxxxx'
# 收件人
receivers  = '821006052@qq.com'
# 郵件標題
subject = 'python 發送攜帶附件郵件'
# 獲取附件信息
with open('name.txt','rb',)as f:
    body = f.read().decode()
message = MIMEMultipart()
# 發送地址
message['From'] = user
# 接受地址
message['To'] =  receivers
# 郵件標題
message['subject'] =subject
# 正文內容
body = MIMEText(body, 'html', 'utf-8')
message.attach(body)
# 傳當前目錄中的name.txt文件
att = MIMEText(open('name.txt', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'    # 死格式
# filename 表示附件的名稱
att["Content-Disposition"] = 'attachment; filename="name.txt"'
message.attach(att)
smtp = smtplib.SMTP()
# 鏈接服務器
smtp.connect(smtpserver)
# 登陸郵箱帳號
smtp.login(user,password)
# 發送帳號信息
smtp.sendmail(user,receivers,message.as_string())
# 關閉
smtp.quit()

執行後查看郵箱會發現已經發送成功了。查看附件也是咱們添加的附件內容

 

若是想要添加多個附件的話繼續從新傳取附件內容,只須要更改不一樣的附件名稱便可

# 傳當前目錄中的name.txt文件
att = MIMEText(open('name.txt', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'        # 死格式
# filename 表示附件的名稱
att["Content-Disposition"] = 'attachment; filename="name.txt"'

郵件中添加圖片

咱們正常發送郵件的時候能夠添加圖片,固然python發送同樣能夠幫助咱們完成這個需求

一、添加圖片,須要用到email中的MIMEImage模塊

二、準備發送郵件的配置和參數

三、郵件攜帶的附件

因爲html中不能添加圖片連接,由於會被認爲是惡意連接,咱們能夠經過在html寫入圖片ID,經過ID進行匹配圖片內容

# 添加圖片
img_body = '''
<html>
<head>Python 發送攜帶圖片信息</head>
<body>
<p>
<p><img src="cid:imageid"></p>
<p>
</body>
</html>
'''
# 正文內容
body = MIMEText(img_body, 'html', 'utf-8')
f = open('123.jpg','rb')
mag = MIMEImage(f.read())
f.close()
# 定義圖片ID在HTML中展現
mag.add_header('Content-ID', 'imageid')
# 添加圖片圖片
message.attach(mag)
# 添加body內容
message.attach(body)

完整代碼

# coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

# 服務器地址
smtpserver = 'smtp.163.com'
# 發送帳號
user = 'xxxxx@163.com'
# 發送密碼
password = 'xxxxxxx'
# 收件人
receivers  = '821006052@qq.com'
# 郵件標題
subject = 'python 發送圖片郵件'

message = MIMEMultipart()

# 添加圖片
img_body = '''
<html>
<head>Python 發送攜帶圖片信息</head>
<body>
<p>
<p><img src="cid:imageid"></p>
<p>
</body>
</html>
'''
# 正文內容
body = MIMEText(img_body, 'html', 'utf-8')
f = open('123.jpg','rb')
mag = MIMEImage(f.read())
f.close()
# 定義圖片ID在HTML中展現
mag.add_header('Content-ID', 'imageid')
# 添加圖片信息
message.attach(mag)
# 添加正文
message.attach(body)
# 發送地址
message['From'] = user
# 接受地址
message['To'] =  receivers
# 郵件標題
message['subject'] =subject

# 非SSL郵箱
smtp = smtplib.SMTP()
# 鏈接服務器
smtp.connect(smtpserver)
# 登陸郵箱帳號
smtp.login(user,password)
# 發送帳號信息
smtp.sendmail(user,receivers,message.as_string())
# 關閉
smtp.quit()

執行後發現郵件中圖片已經添加成功了

注意: 上面的使用一些常規的郵箱,若是你的發件郵箱有SSL認證的須要打開認證信息,好比QQ郵箱須要配置一些信息

QQ郵箱舉例:

一、進入-設置--帳戶--POP3服務內容,打開POP3/SMTP服務

 

 二、開啓後會給一個密碼,這個密碼就是咱們須要登陸的密碼,複製保存下來

 

三、上面的代碼中須要更改服務器內容

# SSL郵箱(QQ郵箱)
smtp = smtplib.SMTP_SSL()
# 鏈接服務器
smtp.connect(smtpserver)
# 登陸郵箱帳號
smtp.login(user,password)
# 發送帳號信息
smtp.sendmail(user,receivers,message.as_string())
# 關閉
smtp.quit()

 

 

 

小夥伴們能夠動手嘗試嘗試,若是安靜寫的對您有幫助的話,點個關注,持續更新,若是那裏寫的不懂或者寫錯的地方,下方留言看到第一時間更改。

相關文章
相關標籤/搜索