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(),再次連接配接。