email — 电子邮件和 MIME 处理包

源代码: Lib/email/__init__.py


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

电子邮件包的总体结构可以分为三个主要组件,加上一个控制其他组件行为的第四个组件。

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

该软件包的另外两个主要组件是 parsergenerator。解析器获取电子邮件消息的序列化版本(字节流),并将其转换为 EmailMessage 对象的树。生成器获取 EmailMessage 并将其转回序列化的字节流。(解析器和生成器也处理文本字符流,但是不建议使用此方法,因为它太容易导致消息以某种方式无效。)

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

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

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

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

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

以上代表了电子邮件包的现代(unicode 友好)API。其余部分,从 Message 类开始,介绍了与电子邮件消息的表示方式的细节直接相关的旧式 compat32 API。 compat32 API 向应用程序隐藏 RFC 的详细信息,但是对于需要在该级别上运行的应用程序,它们可能是有用的工具。对于出于向后兼容性原因仍在使用 compat32 API 的应用程序,本文档也适用。

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

email 包文档的内容

传统 API

另请参阅

模块 smtplib

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

模块 poplib

POP(邮局协议)客户端

模块 imaplib

IMAP(Internet 消息访问协议)客户端

模块 mailbox

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