在线文档教程
Python

email.generator: Generating MIME documents

email.generator: Generating MIME documents

最常见的任务之一是生成由消息对象结构表示的电子邮件消息的平面文本。如果要通过smtplib模块或nntplib模块发送消息,或者在控制台上打印消息,则需要执行此操作。采用消息对象结构并生成平面文本文档是该Generator课程的职责。

同样,与email.parser模块一样,您不限于捆绑生成器的功能; 你可以自己从头开始编写一个。然而,捆绑的生成器知道如何以符合标准的方式生成大多数电子邮件,应该很好地处理MIME和非MIME电子邮件消息,并且设计为从平面文本到通过Parser类的消息结构的转换,以及返回到平面文本,是幂等的(输入与输出相同)[1]。另一方面,在Message由程序构造的情况下使用发生器可能导致Message对象的变化,因为默认值被填充。

以下是Generator从该email.generator模块导入的类的公共方法:

class email.generator.Generator(outfp[, mangle_from_[, maxheaderlen]])

Generator该类的构造函数将一个名为outfp的文件类对象作为参数。outfp必须支持该write()方法,并可用作Python扩展打印语句中的输出文件。

可选的_mangle_from__是一个标志,当True它将一个>字符放在正文中的任何一行的前面,该行的起始位置恰好是From,即From在该行的开头处后跟一个空格。这是避免将这些行误认为是Unix邮箱格式信封头分隔符的唯一有保证的便携方式(有关详细信息,请参阅为什么内容长度格式有问题)。_mangle_from__默认为True,但False如果您未编写Unix邮箱格式文件,则可能需要将其设置为。

可选maxheaderlen指定非持续标头的最长长度。当标题行长度超过maxheaderlen时(以字符为单位,标签扩展为8个空格),标题将按Header类中定义的方式分割。设置为零以禁用标题换行。根据RFC 2822的建议(但不是必需的),默认值为78 。

其他公共Generator方法是:

flatten(msg[, unixfrom])

将以msg为根的消息对象结构的文本表示形式打印到Generator创建实例时指定的输出文件。子部分先访问深度优先,结果文本将进行正确的MIME编码。

可选unixfrom是一个标志,它强制在根消息对象的第一个RFC 2822标头之前打印包头分隔符。如果根对象没有信封头,则制作一个标准头。默认情况下,这被设置为False禁止打印信封分隔符。

请注意,对于子部件,不会打印任何信封头。

2.2.2版中的新功能。

clone(fp)

Generator使用完全相同的选项返回此实例的独立克隆。

2.2.2版中的新功能。

write(s)

将字符串s写入基础文件对象,即将outfp传递给Generator构造函数。这为Generator扩展打印语句中使用的实例提供了足够类似文件的API 。

为方便起见,请参见方法Message.as_string()str(aMessage),又名Message.__str__(),其简化的消息对象的格式的字符串表示的生成。有关更多细节,请参阅email.message

email.generator模块还提供了一个派生类,称为DecodedGenerator它与Generator基类相似,不同之处在于非文本部分用代表该部分的格式字符串代替。

class email.generator.DecodedGenerator(outfp[, mangle_from_[, maxheaderlen[, fmt]]])

这个类来自Generator遍历消息的所有子部分。如果子部分是主类型文本,则它打印子部分的解码有效载荷。可选的__mangle_from_ 和_maxheaderlenGenerator基类相同。

如果子部分不是主类型文本,则可选fmt是使用的格式字符串,而不是消息负载。fmt用以下关键字进行扩展,%(keyword)s格式为:

  • type- 非文本部分的完整MIME类型

  • maintype- 非文本部分的主要MIME类型

  • subtype- 非文本部分的子MIME类型

  • filename- 非文本部分的文件名

  • description- 与非文本部分关联的描述

  • encoding- 非文本部分的内容传输编码

意思fmt的默认值是None

[Non-text (%(type)s) part of message omitted, filename %(filename)s]

2.2.2版中的新功能。

在版本2.5中更改:先前弃用的方法__call__()已被删除。

脚注

1此语句假定您为unixfrom参数使用适当的设置,并且您将maxheaderlen = 0(它将保留输入行长度)。这也不是完全正确的,因为在许多情况下,标题中的空白运行会折叠为单个空白。后者是一个最终将被修复的错误。