天天看點

發送電子郵件

SMTP

簡單郵件傳輸協定(SMTP)是用于發送電子郵件的協定。

SMTP規定電子郵件應該如何格式化、加密、在郵件伺服器之間傳遞,以及在點選發送後,計算機要處理的所有其他細節。

SMTP伺服器的域名通常是電子郵件提供商的域名,前面加上SMTP。

要確定得到smtp對象後,第一件事就是調用ehlo()方法,否則以後的方法調用會導緻錯誤。

連接配接到SMTP伺服器的587端口後,調用starttls()方法,這是連接配接實作加密必須的步驟。如果要連接配接到465端口,加密已經設定好了,這一步可以跳過。

不建議在源代碼中放入密碼,推薦調用input(),讓使用者輸入密碼。

IMAP

SMTP隻負責向别人發送電子郵件。IMAP則負責收取下載下傳電子郵件。

python帶有一個imaplib子產品,但實際上第三方的imapclient子產品更易用。

imapclient子產品從IMAP伺服器下載下傳電子郵件,格式相當複雜。pyzmail子產品可以完成解析郵件的辛苦工作。

電子郵件可以是純文字、HTML或者兩者的混合。

連接配接到IMAP伺服器時,大多數電子郵件提供商要求SSL加密,傳入SSL=TRUE關鍵字參數。

幾乎每個賬戶預設都有一個INBOX檔案夾,但也可以調用IMAPClient對象的list_folders()方法,擷取檔案清單。這将傳回一個元組的清單。每個元組包含一個檔案夾的資訊。

要選擇一個檔案夾進行搜尋,就調用IMAPClient對象的select_folder()方法,傳入該檔案夾的名稱字元串。

如果搜尋比對大量的電子郵件,python可能抛出異常。如果發生這種情況,必須斷開并重連IMAP伺服器,然後再試。這個限制是防止python程式消耗太多記憶體。可以使用imaplib._MAXLINE=10000000将限制改為10000000位元組。

檔案夾選中後,就可以用IMAPClient對象的search()方法搜尋電子郵件。得到清單後,調用fetch()方法,獲得實際的電子郵件内容。

delete_messages()為郵件加上\Deleted标志。調用expunge()方法,将永久删除目前選中的檔案夾中帶\Deleted标志的所有電子郵件。

如果程式運作了幾分鐘或者更長時間,IMAP伺服器可能會逾時,或自動斷開。調用imapclient.IMAPClient(),再次連接配接。