19.1.7. email.contentmanager: 管理 MIME 内容


    3.6 新版功能:

    class

    内容管理器的基类。 提供注册 MIME 内容和其他表示形式间转换器的标准注册机制,以及 get_contentset_content 发送方法。

    • get_content(msg, args, kw*)

      基于 msgmimetype 查找处理函数(参见下一段),调用该函数,传递所有参数,并返回调用的结果。 期望的效果是处理程序将从 msg 中提取有效载荷并返回编码了有关被提取数据信息的对象。

      要找到处理程序,将在注册表中查找以下键,找到第一个键即停止:

      如果这些键都没有产生处理程序,则为完整 MIME 类型引发一个 KeyError

    • add_get_handler(key, handler)

      handler 函数记录为 key 的处理程序。 对于可能的 key 键,请参阅 。

    目前 email 包只提供了一个实体内容管理器 raw_data_manager,不过在未来可能会添加更多。 是由 EmailPolicy 及其衍生工具所提供的 。

    email.contentmanager.raw_data_manager

    这个内容管理器仅提供了超出 Message 本身提供内容的最小接口:它只处理文本、原始字节串和 对象。 不过相比基础 API,它具有显著的优势:在文本部分上执行 get_content 将返回一个 unicode 字符串而无需由应用程序来手动解码,set_content 为控制添加到一个部分的标头和控制内容传输编码格式提供了丰富的选项集合,并且它还启用了多种 add_ 方法,从而简化了多部分消息的创建过程。

    • (msg, errors=’replace’)

      将指定部分的有效载荷作为字符串(对于 text 部分), EmailMessage 对象(对于 message/rfc822 部分)或 bytes 对象(对于所有其他非多部分类型)返回。 如果是在 multipart 上调用则会引发 。 如果指定部分是一个 text 部分并且指明了 errors,则会在将载荷解码为 unicode 时将其用作错误处理程序。 默认的错误处理程序是 replace

    • email.contentmanager.set_content(msg, <’str’>, subtype=”plain”, charset=’utf-8’ cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)

      email.contentmanager.set_content(msg, <’bytes’>, maintype, subtype, cte=”base64”, disposition=None, filename=None, cid=None, params=None, headers=None)

      email.contentmanager.set_content(msg, <’EmailMessage’>, cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)

      msg 添加标头和有效载荷:

      添加一个带有 maintype/subtype 值的 Content-Type 标头。

      如果提供了 charset (这只对 str 适用),则使用指定的字符集将字符串编码为字节串。 默认值为 utf-8。 如果指定的 charset 是某个标准 MIME 字符集名称的已知别名,则会改用该标准字符集。

      如果设置了 cte,则使用指定的内容传输编码格式对有效载荷进行编码,并将 Content-Transfer-Encoding 标头设为该值。 可能的 cte 值有 quoted-printable, , 7bit, 8bitbinary。 如果输入无法以指定的编码格式被编码 (例如,对于包含非 ASCII 值的输入指定 cte 值为 7bit),则会引发 ValueError

      注解

      cte 值为 binary 实际上还不能正确工作。 由 set_content 所修改的 EmailMessage 对象是正确的,但 不会正确地将其序列化。

      如果设置了 disposition,它会被用作 Content-Disposition 标头的值。 如果未设置,并且指定了 filename,则添加值为 attachment 的标头。 如果未设置 disposition 并且也未指定 filename,则不添加标头。 disposition 的有效值仅有 attachmentinline

      如果设置了 filename,则将其用作 Content-Disposition 标头的 filename 参数的值。

      如果设置了 cid,则添加一个 Content-ID 标头并将其值设为 cid

      如果设置了 params,则迭代其 items 方法并使用输出的 (key, value) 结果对在 Content-Type 标头上设置附加参数。

      如果设置了 headers 并且为 headername: headervalue 形式的字符串的列表或为 对象的列表(通过一个 name 属性与字符串相区分),则将标头添加到 msg

    备注

    1

    最初在 3.4 中作为 添加