18.11. rfc822 —解析 RFC 2822 邮件 Headers

从版本 2.3 开始不推荐使用:email软件包应优先于rfc822模块使用。提供此模块仅是为了保持向后兼容性,已在 Python 3 中删除。

该模块定义了一个类Message,该类表示 Internet 标准 RFC 2822所定义的“电子邮件”。 [1]这样的消息由消息头的集合和消息主体组成。该模块还定义了一个辅助类AddressList来解析 RFC 2822地址。请参阅 RFC,以获得有关 RFC 2822消息的特定语法的信息。

mailbox模块提供用于读取各种finally用户邮件程序产生的邮箱的类。

此类可以与任何支持readline()方法的 Importing 对象一起使用。如果 Importing 对象具有搜索和告知Function,则rewindbody()方法将起作用;同样,非法行将被推回到 Importing 流中。如果 Importing 对象缺少搜索,但是具有可以推回 Importing 行的unread()方法,则Message将使用该方法推回非法行。因此,此类可用于解析来自缓冲流的消息。

可选的* seekable *参数是某些 stdio 库的解决方法,其中tell()在发现lseek()系统调用不起作用之前会丢弃缓冲的数据。为了获得最大的可移植性,应在将不可搜索对象(例如从套接字对象创建的文件对象)传入时,将 seekable 参数设置为零,以防止该初始tell()

从文件中读取的 Importing 行可以由 CR-LF 终止,也可以由单个换行终止。在存储行之前,将终止的 CR-LF 替换为单个换行。

所有 Headers 匹配均独立于大写或小写完成;例如m['From']m['from']m['FROM']都产生相同的结果。

See also

  • Module email

  • 全面的电子邮件处理包;取代rfc822模块。

  • Module mailbox

  • 用于读取finally用户邮件程序产生的各种邮箱格式的类。

  • Module mimetools

  • rfc822.Message的子类,用于处理 MIME 编码的消息。

18.11.1. 讯息对象

Message实例具有以下方法:

示例:如果* m 的第一个 From *Headers 包含字符串'jack@cwi.nl (Jack Jansen)',则m.getaddr('From')将产生对('Jack Jansen', 'jack@cwi.nl')。如果 Headers 包含'Jack Jansen <jack@cwi.nl>',它将产生完全相同的结果。

如果存在多个与命名 Headers 匹配的 Headers(例如,如果有多个* Cc *Headers),则会解析所有 Headers 以获取地址。命名 Headers 包含的任何连续行也会被解析。

日期解析似乎是一种妖术,并非所有邮件程序都遵守该标准。尽管已对它进行了测试,并且在来自许多来源的大量电子邮件中都发现它是正确的,但该Function有时仍可能会产生不正确的结果。

Message个实例还支持有限的 Map 接口。特别是:m[name]类似于m.getheader(name),但是如果没有匹配的 Headers 则引发KeyError;和len(m)m.get(name[, default])name in mm.keys()m.values() m.items()m.setdefault(name[, default])如预期的那样工作,不同之处在于setdefault()使用空字符串作为默认值。 Message实例还支持 Map 可写接口m[name] = valuedel m[name]Message对象不支持 Map 接口的clear()copy()popitem()update()方法。 (仅在 Python 2.2 中添加了对get()setdefault()的支持.)

最后,Message个实例具有一些公共实例变量:

18.11.2. 地址列表对象

AddressList实例具有以下方法:

最后,AddressList个实例具有一个公共实例变量:

Footnotes

首页