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

巨集哥發表於2019-05-08

簡介 

  本篇總結了 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的傳送郵件程式碼即可。其實也是很簡單!!!

相關文章