email.contentmanager:ManagementMIME 内容

源代码: Lib/email/contentmanager.py


3.6 版的新Function:[1]

  • 类别 email.contentmanager. ContentManager

    • 内容 Management 器的 Base Class。提供标准的注册机制,以注册 MIME 内容和其他表示形式之间的转换器,以及get_contentset_content调度方法。
  • get_content(* msg *, *args * kw *)

    • 根据* msg mimetype查找处理程序函数(请参见下一段),将其调用,并传递所有参数,然后返回调用结果。期望处理程序将从 msg *中提取有效载荷,并返回一个对象,该对象对有关提取的数据的信息进行编码。

要查找处理程序,请在注册表中查找以下项,并从找到的第一个项开始停止:

Note

  • 表示完整 MIME 类型(maintype/subtype)的字符串

  • 代表maintype的字符串

  • 空字符串

如果这些键都不产生处理程序,请为完整的 MIME 类型引发KeyError

  • set_content(* msg obj *, *args * kw *)
    • 如果maintypemultipart,则提出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_managerEmailPolicy及其派生词提供的content_manager

  • email.contentmanager. raw_data_manager

    • 该内容 Management 器仅提供了一个最小的接口,而不是Message本身提供的接口:它仅处理文本,原始字节字符串和Message对象。但是,与基本 API 相比,它提供了显着优势:get_content在文本部件上将返回 unicode 字符串,而应用程序无需手动对其进行解码,set_content提供了丰富的选项集,用于控制添加到部件的 Headers 和控制内容传输编码,并且可以使用各种add_方法,从而简化了 Multipart 消息的创建。
  • 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,将 MIME maintype设置为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-printablebase647bit8bitbinary。如果 Importing 不能以指定的编码进行编码(例如,为包含非 ASCII 值的 Importing 指定7bit cte *),请提高ValueError

Note

  • 对于str个对象,如果未设置* cte *,请使用试探法确定最紧凑的编码。

  • 对于EmailMessage,每个 RFC 2046,如果* subtype * rfc822的* cte quoted-printablebase64 cte ,以及 subtype * external-body7bit以外的任何* cte 的请求,则引发错误。对于message/rfc822,如果未指定 cte ,则使用8bit。对于 subtype *的所有其他值,请使用7bit

Note

  • cte *为binary尚无法正常工作。由set_content修改的EmailMessage对象是正确的,但是BytesGenerator没有正确序列化它。

如果设置了* disposition ,请将其用作 Content-Disposition Headers 的值。如果未指定,并且指定了 filename ,则添加具有值attachment的标题。如果未指定 disposition 并且也未指定 filename *,则不要添加标题。 * disposition *的唯一有效值为attachmentinline

如果指定了* filename ,请将其用作 Content-Disposition *Headers 的filename参数的值。

如果指定了* cid ,请添加 Content-ID Headers,并将 cid *作为其值。

如果指定了* params ,则迭代其items方法并使用生成的(key, value)对在 Content-Type *头上设置其他参数。

如果指定了* headers ,并且是形式为headername: headervalue的字符串列表或header对象的列表(pass具有name属性与字符串区别),则将标题添加到 msg *。

Footnotes