email — 電子郵件與 MIME 處理包

原始碼: Lib/email/__init__.py


email 包是一個用於管理電子郵件訊息的庫。它專門設計為*不*做任何傳送電子郵件訊息到 SMTP (RFC 2821)、NNTP 或其他伺服器的操作;這些是 smtplib 等模組的功能。email 包試圖儘可能地相容 RFC,支援 RFC 5322RFC 6532,以及 MIME 相關的 RFC,如 RFC 2045RFC 2046RFC 2047RFC 2183RFC 2231

email 包的整體結構可以分為三個主要部分,外加第四個部分,用於控制其他部分的行為。

該包的核心元件是一個表示電子郵件訊息的“物件模型”。應用程式主要透過 message 子模組中定義的物件模型介面與該包進行互動。應用程式可以使用此 API 來查詢現有電子郵件、構造新電子郵件,或新增/刪除同樣使用該物件模型介面的電子郵件子元件。也就是說,遵循電子郵件及其 MIME 子元件的特性,email 物件模型是一個由提供 EmailMessage API 的物件組成的樹狀結構。

該包的另外兩個主要元件是 parser(解析器)和 generator(生成器)。解析器接收電子郵件訊息的序列化版本(一個位元組流),並將其轉換為一個由 EmailMessage 物件組成的樹。生成器則接收一個 EmailMessage 物件,並將其轉換回序列化的位元組流。(解析器和生成器也處理文字字元流,但不鼓勵這種用法,因為它很容易導致訊息在某方面無效。)

控制組件是 policy 模組。每個 EmailMessage、每個 generator 和每個 parser 都有一個關聯的 policy 物件來控制其行為。通常,應用程式只需在建立 EmailMessage 時指定策略,無論是透過直接例項化 EmailMessage 來建立新郵件,還是使用 parser 解析輸入流。但是,當使用 generator 序列化訊息時,可以更改策略。例如,這允許從磁碟解析一封通用的電子郵件訊息,但在將其傳送到電子郵件伺服器時,使用標準的 SMTP 設定進行序列化。

email 包盡力嚮應用程式隱藏各種管理性 RFC 的細節。從概念上講,應用程式應該能夠將電子郵件訊息視為一個由 Unicode 文字和二進位制附件組成的結構化樹,而不必擔心這些內容在序列化時如何表示。然而,在實踐中,通常需要了解至少一些管理 MIME 訊息及其結構的規則,特別是 MIME “內容型別”的名稱和性質,以及它們如何標識多部分文件。大多數情況下,這些知識僅對於更復雜的應用程式是必需的,即便如此,也應該只關注高層結構,而不是這些結構如何表示的細節。由於 MIME 內容型別在現代網際網路軟體(不僅僅是電子郵件)中廣泛使用,這對許多程式設計師來說將是一個熟悉的概念。

以下各節描述了 email 包的功能。我們從 message 物件模型開始,這是應用程式將使用的主要介面,然後是 parsergenerator 元件。接著,我們介紹 policy 控制,從而完成對該庫主要元件的論述。

接下來的三個部分涵蓋了該包可能引發的異常以及 parser 可能檢測到的缺陷(不符合 RFC 的情況)。然後我們介紹 headerregistrycontentmanager 子元件,它們分別提供了用於更詳細地操作標頭和有效載荷的工具。這兩個元件都包含了與消費和生成複雜訊息相關的功能,同時也記錄了它們的可擴充套件性 API,這對於高階應用程式會很有用。

接下來是一組使用前面章節中介紹的 API 基本部分的示例。

以上內容代表了 email 包的現代(Unicode 友好)API。其餘部分從 Message 類開始,涵蓋了舊版的 compat32 API,該 API 更直接地處理電子郵件訊息的表示細節。compat32 API *不*嚮應用程式隱藏 RFC 的細節,但對於需要在此級別上操作的應用程式,它們可以是有用的工具。本文件對於仍在使用 compat32 API 以實現向後相容的應用程式也同樣適用。

在 3.6 版更改: 文件經過重組和重寫,以推廣新的 EmailMessage/EmailPolicy API。

email 包文件內容

舊版 API

參見

模組 smtplib

SMTP (簡單郵件傳輸協議) 客戶端

模組 poplib

POP (郵局協議) 客戶端

模組 imaplib

IMAP (網際網路訊息訪問協議) 客戶端

模組 mailbox

用於使用各種標準格式在磁碟上建立、讀取和管理郵件集合的工具。