python接口自動化(三十一)--html測試報告通過郵件發出去——下(詳解)


簡介 

  本篇總結了 QQ (SSL)郵箱和 163(非SSL) 郵箱發送郵件,專治各種不行,總之看完這篇以后麻麻再也不用擔心我的郵件收不到了。以下代碼兼容 python2 和 python3,運行無異常,放心大膽使用。

常用郵件協議

發送郵件:SMTP

收取郵件:POP3、IMAP

常用郵件配置項

配置項 說明
mail.xxx.ssl.enable 是否支持 SSL 連接
mail.xxx.host 郵件服務器主機名
mail.xxx.port 郵件服務器端口號
mail.xxx.auth 是否進行身份認證

說明:xxx 表示協議名稱,例如:smtp、pop3 等。

默認端口號

  SMTP POP3 IMAP
普通方式(非SSL) 25 110 143
SSL 方式 465 995 993

163郵箱(非SSL)

1、先導入 smtplib 庫用來發送郵件,導入 MIMEText 庫用來做純文本的郵件模板

2、先准備幾個跟發郵件相關的參數,每個郵箱的發件服務器都不一樣,以 163為例,百度搜到發件服務器為:smtp.163.com

3、接下來就是寫郵件的主題和正文內容,正文這里用 html 格式的

4、最后調用發件服務

5、參考代碼

 1 # coding=utf-8
 2 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
 3 
 4 #2.注釋:包括記錄創建時間,創建人,項目名稱。
 5 '''
 6 Created on 2019-5-8
 7 @author: 北京-宏哥
 8 Project:學習和使用163郵箱發郵件
 9 '''
10 #3.導入模塊
11 import smtplib
12 from email.mime.text import MIMEText
13 # ----------1.跟發件相關的參數------
14 smtpserver = "smtp.163.com" # 發件服務器
15 port = 0 # 端口
16 sender = "hongge@163.com" # 賬號
17 psw = "**************" # 密碼
18 receiver = "1918991791@qq.com" # 接收人
19 # ----------2.編輯郵件的內容------
20 subject = "這個是主題 163"
21 body = '<p>這個是發送的 163 郵件</p>' # 定義郵件正文為 html 格式
22 msg = MIMEText(body, "html", "utf-8")
23 msg['from'] = sender
24 msg['to'] = "19198991791@qq.com"
25 msg['subject'] = subject
26 # ----------3.發送郵件------
27 smtp = smtplib.SMTP()
28 smtp.connect(smtpserver) # 連服務器
29 smtp.login(sender, psw) # 登錄
30 smtp.sendmail(sender, receiver, msg.as_string()) # 發送
31 smtp.quit() # 關閉

QQ郵箱(SSL)

1、QQ 郵箱是需要 SSL 認證的,這種郵箱跟上面的就有點不一樣了(如果已經開啟了,不知道授權碼,就點溫馨提示里面的‘生成授權碼’)

 

2、找到 QQ 郵箱授權碼,打開 QQ 郵箱-設置-賬號-POP3 開啟服務-開啟

3、根據相對應的驗證方式,就會收到授權碼了

4、收到授權碼后復制,保存下來,這個就可以當 QQ 郵箱的密碼了

5、QQ 郵箱發送郵件代碼,跟 163 有點不一樣,如下圖紅色框框:

6、參考代碼

 1 # coding=utf-8
 2 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
 3 
 4 #2.注釋:包括記錄創建時間,創建人,項目名稱。
 5 '''
 6 Created on 2019-5-8
 7 @author: 北京-宏哥
 8 Project:學習和使用QQ郵箱發郵件
 9 '''
10 #3.導入模塊
11 import smtplib
12 from email.mime.text import MIMEText
13 # ----------1.跟發件相關的參數------
14 # smtpserver = "smtp.163.com" # 發件服務器
15 smtpserver = "smtp.qq.com"
16 port = 465 # 端口
17 sender = "1918991791@qq.com" # 賬號
18 psw = "**************" # 密碼
19 receiver = "1918991791@qq.com" # 接收人
20 # ----------2.編輯郵件的內容------
21 subject = "這個是主題 QQ"
22 body = '<p>這個是發送的 QQ 郵件</p>' # 定義郵件正文為 html 格式
23 msg = MIMEText(body, "html", "utf-8")
24 msg['from'] = sender
25 msg['to'] = "1918991791@qq.com"
26 msg['subject'] = subject
27 # ----------3.發送郵件------
28 # smtp = smtplib.SMTP()
29 # smtp.connect(smtpserver) # 連服務器
30 smtp = smtplib.SMTP_SSL(smtpserver, port)
31 smtp.login(sender, psw) # 登錄
32 smtp.sendmail(sender, receiver, msg.as_string()) # 發送
33 smtp.quit() # 關閉

兼容 163(非SSL) 和 QQ 郵箱(SSL)

1、Python中檢測處理異常是非常重要的,這可以增加代碼的健壯性,我們在寫python程序的時候,會可能會遇到一些不可預料的情況,一旦遇到這些情況,運行時程序便可能會崩潰。異常可以通過 try 語句來檢測. 任何在 try 語句塊里的代碼都

會被監測, 檢查有無異常發生。

  try 語句有兩種主要形式: try-except 和 try-finally . 這兩個語句是互斥的, 也就是說你只能使用其中的一種 . 一個 try 語句可以對應一個或多個 except 子句 , 但只能對應一個finally 子句, 或是一個 try-except-finally 復合語句.

try-except 語句(以及其更復雜的形式)定義了進行異常監控的一段代碼, 並且提供了處理異常的機制.

最常見的 try-except 語句語法如下所示,它由try塊和except塊 (try_suite 和 except_suite )組成, 也可以有一個可選的錯誤原因。首先嘗試執行 try 子句, 如果沒有錯誤, 忽略所有的 except 從句繼續執行,如果發生異常, 解釋器將在這一串處理器

(except 子句)中查找匹配的異常。

簡單用法(except后面不跟特定異常,這會捕獲所有異常)這種好處就是你不知道會發生什么異常,盡管用;壞處就是當異常發生時候,不能清楚了解到底發生哪種異常。

我們可以發現,連接沒有成功,但程序是正常運行的,會繼續往下運行如果沒有try,程序則會中斷報錯。我們發現第一個print並沒有運行,這是因為try 語句塊中異常發生點后的剩余語句永遠不會到達(所以也永遠不會執行)。

2、好了關於try的講解就到這里,回歸正題:如果想兼容上面兩種方式發送郵件,只需把第三塊內容稍微改下,如下所示

3、參考代碼

 1 # ----------3.發送郵件------
 2 try:
 3     #非SSL
 4     smtp = smtplib.SMTP()
 5     smtp.connect(smtpserver) # 連服務器
 6 except:
 7     #SSL
 8     smtp = smtplib.SMTP_SSL(smtpserver, port)
 9     smtp.login(sender, psw) # 登錄
10 smtp.sendmail(sender, receiver, msg.as_string()) # 發送
11 smtp.quit() # 關閉

小結

1、小伙伴們下次遇到這樣的直接就用兼容SSL和非SSL的發送郵件代碼即可。其實也是很簡單!!!


免責聲明!

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



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