18.1.4. email.mime:从头开始创建电子邮件和 MIME 对象 — Python 文档
18.1.4. 电子邮件.mime :从头开始创建电子邮件和 MIME 对象
通常,您通过将文件或一些文本传递给解析器来获取消息对象结构,解析器解析文本并返回根消息对象。 但是,您也可以从头开始构建完整的消息结构,甚至可以手动构建单个 Message 对象。 事实上,您还可以采用现有结构并添加新的 Message 对象,移动它们等。 这为切片和切块 MIME 消息提供了一个非常方便的界面。
您可以通过创建 Message 实例、手动添加附件和所有适当的标题来创建新的对象结构。 但是对于 MIME 消息,email 包提供了一些方便的子类,使事情变得更容易。
以下是课程:
- class email.mime.base.MIMEBase(_maintype, _subtype, **_params)
模块:
email.mime.base
这是 Message 的所有 MIME 特定子类的基类。 通常,您不会专门创建 MIMEBase 的实例,尽管您可以。 MIMEBase 主要是作为更具体的 MIME-aware 子类的方便基类提供的。
_maintype 是 Content-Type 主要类型(例如 text 或 image),而 _subtype 是 Content-Type 次要类型(例如 普通 或 gif)。 _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 异常。
2.2.2 版中的新功能。
- class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]])
模块:
email.mime.multipart
MIMEBase 的子类,这是 multipart 的 MIME 消息的中间基类。 可选 _subtype 默认为 mixed,但可用于指定消息的子类型。 multipart/_subtype 的 Content-Type 标头将被添加到消息对象中。 还将添加 MIME-Version 标头。
可选的 boundary 是多部分边界字符串。 当
None
(默认)时,需要时计算边界(例如消息序列化时)。_subparts 是有效载荷的初始子部分序列。 必须可以将此序列转换为列表。 您始终可以使用 Message.attach 方法将新的子部分附加到消息。
Content-Type 标头的附加参数取自关键字参数,或传递到 _params 参数中,这是一个关键字字典。
2.2.2 版中的新功能。
- class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]])
模块:
email.mime.application
MIMENonMultipart 的子类 MIMEApplication 类用于表示主要类型 application 的 MIME 消息对象。 _data 是一个包含原始字节数据的字符串。 可选 _subtype 指定 MIME 子类型,默认为 octet-stream。
可选的 _encoder 是一个可调用的(即 函数),它将执行数据的实际编码以进行传输。 这个可调用对象采用一个参数,即 MIMEApplication 实例。 它应该使用 get_payload() 和 set_payload() 将有效载荷更改为编码形式。 它还应该根据需要向消息对象添加任何 Content-Transfer-Encoding 或其他标头。 默认编码为 base64。 有关内置编码器的列表,请参阅 email.encoders 模块。
_params 直接传递给基类构造函数。
2.5 版中的新功能。
- class email.mime.audio.MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]])
模块:
email.mime.audio
MIMENonMultipart 的子类 MIMEAudio 类用于创建主要类型 audio 的 MIME 消息对象。 _audiodata 是包含原始音频数据的字符串。 如果此数据可以通过标准 Python 模块 sndhdr 进行解码,则子类型将自动包含在 Content-Type 标头中。 否则,您可以通过 _subtype 参数明确指定音频子类型。 如果无法猜测次要类型且未给出 _subtype,则引发
TypeError
。可选的 _encoder 是一个可调用的(即 函数),它将执行音频数据的实际编码以进行传输。 这个可调用对象采用一个参数,即 MIMEAudio 实例。 它应该使用 get_payload() 和 set_payload() 将有效载荷更改为编码形式。 它还应该根据需要向消息对象添加任何 Content-Transfer-Encoding 或其他标头。 默认编码为 base64。 有关内置编码器的列表,请参阅 email.encoders 模块。
_params 直接传递给基类构造函数。
- class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_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])
模块:
email.mime.message
MIMENonMultipart 的子类 MIMEMessage 类用于创建主类型 message 的 MIME 对象。 _msg 用作有效载荷,并且必须是类 Message(或其子类)的实例,否则会引发
TypeError
。可选 _subtype 设置消息的子类型; 它默认为 rfc822。
- class email.mime.text.MIMEText(_text[, _subtype[, _charset]])
模块:
email.mime.text
MIMENonMultipart 的子类 MIMEText 类用于创建主要类型 text 的 MIME 对象。 _text 是有效载荷的字符串。 _subtype 是次要类型,默认为 plain。 _charset 是文本的字符集,作为参数传递给 MIMENonMultipart 构造函数; 默认为
us-ascii
。 如果 _text 是 unicode,则使用 _charset 的 output_charset 进行编码,否则按原样使用。2.4 版更改: 之前不推荐使用的 _encoding 参数已被删除。 内容传输编码现在基于 _charset 参数隐式发生。
除非
_charset
参数显式设置为None
,否则创建的 MIMEText 对象将具有 Content-Type 标头和charset
参数,以及Content-Transfer-Encoding 标头。 这意味着后续的set_payload
调用不会产生编码的有效载荷,即使在set_payload
命令中传递了字符集。 您可以通过删除Content-Transfer-Encoding
标头来“重置”此行为,之后set_payload
调用将自动编码新的有效负载(并添加新的 Content-Transfer-Encoding头)。