18.1.3. email.generator:生成 MIME 文档 — Python 文档
18.1.3. 电子邮件生成器 : 生成 MIME 文件
最常见的任务之一是生成由消息对象结构表示的电子邮件消息的纯文本。 如果您想通过 smtplib 模块或 nntplib 模块发送消息,或在控制台上打印消息,则需要执行此操作。 获取消息对象结构并生成纯文本文档是 Generator 类的工作。
同样,与 email.parser 模块一样,您不仅限于捆绑生成器的功能; 你可以自己从头开始写一个。 然而,捆绑的生成器知道如何以符合标准的方式生成大多数电子邮件,应该可以很好地处理 MIME 和非 MIME 电子邮件,并且被设计为通过 Parser 从纯文本转换为消息结构 类,回到纯文本,是幂等的(输入与输出相同)1。 另一方面,在程序构造的 Message 上使用 Generator 可能会导致 Message 对象的更改,因为填充了默认值。
以下是从 email.generator 模块导入的 Generator 类的公共方法:
- class email.generator.Generator(outfp[, mangle_from_[, maxheaderlen]])
Generator 类的构造函数接受一个名为 outfp 的类文件对象作为参数。 outfp 必须支持 [X32X]write() 方法,并且可以用作 Python 扩展打印语句中的输出文件。
可选的 mangle_from_ 是一个标志,当
True
时,将>
字符放在正文中以From
完全开始的任何行前面,即From
后跟在行首的一个空格。 这是避免将此类行误认为 Unix 邮箱格式信封头分隔符的唯一可移植方式(有关详细信息,请参阅 为什么内容长度格式不好 )。 mangle_from_ 默认为True
,但如果您不编写 Unix 邮箱格式文件,您可能希望将其设置为False
。可选的 maxheaderlen 指定非连续报头的最长长度。 当标题行超过 maxheaderlen(以字符为单位,制表符扩展为 8 个空格)时,标题将按照 Header 类中的定义进行拆分。 设置为零以禁用标头包装。 默认值为 78,这是 RFC 2822 推荐的(但不是必需的)。
其他公共 Generator 方法是:
- flatten(msg[, unixfrom])
将根于 msg 的消息对象结构的文本表示打印到创建 Generator 实例时指定的输出文件。 子部分是深度优先访问的,结果文本将被正确的 MIME 编码。
可选的 unixfrom 是一个标志,它强制在根消息对象的第一个 RFC 2822 标头之前打印信封标头分隔符。 如果根对象没有信封头,则会制作一个标准的信封头。 默认情况下,此项设置为
False
以禁止打印信封分隔符。请注意,对于子部分,永远不会打印信封标题。
2.2.2 版中的新功能。
- clone(fp)
使用完全相同的选项返回此 Generator 实例的独立克隆。
2.2.2 版中的新功能。
为方便起见,请参阅方法 Message.as_string()
和 str(aMessage)
,又名 Message.__str__()
,它简化了消息对象的格式化字符串表示的生成。 有关更多详细信息,请参阅 email.message。
email.generator 模块还提供了一个派生类,称为 DecodedGenerator,它类似于 Generator 基类,除了非 text零件被替换为表示零件的格式字符串。
- class email.generator.DecodedGenerator(outfp[, mangle_from_[, maxheaderlen[, fmt]]])
这个类派生自 Generator 遍历消息的所有子部分。 如果子部分的主要类型为 text,则打印子部分的解码有效负载。 可选的 _mangle_from_ 和 maxheaderlen 与 Generator 基类一样。
如果子部分不是主要类型 text,则可选的 fmt 是用于代替消息有效负载的格式字符串。 fmt 扩展为以下关键字,
%(keyword)s
格式:type
– 非 text 部分的完整 MIME 类型maintype
– 非 text 部分的主要 MIME 类型subtype
– 非 text 部分的子 MIME 类型filename
– 非 文本 部分的文件名description
– 与非 文本 部分相关的描述encoding
– 非 text 部分的内容传输编码
fmt 的默认值为
None
,意思是[Non-text (%(type)s) part of message omitted, filename %(filename)s]
2.2.2 版中的新功能。
2.5 版更改: 以前不推荐使用的方法 __call__()
已删除。
脚注
- 1
- 此语句假定您对
unixfrom
参数使用了适当的设置,并且您设置了 maxheaderlen=0(这将保留输入行的长度)。 这也不是严格正确的,因为在许多情况下,标题中的空白运行被折叠成单个空白。 后者是一个最终将被修复的错误。