自動發送郵件,作為自動化測試的流程之一,可以將運行后的測試報告自動發送至指定的對象,形成一次自動化的完整閉環,基於Python來實現的有關自動化發送郵件的內容,加上注釋做了一個小小的整理。
話不多說直接上代碼:
首先將相關聯的庫全部導入
1 # 需要使用到SMTPLIB庫,來進行郵箱的連接 2 import smtplib 3 # 處理郵件內容的庫,email.mime 4 from email import encoders 5 from email.mime.text import MIMEText 6 # 處理郵件附件,需要導入MIMEMultipart,Header,MIMEBase 7 from email.mime.multipart import MIMEMultipart 8 from email.header import Header 9 from email.mime.base import MIMEBase
因為郵箱本身是應用到smtp協議,所以我們在連接郵箱時,需要通過smtp來訪問對應的郵箱,案例中是使用的QQ郵箱,所以是http://smtp.qq.com,如果是其他的,則依據你的郵箱進行修改,一般都可以在郵箱的設置頁面中看到相關內容。同時,要實現自動發送郵件,需要先啟用郵箱中的pop3/smtp權限。連接郵箱需要登錄,要用戶名與密碼(授權碼),QQ郵箱授權碼可以通過短信獲取。
1 # 郵箱屬性配置 2 mailserver = 'smtp.qq.com' # 郵箱服務端URL 3 userName_SendMail = 'xxxxxxx@qq.com' # 發件人/用戶名 4 userName_AuthCode = 'xxxxxx' # 郵箱發件授權碼 5 received_mail = ['xxxxx@qq.com'] # 定義郵件的接收者
發送純文本內容,可以直接通過MIMEText對象來進行編輯和發送,MIMEText是用於處理郵件內容的對象。其中的Subject、From、To的定義是固定的,不用管為什么,規則定義就是這樣。
1 # 發送一封簡單的郵件 2 # content = '這是一封純粹的文本信息內容' 3 # email = MIMEText(content, 'plain', 'utf-8') # 純文本形式的郵件內容的定義,通過MIMEText進行操作 4 # email['Subject'] = '郵件主題' # 定義郵件主題 5 # email['From'] = userName_SendMail # 發件人 6 # email['To'] = ','.join(received_mail) # 收件人
發送HTML內容的郵件,需要將MIMEText中的plain值改為html,這樣就可以將html內容直接顯示在郵件內容里了。
1 # 發送一封HTML內容的郵件 2 # content = """ 3 # <p>這是一封HTML文本的郵件</p> 4 # <p><a href="http://www.baidu.com">點擊這里就送小龍女</a></p> 5 # """ 6 # email = MIMEText(content, 'html', 'utf-8') # 純文本形式的郵件內容的定義,通過MIMEText進行操作 7 # email['Subject'] = '郵件主題_HTML' # 定義郵件主題 8 # email['From'] = userName_SendMail # 發件人 9 # email['To'] = ','.join(received_mail) # 收件人
如果想要在郵件中發送附件,則需要調用到另外一個對象,叫做MIMEMultipart對象,這個對象專門用於處理附件。
1 # 郵件中發送附件 2 # 附件配置郵箱 3 email = MIMEMultipart() 4 email['Subject'] = '郵件主題_HTML' # 定義郵件主題 5 email['From'] = userName_SendMail # 發件人 6 email['To'] = ','.join(received_mail) # 收件人
發送一般附件,例如txt、pdf、jpg等,如果文件的名稱或者正文中有中文內容,則需要進行轉碼,通過Header和encoders對文件的所有內容進行轉碼即可,確保顯示內容一切正常,記住最后需要通過前面所配置好的郵件對象調用attach方法將附件添加進去。
1 # 非圖片附件 2 att = MIMEBase('application', 'octet-stream') 3 att.set_payload(open('測碼學院.txt', 'rb').read()) 4 att.add_header('Content-Disposition', 'attachment', filename=Header('測碼學院.txt', 'gbk').encode()) 5 encoders.encode_base64(att) 6 email.attach(att) 7 8 # 圖片附件 9 att1 = MIMEBase('application', 'octet-stream') 10 att1.set_payload(open('測碼學院小龍女與尹志平.jpg', 'rb').read()) 11 att1.add_header('Content-Disposition', 'attachment', filename=Header('測碼學院小龍女與尹志平.jpg', 'gbk').encode()) 12 encoders.encode_base64(att1) 13 email.attach(att1)
因為QQ郵箱是使用了SMTP_SSL,所以要調用smtplib中的SMTP_SSL方法,默認端口為465,如果是普通SMTP協議,則端口為25,具體視情況而定。通過login方法授權登錄,再通過sendmail方法發送郵件。在操作結束后記得釋放smtp資源,養成良好的釋放習慣,可以在最后添加一個print用於確認郵件發送流程執行完畢。
1 # 發送郵件 2 smtp = smtplib.SMTP_SSL(mailserver, port=465) # 非QQ郵箱,一般使用SMTP即可,不需要有SSL 3 smtp.login(userName_SendMail, userName_AuthCode) 4 smtp.sendmail(userName_SendMail, ','.join(received_mail), email.as_string()) 5 smtp.quit() 6 print('虛竹真厲害~ 我好喜歡虛竹')
最后附上運行成功后的效果,大家可以看下:
這是Pycharm中的運行成功結果
這是接收到的郵件
如果對軟件測試、接口測試、自動化測試、面試經驗交流。感興趣可以273462828,群內會有不定期的發放免費的資料鏈接,這些資料都是從各個技術網站搜集、整理出來的,如果你有好的學習資料可以私聊發我,我會注明出處之后分享給大家。