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