email — 电子邮件和 MIME 处理包

源代码: Lib/email/__init__.py


email 包是一个用于管理电子邮件消息的库。它专门用于将任何电子邮件消息发送到 SMTP(RFC 2821)、NNTP 或其他服务器;这些是 smtplibnntplib 等模块的功能。email 包试图尽可能符合 RFC,支持 RFC 5322RFC 6532,以及与 MIME 相关的 RFC,如 RFC 2045RFC 2046RFC 2047RFC 2183RFC 2231

email 包的整体结构可以分为三个主要组件,以及第四个控制其他组件行为的组件。

该包的核心组件是一个表示电子邮件消息的“对象模型”。应用程序主要通过 message 子模块中定义的对象模型接口与包进行交互。应用程序可以使用此 API 询问有关现有电子邮件的问题,构造新的电子邮件,或添加或删除本身使用相同对象模型接口的电子邮件子组件。也就是说,遵循电子邮件消息及其 MIME 子组件的性质,电子邮件对象模型是一个对象树结构,所有对象都提供 EmailMessage API。

该包的另外两个主要组件是 parsergenerator。解析器获取电子邮件消息的序列化版本(字节流),并将其转换为 EmailMessage 对象树。生成器获取 EmailMessage 并将其转换回序列化字节流。(解析器和生成器也处理文本字符流,但不鼓励这种用法,因为它很容易导致最终得到在某种程度上无效的消息。)

控制组件是 policy 模块。每个 EmailMessage、每个 generator 和每个 parser 都有一个关联的 policy 对象,用于控制其行为。通常,应用程序只需要在创建 EmailMessage 时指定策略,方法是直接实例化 EmailMessage 以创建新的电子邮件,或者使用 parser 解析输入流。但是,当使用 generator 序列化消息时,可以更改策略。例如,这允许从磁盘解析通用电子邮件消息,但在将其发送到电子邮件服务器时使用标准 SMTP 设置对其进行序列化。

email 包尽力向应用程序隐藏各种管理 RFC 的细节。从概念上讲,应用程序应该能够将电子邮件消息视为 Unicode 文本和二进制附件的结构化树,而不必担心它们在序列化时如何表示。然而,在实践中,通常有必要至少了解一些管理 MIME 消息及其结构的规则,特别是 MIME“内容类型”的名称和性质,以及它们如何标识多部分文档。在大多数情况下,只有更复杂的应用程序才需要这些知识,即使这样,也只需要了解高级结构,而不需要了解这些结构如何表示的细节。由于 MIME 内容类型在现代互联网软件(不仅仅是电子邮件)中得到广泛使用,因此许多程序员都熟悉这个概念。

以下部分描述了 email 包的功能。我们从 message 对象模型开始,它是应用程序将使用的主要接口,然后是 parsergenerator 组件。然后,我们介绍 policy 控件,它完成了对库主要组件的处理。

接下来的三节将介绍该软件包可能引发的异常以及 解析器 可能检测到的缺陷(不符合 RFC)。然后,我们将介绍 headerregistrycontentmanager 子组件,它们分别提供了用于对标头和有效负载进行更详细操作的工具。这两个组件都包含与使用和生成非平凡消息相关的功能,但也记录了它们的扩展性 API,这将是高级应用程序感兴趣的。

接下来是一组使用前面几节中介绍的 API 基本部分的示例。

以上内容代表了电子邮件包的现代(Unicode 友好)API。其余部分,从 Message 类开始,涵盖了传统的 compat32 API,该 API 更直接地处理电子邮件消息表示方式的细节。compat32 API *不会* 对应用程序隐藏 RFC 的细节,但对于需要在该级别操作的应用程序来说,它们可能是有用的工具。此文档也与出于向后兼容性原因仍在使用 compat32 API 的应用程序相关。

在 3.6 版更改: 重新组织和重写了文档,以推广新的 EmailMessage/EmailPolicy API。

email 包文档的内容

传统 API

另请参阅

模块 smtplib

SMTP(简单邮件传输协议)客户端

模块 poplib

POP(邮局协议)客户端

模块 imaplib

IMAP(互联网消息访问协议)客户端

模块 nntplib

NNTP(网络新闻传输协议)客户端

模块 mailbox

用于使用各种标准格式创建、读取和管理磁盘上邮件集合的工具。