前言
在進行日常的自動化測試實踐中趁尼,我們總是需要將測試過程中的記錄、結果等等等相關信息通過自動的手段發(fā)送給相關人員涨共。python的smtplib、email模塊為我們提供了很好的email發(fā)送等功能的實現椒舵。
純文本郵件
在通常情況下,我們需要發(fā)送大量的純文本類的郵件通知约谈,或是發(fā)送概要性測試報告時笔宿,會用到此類發(fā)送方式,示例代碼如下:
#-*- coding:utf-8 -*-
__author__ = u'苦葉子'
import smtplibfrom email.mime.text import MIMEText
from email.header import Header
if __name__ == '__main__':
??? sender?= u'sender@163.com'????? # 發(fā)送人郵件地址
??? receiver?= u'receiver@163.com'???? # 接收人郵件地址
??? subject?= u'python email文本郵件發(fā)送測試'
??? smtpserver?= u'smtp.163.com'?? # smtp服務
??? username?= u'testname'? # 發(fā)送人郵件用戶名或專用于smtp賬戶用戶名
??? password?= u'testpassword'? # 發(fā)送人郵件密碼或專用于smtp賬戶的密碼
??? msg?=?MIMEText(u'你好','text','utf-8')?? # 文本格式郵件 正文內容
??? msg['Subject']?=?Header(subject,'utf-8') # 郵件標題
??? smtp?=?smtplib.SMTP()?? # 初始化一個smtp對象
??? smtp.connect('smtp.163.com')? # 連接至smtp服務器
??? smtp.login(username,?password)? # 登錄smtp服務
??? smtp.sendmail(sender,?receiver,?msg.as_string())? # 發(fā)送郵件
??? smtp.quit()? # 發(fā)送完成后關閉連接
HTML形式的郵件
通常情況下窗宇,我們經常生成html格式的測試報告或記錄措伐,如果采用文本郵件方式發(fā)送,則html格式的報告或記錄會將html標簽也顯示出來军俊,那么為了讓郵件接收者能夠正常的看到html格式的報告侥加,則需要在郵件發(fā)送時,對相應的參數進行配置粪躬,以便郵件客戶端能正常解析html格式的郵件担败,示例如下:
#-*- coding:utf-8 -*-
__author__ = u'苦葉子'
import smtplib
from email.mime.text import MIMEText
from email.header import Header
if __name__ == '__main__':
??? sender = u'sender@163.com'? ? ? # 發(fā)送人郵件地址
??? receiver = u'receiver@163.com'? ? # 接收人郵件地址
??? subject?= u'python email HTML形式郵件發(fā)送測試'
??? smtpserver?= u'smtp.163.com'?? # smtp服務
??? username?= u'testname'? # 發(fā)送人郵件用戶名或專用于smtp賬戶用戶名
??? password = u'testpassword'? # 發(fā)送人郵件密碼或專用于smtp賬戶的密碼
??? msg = MIMEText(u'<html><h1>你好昔穴,這是html格式的郵件,哇咔咔</h1></html>','html','utf-8')? # html格式郵件
? ? msg['Subject'] = Header(subject,'utf-8') # 郵件標題
??? smtp?=?smtplib.SMTP()?? # 初始化一個smtp對象
??? smtp.connect('smtp.163.com')? # 連接至smtp服務器
??? smtp.login(username,?password)? # 登錄smtp服務
??? smtp.sendmail(sender,?receiver,?msg.as_string())? # 發(fā)送郵件
??? smtp.quit()? # 發(fā)送完成后關閉連接
帶附件的郵件
文本和html格式的郵件能滿足您的需要嘛提前?仔細回顧下吗货,測試過程中是不是還有很多的附件要進行發(fā)送?在自動化測試過程中是不是有很多截圖狈网?等等....是的宙搬,我們還需要發(fā)送帶附件的郵件來滿足我們日常的測試需要,下面看看帶附件的郵件發(fā)送示例:
#-*- coding:utf-8 -*-
__author__ = u'苦葉子'
import smtplib
from email.mime.text import MIMEText
from email.header import Header
if __name__ == '__main__':
??? sender = u'sender@163.com'? ? ? # 發(fā)送人郵件地址
??? receiver = u'receiver@163.com'? ? # 接收人郵件地址
??? subject = u'python email 附件郵件發(fā)送測試'
??? smtpserver = u'smtp.163.com'? # smtp服務
??? username = u'testname'? # 發(fā)送人郵件用戶名或專用于smtp賬戶用戶名
??? password = u'testpassword'? # 發(fā)送人郵件密碼或專用于smtp賬戶的密碼
??? msg = MIMEMultipart('附件')
??? msg['Subject'] = Header(subject,'utf-8')
??? #構造附件
??? att?=?MIMEText(open('C:\\1.jpg','rb').read(),'base64','utf-8') # 讀取附件
??? att["Content-Type"]?='application/octet-stream'
??? att["Content-Disposition"]?='attachment;?filename="1.jpg"'
??? msg.attach(att) # 關聯附件
??? ##############################################
??? smtp?=?smtplib.SMTP()
??? smtp.connect('smtp.163.com')
??? smtp.login(username,?password)
??? smtp.sendmail(sender,?receiver, msg.as_string())
??? smtp.quit()
群發(fā)郵件
在上述幾個示例中拓哺,所有的郵件接收都是單個人勇垛,實際的應用中,我們則需要給一群人進行郵件發(fā)送士鸥,下面看看示例:
#-*- coding:utf-8 -*-
__author__ =u'苦葉子'
importsmtplib
fromemail.mime.textimportMIMEText
fromemail.headerimportHeader
if__name__ =='__main__':
??? # 發(fā)送人郵件地址
??? sender =u'sender@163.com'
??? # 群發(fā)接收人郵件地址 !!!!!
??? receiver = [u'receiver@163.com',u'**@xx.com',u'**@yy.com']
??? # 郵件標題 ? ?
??? subject =u'python email群發(fā)郵件發(fā)送測試'
??? # smtp服務
??? smtpserver =u'smtp.163.com'
??? # 發(fā)送人郵件用戶名或專用于smtp賬戶用戶名
??? username =u'testname'
??? # 發(fā)送人郵件密碼或專用于smtp賬戶的密碼
??? password =u'testpassword'
??? # 文本格式郵件 正文內容
??? msg = MIMEText(u'你好群發(fā)','text','utf-8')
??? # 郵件標題
??? msg['Subject'] = Header(subject,'utf-8')
??? # 初始化一個smtp對象
??? smtp = smtplib.SMTP()
??? # 連接至smtp服務器
??? smtp.connect('smtp.163.com')
??? # 登錄smtp服務
??? smtp.login(username, password)
??? # 發(fā)送郵件
??? smtp.sendmail(sender, receiver, msg.as_string())
??? # 發(fā)送完成后關閉連接
??? smtp.quit()
綜合示例
在上述所有的示例都是按功能分類來進行一一演示闲孤,接下來的示例,則是包含了上述所有功能:
#-*- coding:utf-8 -*-
__author__ = u'苦葉子'
import smtplib
form email.mime.multipart import MIMEMultpart
from email.mime.text import MIMEText
from email.image import MIMEImage
if __name__ == '__main__':? ?
??? # 定義一些連接數據? ?
??? sender = u"DeepTest@xx.com"? ?
??? receiver = [u'xxx@xx.com', u'xx@yy.com']? ?
??? subject = u"郵件綜合示例"? ?
??? username = u"username"? ?
??? password = u"password"? ? ? ?
??? # 創(chuàng)建message? ?
??? msg = MIMEMultipart('alternative')? ?
??? msg['Subject'] = u"測試"? ? ? ?
??? # 發(fā)送內容? ?
??? text = u"你好烤礁,這是文本內容"? ?
? ? html = u"""
????????? 測試報告
????????? 測試結果概述
???? """? ? ? ?
??? # 添加MIME類型? ?
???? partText = MIMEText(text, u'plain')? ?
???? partHTML = MIMEText(html, u'html')? ?
???? msg.attach(partText)? ?
???? msg.attach(partHTML)? ? ? ?
???? #構造附件? ?
???? attach = MIMEText(open('c:\\demo.jpg').read(),? ? 'base64', 'utf-8')? ?
???? attach['Content-Type'] = 'application/octet-stream'? ? ? ?
???? attach['Content-Disposition'] =? ? 'attachment;filename="demo.jpg"'? ?
???? msg.attach(attach)? ? ? ?
???? # 發(fā)送郵件? ?
???? smtp =smtplib.SMTP()? ?
???? smtp.connect('smtp.163.com')? ?
???? smtp.login(username,password)? ?
???? smtp.sendmail(sender, receiver,? ? msg.as_string())? ?
???? smtp.quit()
結束語
本文從文本郵件讼积、html格式郵件、附件郵件以及三者綜合一起使用的方式闡述了利用python email模塊進行郵件發(fā)送脚仔。