Python自動化:自動化發送郵件之SMTP


自動發送郵件,作為自動化測試的流程之一,可以將運行后的測試報告自動發送至指定的對象,形成一次自動化的完整閉環,基於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郵箱,所以是,如果是其他的,則依據你的郵箱進行修改,一般都可以在郵箱的設置頁面中看到相關內容。同時,要實現自動發送郵件,需要先啟用郵箱中的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,群內會有不定期的發放免費的資料鏈接,這些資料都是從各個技術網站搜集、整理出來的,如果你有好的學習資料可以私聊發我,我會注明出處之后分享給大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM