咱們在測試完成後,都會發一份郵件也就是咱們的測試報告,那麼既然要自動化,是否是也能夠經過python幫助咱們發送郵件?固然這麼強大的python能夠幫助你完成這個需求html
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()
小夥伴們能夠動手嘗試嘗試,若是安靜寫的對您有幫助的話,點個關注,持續更新,若是那裏寫的不懂或者寫錯的地方,下方留言看到第一時間更改。