自動發送郵件,做爲自動化測試的流程之一,能夠將運行後的測試報告自動發送至指定的對象,造成一次自動化的完整閉環,基於Python來實現的有關自動化發送郵件的內容,加上註釋作了一個小小的整理。html
話很少說直接上代碼:面試
首先將相關聯的庫所有導入app
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對象,這個對象專門用於處理附件。ui
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方法將附件添加進去。spa
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用於確認郵件發送流程執行完畢。3d
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('虛竹真厲害~ 我好喜歡虛竹')
最後附上運行成功後的效果,你們能夠看下:code
這是Pycharm中的運行成功結果
這是接收到的郵件
若是對軟件測試、接口測試、自動化測試、面試經驗交流。感興趣能夠273462828,羣內會有不按期的發放免費的資料連接,這些資料都是從各個技術網站蒐集、整理出來的,若是你有好的學習資料能夠私聊發我,我會註明出處以後分享給你們。