email.contentmanager :管理MIME内容¶
源代码: Lib/email/contentmanager.py
3.6 新版功能: 1
- class email.contentmanager.ContentManager¶
内容管理器的基类。提供标准的注册表机制来注册mime内容和其他表示形式之间的转换器,以及
get_content和set_content调度方法。- get_content(msg, *args, **kw)¶
根据
mimetype属于 msg (见下一段),调用它,传递所有参数,并返回调用的结果。期望处理程序将从 msg 并返回一个对提取数据的信息进行编码的对象。要查找处理程序,请在注册表中查找以下键,并在找到第一个键后停止:
表示完整mime类型的字符串 (
maintype/subtype)表示
maintype空字符串
如果这些键都不生成处理程序,则引发
KeyError对于完整的mime类型。
- set_content(msg, obj, *args, **kw)¶
如果
maintype是multipart举起一个TypeError;否则,根据 obj (见下一段),调用clear_content()上 msg ,并调用处理程序函数,传递所有参数。期望处理程序将转换和存储 obj 进入之内 msg ,可能对 msg 此外,例如添加各种mime头来编码解释存储数据所需的信息。要查找处理程序,请获取 obj (
typ = type(obj),并在注册表中查找以下项,在找到第一个项时停止:类型本身 (
typ)类型的完全限定名 (
typ.__module__ +''+类型。uuqualname_uuu)。类型的qualname (
typ.__qualname__)类型名称 (
typ.__name__)
如果上面没有匹配项,请对中的每种类型重复上面的所有检查。 MRO (
typ.__mro__)最后,如果没有其他键生成处理程序,请检查该键的处理程序None. 如果没有处理程序None举起一个KeyError用于类型的完全限定名。还添加了 MIME-Version 如果不存在标题(另请参见
MIMEPart)
- add_get_handler(key, handler)¶
记录功能 处理程序 作为 key . 对于可能的值 key 见
get_content().
- add_set_handler(typekey, handler)¶
记录 处理程序 当类型匹配的对象 键槽 传递给
set_content(). 对于可能的值 键槽 见set_content().
内容管理器实例¶
目前,电子邮件包只提供一个具体的内容管理器, raw_data_manager 尽管将来可能会增加更多。 raw_data_manager 是 content_manager 提供的 EmailPolicy 及其衍生产品。
- email.contentmanager.raw_data_manager¶
此内容管理器仅提供一个超出
Message本身:它只处理文本、原始字节字符串,以及Message物体。然而,与基本API相比,它提供了显著的优势:get_content文本部分将返回一个Unicode字符串,而应用程序不需要手动对其进行解码,set_content提供了一组丰富的选项,用于控制添加到部件的标题和控制内容传输编码,并允许使用add_方法,从而简化多部分消息的创建。- email.contentmanager.get_content(msg, errors='replace')¶
以字符串形式返回部件的有效负载(对于
text部分)EmailMessage对象(用于message/rfc822零件),或bytes对象(用于所有其他非多部分类型)。举起一个KeyError如果调用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 :
添加 Content-Type 头与A
maintype/subtype价值。为了
str,设置mimemaintype到text,并将子类型设置为 subtype 如果有规定,或plain如果不是。为了
bytes,使用指定的 主型 和 subtype 或提高TypeError如果没有指定。为了
EmailMessage对象,将maintype设置为message,并将子类型设置为 subtype 如果有规定或rfc822如果不是。如果 subtype 是partial,引发错误 (bytes必须使用对象来构造message/partial零件)。
如果 charset 提供(仅对
str,使用指定的字符集将字符串编码为字节。默认值为utf-8. 如果指定 charset 是标准mime字符集名称的已知别名,请改用标准字符集。如果 cte 设置,使用指定的内容传输编码对负载进行编码,并设置 Content-Transfer-Encoding 标题到该值。的可能值 cte 是
quoted-printable,base64,7bit,8bit和binary.如果输入不能用指定的编码进行编码(例如,指定 cte 属于7bit对于包含非ASCII值的输入,引发ValueError.为了
str对象,如果 cte 未设置使用试探法确定最紧凑的编码。为了
EmailMessage, per RFC 2046 ,如果 cte 属于quoted-printable或base64请求 subtyperfc822和任何 cte 以外7bit对于 subtypeexternal-body. 为了message/rfc822使用8bit如果 cte 未指定。所有其他值 subtype 使用7bit.
注解
A cte 属于
binary实际上还不能正常工作。这个EmailMessage对象修改者set_content是正确的,但是BytesGenerator无法正确序列化。如果 性情 已设置,将其用作 Content-Disposition 标题。如果未指定,以及 filename 如果指定了,则添加带有值的标题
attachment.如果 性情 未指定,并且 filename 也未指定,不添加标题。的唯一有效值 性情 是attachment和inline.如果 filename 是指定的,将其用作
filename的参数 Content-Disposition 标题。如果 cid 已指定,请添加 Content-ID 标题与 cid 作为其价值。
如果 帕拉姆 指定,循环其
items方法和使用结果(key, value)成对设置 Content-Type 标题。如果 headers 是指定的,并且是表单的字符串列表
headername: headervalue或一览表header对象(通过具有name属性),将标题添加到 msg .
脚注
- 1
最初在3.4中作为 provisional module