18.1. 电子邮件-电子邮件和 MIME 处理包

2.2 版中的新Function。

email软件包是用于 Management 电子邮件的库,包括 MIME 和其他基于 RFC 2822的邮件文档。它将大多数Function包含在几个较旧的标准模块(例如rfc822mimetoolsmultifile)和其他非标准软件包(例如mimecntl)中。它不是专门设计用于将电子邮件发送到 SMTP( RFC 2821),NNTP 或其他服务器的;这些是smtplibnntplib等模块的Function。 email包try尽可能地符合 RFC,除了 RFC 2822以外,还支持诸如 RFC 2045 RFC 2046 RFC 2047 RFC 2231之类的与 MIME 相关的 RFC。

email程序包的主要区别在于,它从电子邮件的内部“对象模型”表示形式中分离了电子邮件的解析和生成。使用email软件包的应用程序主要处理对象。您可以向消息中添加子对象,从消息中删除子对象,完全重新排列内容,等等。这里有一个单独的解析器和一个单独的生成器,用于处理从纯文本到对象模型的转换,然后返回到再次显示纯 Literals。还有一些常见的 MIME 对象类型的便捷子类,以及一些杂项 Util,可帮助完成诸如提取和解析消息字段值,创建符合 RFC 的日期等常见任务。

以下各节介绍了email软件包的Function。排序遵循在应用程序中应该常见的进度:从文件或其他来源将电子邮件作为纯文本读取,将文本解析为电子邮件的对象结构,对该结构进行操作,最后,对象树被渲染回平面文本。

用整块布料(即完全从头开始)创建对象结构是完全可行的。从那里,可以采取与上述类似的进展。

还包括email软件包提供的所有类和模块的详细规范,使用email软件包时可能遇到的异常类,一些辅助 Util 以及一些示例。对于较旧的mimelib软件包或较早版本的email软件包的用户,提供了有关差异和移植的部分。

email软件包文档的内容:

See also

  • Module smtplib

  • SMTP 协议 Client 端

  • Module nntplib

  • NNTP 协议 Client 端

18.1.12. 包装历史

下表描述了电子邮件软件包的发行历史记录,与该软件包所发行的 Python 版本相对应。就本文档而言,当您看到有关更改或添加的版本的 Comments 时,它们指的是进行更改的 Python 版本,不是电子邮件软件包的版本。该表还描述了该软件包每个版本的 Python 兼容性。

email version distributed with compatible with
1.x Python 2.2.0 至 Python 2.2.1 不再受支持
2.5 Python 2.2.2 和 Python 2.3 Python 2.1 至 2.5
3.0 Python 2.4 Python 2.3 至 2.5
4.0 Python 2.5 Python 2.3 至 2.5

以下是email版本 4 和版本 3 之间的主要区别:

*请注意,版本 3 名称将 continue 使用,直到 Python 2.6 *为止。

以下是email版本 3 和版本 2 之间的主要区别:

以下是email版本 2 和版本 1 之间的区别:

此结构与包的其余部分不一致,因此* message/rfc822 Content Type 的对象表示已更改。在email版本 2 中,容器确实*从is_multipart()返回True,而get_payload()返回包含单个Message项的列表。

请注意,这是无法完全保持向后兼容性的地方。但是,如果您已经在测试get_payload()的返回类型,就可以了。您只需要确保您的代码不会在 Content Type 为* message/rfc822 *的容器上对Message实例执行set_payload()

18.1.13. 与 mimelib 的差异

email软件包最初是作为单独的库mimelib原型化的。进行了更改,以使方法名称更加一致,并且已添加或删除了某些方法或模块。一些方法的语义也已更改。在大多数情况下,mimelib中可用的任何Function在email包中仍然可用,尽管通常以不同的方式。 mimelib软件包和email软件包之间的向后兼容性不是优先事项。

这是mimelibemail软件包之间差异的简要说明,以及有关如何移植应用程序的提示。

当然,两个软件包之间最明显的区别是软件包名称已更改为email。此外,顶级软件包还具有以下差异:

Message类具有以下区别:

Parser类的公共界面没有区别。它确实具有一些其他智能,可以识别* message/delivery-status *类型的消息,它表示为Message实例,其中包含交货状态通知[1]中每个 Headers 块的单独的Message子部分。

Generator类的公共界面没有区别。不过,email.generator模块中有一个名为DecodedGenerator的新类,它提供了Message.getpayloadastext()方法中以前可用的大多数Function。

以下模块和类已更改:

另外,MIMEMessage类现在表示任何类型的 MIME 邮件,其主类型为* message 。它带有一个可选参数 _subtype *,用于设置 MIME 子类型。 * _subtype 默认为 rfc822 *。

mimelib在其addressdate模块中提供了一些 Util Function。所有这些Function已移至email.utils模块。

MsgReader类/模块已被删除。 email.iterators模块中的body_line_iterator()Function最紧密地支持其Function。

Footnotes

首页