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

源代码: Lib / email / mime /

通常,您通过将文件或某些文本传递到解析器来获取消息对象结构,解析器将解析文本并返回根消息对象。但是,您也可以从头开始构建完整的消息结构,或者手动构建单个Message对象。事实上,您也可以使用现有结构并添加新的Message对象,移动它们等。这使得一个非常方便的接口切片和切片MIME消息。

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

这里是类:

class email.mime.base.MIMEBase(_maintype, _subtype, **_params)

模块:email.mime.base

这是Message的所有MIME特定子类的基类。通常,您不会创建特定于MIMEBase的实例,尽管可以。MIMEBase主要提供为更具体的MIME感知子类的方便基类。

_maintype内容类型主类型(例如文本图像),_subtype内容类型plaingif)。_params是参数键/值字典,并直接传递到Message.add_header

MIMEBase类始终添加Content-Type标头(基于_maintype_subtype_params )和MIME-Version标头(始终设置为1.0)。

class email.mime.nonmultipart.MIMENonMultipart

模块:email.mime.nonmultipart

MIMEBase的子类,这是不是multipart的MIME消息的中间基类。这个类的主要目的是防止使用attach()方法,这只对multipart消息有意义。如果调用attach(),则会引发一个MultipartConversionError异常。

classemail.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, **_params)

模块:email.mime.multipart

MIMEBase的子类,这是multipart的MIME邮件的中间基类。可选_subtype默认为mixed,但可用于指定邮件的子类型。multipart / _subtypeContent-Type头将添加到消息对象。还将添加MIME-Version头。

可选boundary是多部分边界字符串。None(默认值)时,在需要时计算边界(例如,当消息被序列化时)。

_subparts是有效负载的初始子部件的序列。必须可以将此序列转换为列表。您始终可以使用Message.attach方法将新的子部件附加到消息。

Content-Type标头的附加参数取自关键字参数,或传递到作为关键词字典的_params参数中。

class email.mime.application.MIMEApplication(_data, _subtype='octet-stream', _encoder=email.encoders.encode_base64, **_params)

模块:email.mime.application

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

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

_params直接传递给基类构造函数。

class email.mime.audio.MIMEAudio(_audiodata, _subtype=None, _encoder=email.encoders.encode_base64, **_params)

模块:email.mime.audio

MIMENonMultipart的子类,MIMEAudio类用于创建主要类型音频的MIME消息对象。_audiodata是包含原始音频数据的字符串。如果此数据可以由标准Python模块sndhdr解码,则子类型将自动包含在Content-Type头中。否则,您可以通过_subtype参数显式指定音频子类型。如果未能猜出次要类型并且未给出_subtype,则会引发TypeError

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

_params直接传递给基类构造函数。

class email.mime.image.MIMEImage(_imagedata, _subtype=None, _encoder=email.encoders.encode_base64, **_params)

模块:email.mime.image

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

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

_params直接传递到MIMEBase构造函数。

class email.mime.message.MIMEMessage(_msg, _subtype='rfc822')

模块:email.mime.message

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

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

class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None)

模块:email.mime.text

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

Unless the _charset argument is explicitly set to None, the MIMEText object created will have both a Content-Type header with a charset parameter, and a Content-Transfer-Endcoding header. 这意味着,即使在set_payload命令中传递了字符集,后续的set_payload调用也不会产生编码的有效内容。您可以通过删除Content-Transfer-Encoding头来“重置”此行为,之后set_payload调用将自动编码新的有效内容(并添加新的Content-Transfer-Encoding header)。

在3.5版本中更改: _charset也接受Charset实例。