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_manageremail.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/partialComponent)。
如果提供了* 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的形式添加