On this page
email.contentmanager:ManagementMIME 内容
源代码: Lib/email/contentmanager.py
3.6 版的新Function:[1]
类别
email.contentmanager.
ContentManager
- 内容 Management 器的 Base Class。提供标准的注册机制,以注册 MIME 内容和其他表示形式之间的转换器,以及
get_content
和set_content
调度方法。
- 内容 Management 器的 Base Class。提供标准的注册机制,以注册 MIME 内容和其他表示形式之间的转换器,以及
get_content
(* msg *, *args , * kw *)- 根据* msg 的
mimetype
查找处理程序函数(请参见下一段),将其调用,并传递所有参数,然后返回调用结果。期望处理程序将从 msg *中提取有效载荷,并返回一个对象,该对象对有关提取的数据的信息进行编码。
- 根据* msg 的
要查找处理程序,请在注册表中查找以下项,并从找到的第一个项开始停止:
Note
表示完整 MIME 类型(
maintype/subtype
)的字符串代表
maintype
的字符串空字符串
如果这些键都不产生处理程序,请为完整的 MIME 类型引发KeyError。
set_content
(* msg , obj *, *args , * kw *)- 如果
maintype
是multipart
,则提出TypeError;否则,根据* obj 的类型查找处理程序函数(请参阅下一段),在 msg 上调用clear_content(),然后调用处理程序函数,并传递所有参数。期望处理程序将 obj 转换并存储到 msg 中,并且可能还会对 msg *进行其他更改,例如添加各种 MIME 头以对解释存储数据所需的信息进行编码。
- 如果
要查找处理程序,请获取* obj *(typ = type(obj)
)的类型,并在注册表中查找以下项,并从找到的第一个项开始停止:
Note
类型本身(
typ
)类型的全限定名(
typ.__module__ + '.' + typ.__qualname__
)。类型的质量名称(
typ.__qualname__
)类型的名称(
typ.__name__
)。
如果以上都不匹配,请对MRO(typ.__mro__
)中的每种类型重复上述所有检查。最后,如果没有其他键产生处理程序,请检查None
的处理程序。如果没有用于None
的处理程序,请为该类型的标准名称引发KeyError。
如果不存在,还添加一个* MIME-Version *Headers(另请参见MIMEPart)。
add_get_handler
(* key , handler *)- 记录函数* handler 作为 key 的处理程序。有关 key *的可能值,请参见get_content()。
add_set_handler
(* typekey , handler *)- 将类型匹配* typekey 的对象传递给set_content()时,将 handler 记录为要调用的函数。有关 typekey *的可能值,请参见set_content()。
Content Manager 实例
目前,电子邮件包仅提供一个具体的内容 Management 器raw_data_manager,尽管将来可能会添加更多。 raw_data_manager是EmailPolicy及其派生词提供的content_manager。
email.contentmanager.
raw_data_manager
email.contentmanager.
get_content
(* msg , errors ='replace'*)- 以字符串(对于
text
部件),EmailMessage对象(对于message/rfc822
部件)或bytes
对象(对于所有其他非 multipart 类型)的形式返回部件的有效载荷。如果在multipart
上被调用,则提高KeyError。如果该部分是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 *)- 将 Headers 和有效负载添加到* msg *:
添加带有maintype/subtype
值的* Content-Type *Headers。
Note
对于
str
,将 MIMEmaintype
设置为text
,如果未指定,则将子类型设置为* subtype *,否则将其设置为plain
。对于
bytes
,请使用指定的* maintype 和 subtype *,如果未指定,则引发TypeError。对于EmailMessage对象,将 maintype 设置为
message
,如果指定了子类型,则将子类型设置为* subtype ;如果未指定,则将子类型设置为rfc822
。如果 subtype *是partial
,则引发错误(必须使用bytes
对象来构造message/partial
Component)。
如果提供了* charset (仅对str
有效),则使用指定的字符集将字符串编码为字节。默认值为utf-8
。如果指定的 charset *是标准 MIME 字符集名称的已知别名,请改用标准字符集。
如果设置了* cte ,则使用指定的内容传输编码对有效负载进行编码,然后将 Content-Transfer-Encoding *Headers 设置为该值。 * cte 的可能值为quoted-printable
,base64
,7bit
,8bit
和binary
。如果 Importing 不能以指定的编码进行编码(例如,为包含非 ASCII 值的 Importing 指定7bit
的 cte *),请提高ValueError。
Note
对于
str
个对象,如果未设置* cte *,请使用试探法确定最紧凑的编码。对于EmailMessage,每个 RFC 2046,如果* subtype *
rfc822
的* cte 为quoted-printable
或base64
的 cte ,以及 subtype *external-body
的7bit
以外的任何* cte 的请求,则引发错误。对于message/rfc822
,如果未指定 cte ,则使用8bit
。对于 subtype *的所有其他值,请使用7bit
。
Note
- cte *为
binary
尚无法正常工作。由set_content
修改的EmailMessage
对象是正确的,但是BytesGenerator没有正确序列化它。
如果设置了* disposition ,请将其用作 Content-Disposition Headers 的值。如果未指定,并且指定了 filename ,则添加具有值attachment
的标题。如果未指定 disposition 并且也未指定 filename *,则不要添加标题。 * disposition *的唯一有效值为attachment
和inline
。
如果指定了* filename ,请将其用作 Content-Disposition *Headers 的filename
参数的值。
如果指定了* cid ,请添加 Content-ID Headers,并将 cid *作为其值。
如果指定了* params ,则迭代其items
方法并使用生成的(key, value)
对在 Content-Type *头上设置其他参数。
如果指定了* headers ,并且是形式为headername: headervalue
的字符串列表或header
对象的列表(pass具有name
属性与字符串区别),则将标题添加到 msg *。
Footnotes
- [1]
- 最初在 3.4 中以provisional module的形式添加