email.mime: 從頭創(chuàng )建電子郵件和 MIME 對象?

源代碼: Lib/email/mime/


此模塊是舊版 (Compat32) 電子郵件 API 的組成部分。 它的功能在新版 API 中被 contentmanager 部分替代,但在某些應用中這些類(lèi)仍可能有用,即使是在非舊版代碼中。

通常,你是通過(guò)傳遞一個(gè)文件或一些文本到解析器來(lái)獲得消息對象結構體的,解析器會(huì )解析文本并返回根消息對象。 不過(guò)你也可以從頭開(kāi)始構建一個(gè)完整的消息結構體,甚至是手動(dòng)構建單獨的 Message 對象。 實(shí)際上,你也可以接受一個(gè)現有的結構體并添加新的 Message 對象并移動(dòng)它們。 這為切片和分割 MIME 消息提供了非常方便的接口。

你可以通過(guò)創(chuàng )建 Message 實(shí)例并手動(dòng)添加附件和所有適當的標頭來(lái)創(chuàng )建一個(gè)新的對象結構體。 不過(guò)對于 MIME 消息來(lái)說(shuō),email 包提供了一些便捷子類(lèi)來(lái)讓事情變得更容易。

這些類(lèi)列示如下:

class email.mime.base.MIMEBase(_maintype, _subtype, *, policy=compat32, **_params)?

模塊: email.mime.base

這是 Message 的所有 MIME 專(zhuān)屬子類(lèi)。 通常你不會(huì )創(chuàng )建專(zhuān)門(mén)的 MIMEBase 實(shí)例,盡管你可以這樣做。 MIMEBase 主要被提供用來(lái)作為更具體的 MIME 感知子類(lèi)的便捷基類(lèi)。

_maintypeContent-Type 的主類(lèi)型 (例如 textimage),而 _subtypeContent-Type 的次類(lèi)型 (例如 plaingif)。 _params 是一個(gè)形參鍵/值字典并會(huì )被直接傳遞給 Message.add_header。

如果指定了 policy (默認為 compat32 策略),它將被傳遞給 Message。

MIMEBase 類(lèi)總是會(huì )添加一個(gè) Content-Type 標頭 (基于 _maintype, _subtype_params),以及一個(gè) MIME-Version 標頭 (總是設為 1.0)。

在 3.6 版更改: 添加了 policy 僅限關(guān)鍵字形參。

class email.mime.nonmultipart.MIMENonMultipart?

模塊: email.mime.nonmultipart

MIMEBase 的子類(lèi),這是用于非 multipart MIME 消息的中間基類(lèi)。 這個(gè)類(lèi)的主要目標是避免使用 attach() 方法,該方法僅對 multipart 消息有意義。 如果 attach() 被調用,則會(huì )引發(fā) MultipartConversionError 異常。

class email.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, *, policy=compat32, **_params)?

模塊: email.mime.multipart

MIMEBase 的子類(lèi),這是用于 multipart MIME 消息的中間基類(lèi)。 可選的 _subtype 默認為 mixed,但可被用來(lái)指定消息的子類(lèi)型。 將會(huì )在消息對象中添加一個(gè):mimetype:multipart/_subtypeContent-Type 標頭。 并還將添加一個(gè) MIME-Version 標頭。

可選的 boundary 是多部分邊界字符串。 當為 None (默認值) 時(shí),則會(huì )在必要時(shí)(例如當消息被序列化時(shí))計算邊界。

_subparts 是載荷初始子部分的序列。 此序列必須可以被轉換為列表。 你總是可以使用 Message.attach 方法將新的子部分附加到消息中。

可選的 policy 參數默認為 compat32。

用于 Content-Type 標頭的附加形參會(huì )從關(guān)鍵字參數中獲取,或者傳入到 _params 參數,該參數是一個(gè)關(guān)鍵字的字典。

在 3.6 版更改: 添加了 policy 僅限關(guān)鍵字形參。

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

模塊: email.mime.application

MIMENonMultipart 的子類(lèi),MIMEApplication 類(lèi)被用來(lái)表示主類(lèi)型為 application 的 MIME 消息。 _data 是包含原始字節數據的字符串。 可選的 _subtype 指定 MIME 子類(lèi)型并默認為 octet-stream。

可選的 _encoder 是一個(gè)可調用對象(即函數),它將執行實(shí)際的數據編碼以便傳輸。 這個(gè)可調用對象接受一個(gè)參數,該參數是 MIMEApplication 的實(shí)例。 它應當使用 get_payload()set_payload() 來(lái)將載荷改為已編碼形式。 它還應根據需要將任何 Content-Transfer-Encoding 或其他標頭添加到消息對象中。 默認編碼格式為 base64。 請參閱 email.encoders 模塊來(lái)查看內置編碼器列表。

可選的 policy 參數默認為 compat32。

_params 會(huì )被直接傳遞給基類(lèi)的構造器。

在 3.6 版更改: 添加了 policy 僅限關(guān)鍵字形參。

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

模塊: email.mime.audio

A subclass of MIMENonMultipart, the MIMEAudio class is used to create MIME message objects of major type audio. _audiodata is a string containing the raw audio data. If this data can be decoded as au, wav, aiff, or aifc, then the subtype will be automatically included in the Content-Type header. Otherwise you can explicitly specify the audio subtype via the _subtype argument. If the minor type could not be guessed and _subtype was not given, then TypeError is raised.

可選的 _encoder 是一個(gè)可調用對象(即函數),它將執行實(shí)際的音頻數據編碼以便傳輸。 這個(gè)可調用對象接受一個(gè)參數,該參數是 MIMEAudio 的實(shí)例。 它應當使用 get_payload()set_payload() 來(lái)將載荷改為已編碼形式。 它還應根據需要將任何 Content-Transfer-Encoding 或其他標頭添加到消息對象中。 默認編碼格式為 base64。 請參閱 email.encoders 模塊來(lái)查看內置編碼器列表。

可選的 policy 參數默認為 compat32。

_params 會(huì )被直接傳遞給基類(lèi)的構造器。

在 3.6 版更改: 添加了 policy 僅限關(guān)鍵字形參。

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

模塊: email.mime.image

A subclass of MIMENonMultipart, the MIMEImage class is used to create MIME message objects of major type image. _imagedata is a string containing the raw image data. If this data type can be detected (jpeg, png, gif, tiff, rgb, pbm, pgm, ppm, rast, xbm, bmp, webp, and exr attempted), then the subtype will be automatically included in the Content-Type header. Otherwise you can explicitly specify the image subtype via the _subtype argument. If the minor type could not be guessed and _subtype was not given, then TypeError is raised.

可選的 _encoder 是一個(gè)可調用對象(即函數),它將執行實(shí)際的圖像數據編碼以便傳輸。 這個(gè)可調用對象接受一個(gè)參數,該參數是 MIMEImage 的實(shí)例。 它應當使用 get_payload()set_payload() 來(lái)將載荷改為已編碼形式。 它還應根據需要將任何 Content-Transfer-Encoding 或其他標頭添加到消息對象中。 默認編碼格式為 base64。 請參閱 email.encoders 模塊來(lái)查看內置編碼器列表。

可選的 policy 參數默認為 compat32。

_params 會(huì )被直接傳遞給 MIMEBase 構造器。

在 3.6 版更改: 添加了 policy 僅限關(guān)鍵字形參。

class email.mime.message.MIMEMessage(_msg, _subtype='rfc822', *, policy=compat32)?

模塊: email.mime.message

MIMENonMultipart 的子類(lèi),MIMEMessage 類(lèi)被用來(lái)創(chuàng )建主類(lèi)型為 message 的 MIME 對象。 _msg 將被用作載荷,并且必須為 Message 類(lèi)(或其子類(lèi))的實(shí)例,否則會(huì )引發(fā) TypeError。

可選的 _subtype 設置消息的子類(lèi)型;它的默認值為 rfc822。

可選的 policy 參數默認為 compat32。

在 3.6 版更改: 添加了 policy 僅限關(guān)鍵字形參。

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

模塊: email.mime.text

MIMENonMultipart 的子類(lèi),MIMEText 類(lèi)被用來(lái)創(chuàng )建主類(lèi)型為 text 的 MIME 對象。 _text 是用作載荷的字符串。 _subtype 指定子類(lèi)型并且默認為 plain。 _charset 是文本的字符集并會(huì )作為參數傳遞給 MIMENonMultipart 構造器;如果該字符串僅包含 ascii 碼位則其默認值為 us-ascii,否則為 utf-8。 _charset 形參接受一個(gè)字符串或是一個(gè) Charset 實(shí)例。

除非 _charset 參數被顯式地設為 None,否則所創(chuàng )建的 MIMEText 對象將同時(shí)具有附帶 charset 形參的 Content-Type 標頭,以及 Content-Transfer-Encoding 標頭。 這意味著(zhù)后續的 set_payload 調用將不再產(chǎn)生已編碼的載荷,即使它在 set_payload 命令中被傳入。 你可以通過(guò)刪除 Content-Transfer-Encoding 標頭來(lái)“重置”此行為,在此之后的 set_payload 調用將自動(dòng)編碼新的載荷(并添加新的 Content-Transfer-Encoding 標頭)。

可選的 policy 參數默認為 compat32。

在 3.5 版更改: _charset 也可接受 Charset 實(shí)例。

在 3.6 版更改: 添加了 policy 僅限關(guān)鍵字形參。