19.1. email — 电子邮件和 MIME 处理包 — Python 文档

来自菜鸟教程
Python/docs/3.6/library/email
跳转至:导航、​搜索

19.1. 电子邮件 — 电子邮件和 MIME 处理包

源代码: :source:`Lib/email/__init__.py`



email 包是一个用于管理电子邮件消息的库。 它专门用于向 SMTP (RFC 2821)、NNTP 或其他服务器发送电子邮件; 这些是模块的功能,例如 smtplibnntplibemail 包尝试尽可能符合 RFC,支持 RFC 5233RFC 6532,以及与 MIME 相关的 RFC,如 RFC 2045RFC 2046、[X2520X]RFC 7X 、RFC 2183RFC 2231

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

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

该包的另外两个主要组件是 parsergenerator。 解析器获取电子邮件消息的序列化版本(字节流)并将其转换为 EmailMessage 对象树。 生成器采用 EmailMessage 并将其转换回序列化的字节流。 (解析器和生成器也处理文本字符流,但不鼓励这种用法,因为很容易以一种或另一种方式结束无效的消息。)

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

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

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

接下来的三个部分涵盖了包可能引发的异常以及 解析器 可能检测到的缺陷(不符合 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(互联网消息访问协议)客户端
模块 nntplib
NNTP(网络新闻传输协议)客户端
模块邮箱
使用各种标准格式在磁盘上创建、读取和管理消息集合的工具。
模块 smtpd
SMTP 服务器框架(主要用于测试)