email.mime:从头开始创建电子邮件和 MIME 对象

源代码: Lib/email/mime/


此模块是旧版(Compat32)电子邮件 API 的一部分。新 API 中的contentmanager代替了部分Function,但是在某些应用程序中,即使在非旧版代码中,这些类仍然有用。

通常,pass将文件或某些文本传递给解析器来获得消息对象结构,该解析器将解析文本并返回根消息对象。但是,您也可以从头开始构建完整的消息结构,甚至可以手动构建单个Message对象。实际上,您还可以采用现有结构并添加新的Message对象,将它们移动等等。这为 MIME 消息的切片和切块提供了非常方便的界面。

您可以pass创建Message实例,手动添加附件和所有适当的标题来创建新的对象结构。但是对于 MIME 邮件,email包提供了一些方便的子类来使事情变得更容易。

这些是类:

    • class * email.mime.base. MIMEBase(* _maintype _subtype *, * policy = compat32 * _ params *)
    • 模块:email.mime.base

这是Message的所有 MIME 特定子类的 Base Class。通常,您不会创建专门针对MIMEBase的实例,尽管可以。 MIMEBase主要是作为方便的 Base Class 提供的,用于更特定的 MIME 感知子类。

  • _maintype Content-Type 主要类型(例如 text image ), _subtype Content-Type 次要类型(例如 plain gif *)。 * _params *是参数键/值字典,并直接传递给Message.add_header

如果指定了* policy *(默认为compat32策略),它将被传递给Message

MIMEBase类始终添加* Content-Type Headers(基于 _maintype _subtype _params )和 MIME-Version *Headers(始终设置为1.0)。

在版本 3.6 中更改:添加了* policy *仅关键字参数。

  • 类别 email.mime.nonmultipart. MIMENonMultipart
    • 模块:email.mime.nonmultipart

MIMEBase的子类,这是非* multipart 的 MIME 消息的中间 Base Class。此类的主要目的是防止使用attach()方法,该方法仅对 multipart *消息有意义。如果调用attach(),则会引发MultipartConversionError异常。

    • class * email.mime.multipart. MIMEMultipart(* _subtype ='mixed' boundary = None _subparts = None *, * policy = compat32 * _ params *)
    • 模块:email.mime.multipart

MIMEBase的子类,这是* multipart 的 MIME 消息的中间 Base Class。可选 _subtype 默认为 mixed *,但可用于指定消息的子类型。 * multipart/_subtype Content-Type *头将被添加到消息对象。 * MIME-Version *Headers 也将被添加。

可选的* boundary *是 Multipart 边界字符串。如果为None(默认值),则在需要时(例如,对消息进行序列化时)计算边界。

  • _subparts *是有效载荷的初始子部分序列。必须有可能将此序列转换为列表。您始终可以使用Message.attach方法将新的子部件附加到邮件中。

可选的* policy *参数默认为compat32

  • Content-Type Headers 的其他参数来自关键字参数,或传递到 _params *参数(这是关键字字典)中。

在版本 3.6 中更改:添加了* policy *仅关键字参数。

    • class * email.mime.application. MIMEApplication(* _data _subtype ='octet-stream' _encoder = email.encoders.encode_base64 *, * policy = compat32 * _ params *)
    • 模块:email.mime.application

MIMENonMultipart的子类MIMEApplication用来表示主要类型* application *的 MIME 消息对象。 * _data 是一个包含原始字节数据的字符串。可选的 _subtype 指定 MIME 子类型,默认为 octet-stream *。

可选的* _encoder 是可调用的(即函数),它将对要传输的数据进行实际编码。此可调用对象采用一个参数,即MIMEApplication实例。它应使用get_payload()set_payload()将有效负载更改为编码形式。它还应根据需要将任何 Content-Transfer-Encoding *或其他 Headers 添加到消息对象。默认编码为 base64.有关内置编码器的列表,请参见email.encoders模块。

可选的* policy *参数默认为compat32

  • _params *直接传递给 Base Class 构造函数。

在版本 3.6 中更改:添加了* policy *仅关键字参数。

    • class * email.mime.audio. MIMEAudio(* _audiodata _subtype = None _encoder = email.encoders.encode_base64 *, * policy = compat32 * _ params *)
    • 模块:email.mime.audio

MIMENonMultipart的子类MIMEAudio用于创建主要类型* audio *的 MIME 消息对象。 * _audiodata 是包含原始音频数据的字符串。如果标准的 Python 模块sndhdr可以解码此数据,则子类型将自动包含在 Content-Type Headers 中。否则,您可以pass _subtype 参数明确指定音频子类型。如果无法猜测次要类型并且未提供 _subtype *,则引发TypeError

可选的* _encoder 是可调用的(即函数),它将执行音频数据的实际编码以进行传输。此可调用对象采用一个参数,即MIMEAudio实例。它应使用get_payload()set_payload()将有效负载更改为编码形式。它还应根据需要将任何 Content-Transfer-Encoding *或其他 Headers 添加到消息对象。默认编码为 base64.有关内置编码器的列表,请参见email.encoders模块。

可选的* policy *参数默认为compat32

  • _params *直接传递给 Base Class 构造函数。

在版本 3.6 中更改:添加了* policy *仅关键字参数。

    • class * email.mime.image. MIMEImage(* _imagedata _subtype = None _encoder = email.encoders.encode_base64 *, * policy = compat32 * _ params *)
    • 模块:email.mime.image

MIMENonMultipart的子类MIMEImage用于创建主要类型* image *的 MIME 消息对象。 * _imagedata 是包含原始图像数据的字符串。如果标准的 Python 模块imghdr可以解码此数据,则子类型将自动包含在 Content-Type Headers 中。否则,您可以pass _subtype 参数显式指定图像子类型。如果无法猜测次要类型并且未提供 _subtype *,则引发TypeError

可选的* _encoder 是可调用的(即函数),它将对图像数据进行实际编码以进行传输。此可调用对象采用一个参数,即MIMEImage实例。它应使用get_payload()set_payload()将有效负载更改为编码形式。它还应根据需要将任何 Content-Transfer-Encoding *或其他 Headers 添加到消息对象。默认编码为 base64.有关内置编码器的列表,请参见email.encoders模块。

可选的* policy *参数默认为compat32

  • _params *直接传递给MIMEBase构造函数。

在版本 3.6 中更改:添加了* policy *仅关键字参数。

    • class * email.mime.message. MIMEMessage(* _msg _subtype ='rfc822'**,* policy = compat32 *)
    • 模块:email.mime.message

MIMENonMultipart的子类MIMEMessage用于创建主要类型* message *的 MIME 对象。 * _msg *用作有效负载,并且必须是Message类(或其子类)的实例,否则引发TypeError

可选的* _subtype 设置消息的子类型;它默认为 rfc822 *。

可选的* policy *参数默认为compat32

在版本 3.6 中更改:添加了* policy *仅关键字参数。

    • class * email.mime.text. MIMEText(* _text _subtype ='plain' _charset = None **,* policy = compat32 *)
    • 模块:email.mime.text

MIMENonMultipart的子类MIMEText用来创建主要类型* text *的 MIME 对象。 * _text *是有效负载的字符串。 * _subtype 是次要类型,默认为 plain *。 * _charset *是文本的字符集,并作为参数传递给MIMENonMultipart构造函数;如果字符串仅包含ascii代码点,则默认为us-ascii,否则为utf-8。 * _charset *参数接受字符串或Charset实例。

除非* _charset 参数明确设置为None,否则创建的 MIMEText 对象将具有带有charset参数的 Content-Type Headers 和 Content-Transfer-Encoding Headers。这意味着即使在set_payload命令中传递了字符集,后续的set_payload调用也不会导致编码的有效负载。您可以pass删除Content-Transfer-EncodingHeaders 来“重置”此行为,然后set_payload调用将自动对新的有效负载进行编码(并添加新的 Content-Transfer-Encoding *Headers)。

可选的* policy *参数默认为compat32

在版本 3.5 中更改:* _charset *还接受Charset个实例。

在版本 3.6 中更改:添加了* policy *仅关键字参数。