email.mime: 從頭創建電子郵件和 MIME 對象?
源代碼: Lib/email/mime/
此模塊是舊版 (Compat32) 電子郵件 API 的組成部分。 它的功能在新版 API 中被 contentmanager 部分替代,但在某些應用中這些類仍可能有用,即使是在非舊版代碼中。
通常,你是通過傳遞一個文件或一些文本到解析器來獲得消息對象結構體的,解析器會解析文本并返回根消息對象。 不過你也可以從頭開始構建一個完整的消息結構體,甚至是手動構建單獨的 Message 對象。 實際上,你也可以接受一個現有的結構體并添加新的 Message 對象并移動它們。 這為切片和分割 MIME 消息提供了非常方便的接口。
你可以通過創建 Message 實例并手動添加附件和所有適當的標頭來創建一個新的對象結構體。 不過對于 MIME 消息來說,email 包提供了一些便捷子類來讓事情變得更容易。
這些類列示如下:
-
class
email.mime.base.MIMEBase(_maintype, _subtype, *, policy=compat32, **_params)? 模塊:
email.mime.base這是
Message的所有 MIME 專屬子類。 通常你不會創建專門的MIMEBase實例,盡管你可以這樣做。MIMEBase主要被提供用來作為更具體的 MIME 感知子類的便捷基類。_maintype 是 Content-Type 的主類型 (例如 text 或 image),而 _subtype 是 Content-Type 的次類型 (例如 plain 或 gif)。 _params 是一個形參鍵/值字典并會被直接傳遞給
Message.add_header。如果指定了 policy (默認為
compat32策略),它將被傳遞給Message。MIMEBase類總是會添加一個 Content-Type 標頭 (基于 _maintype, _subtype 和 _params),以及一個 MIME-Version 標頭 (總是設為1.0)。在 3.6 版更改: 添加了 policy 僅限關鍵字形參。
-
class
email.mime.nonmultipart.MIMENonMultipart? 模塊:
email.mime.nonmultipartMIMEBase的子類,這是用于非 multipart MIME 消息的中間基類。 這個類的主要目標是避免使用attach()方法,該方法僅對 multipart 消息有意義。 如果attach()被調用,則會引發MultipartConversionError異常。
-
class
email.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, *, policy=compat32, **_params)? 模塊:
email.mime.multipartMIMEBase的子類,這是用于 multipart MIME 消息的中間基類。 可選的 _subtype 默認為 mixed,但可被用來指定消息的子類型。 將會在消息對象中添加一個:mimetype:multipart/_subtype 的 Content-Type 標頭。 并還將添加一個 MIME-Version 標頭。可選的 boundary 是多部分邊界字符串。 當為
None(默認值) 時,則會在必要時(例如當消息被序列化時)計算邊界。_subparts 是載荷初始子部分的序列。 此序列必須可以被轉換為列表。 你總是可以使用
Message.attach方法將新的子部分附加到消息中。可選的 policy 參數默認為
compat32。用于 Content-Type 標頭的附加形參會從關鍵字參數中獲取,或者傳入到 _params 參數,該參數是一個關鍵字的字典。
在 3.6 版更改: 添加了 policy 僅限關鍵字形參。
-
class
email.mime.application.MIMEApplication(_data, _subtype='octet-stream', _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)? 模塊:
email.mime.applicationMIMENonMultipart的子類,MIMEApplication類被用來表示主類型為 application 的 MIME 消息。 _data 是包含原始字節數據的字符串。 可選的 _subtype 指定 MIME 子類型并默認為 octet-stream。可選的 _encoder 是一個可調用對象(即函數),它將執行實際的數據編碼以便傳輸。 這個可調用對象接受一個參數,該參數是
MIMEApplication的實例。 它應當使用get_payload()和set_payload()來將載荷改為已編碼形式。 它還應根據需要將任何 Content-Transfer-Encoding 或其他標頭添加到消息對象中。 默認編碼格式為 base64。 請參閱email.encoders模塊來查看內置編碼器列表。可選的 policy 參數默認為
compat32。_params 會被直接傳遞給基類的構造器。
在 3.6 版更改: 添加了 policy 僅限關鍵字形參。
-
class
email.mime.audio.MIMEAudio(_audiodata, _subtype=None, _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)? 模塊:
email.mime.audioMIMENonMultipart的子類,MIMEAudio類被用來創建主類型為 audio 的 MIME 消息。 _audiodata 是包含原始音頻數據的字符串。 如果此數據可由標準 Python 模塊sndhdr來編碼,則其子類型將被自動包括在 Content-Type 標頭。 在其他情況下你可以通過 _subtype 參數顯式地指定音頻子類型 。 如果無法猜測出主類型并且未給出 _subtype,則會引發TypeError。可選的 _encoder 是一個可調用對象(即函數),它將執行實際的音頻數據編碼以便傳輸。 這個可調用對象接受一個參數,該參數是
MIMEAudio的實例。 它應當使用get_payload()和set_payload()來將載荷改為已編碼形式。 它還應根據需要將任何 Content-Transfer-Encoding 或其他標頭添加到消息對象中。 默認編碼格式為 base64。 請參閱email.encoders模塊來查看內置編碼器列表。可選的 policy 參數默認為
compat32。_params 會被直接傳遞給基類的構造器。
在 3.6 版更改: 添加了 policy 僅限關鍵字形參。
-
class
email.mime.image.MIMEImage(_imagedata, _subtype=None, _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)? 模塊:
email.mime.imageMIMENonMultipart的子類,MIMEImage類被用來創建主類型為 image 的 MIME 消息對象。 _imagedata 是包含原始圖像數據的字符串。 如果此數據可由標準 Python 模塊imghdr來解碼,則其子類型將被自動包括在 Content-Type 標頭中。 在其他情況下你可以通過 _subtype 參數顯式地指定圖像子類型。 如果無法猜測出主類型并且未給出 _subtype,則會引發TypeError。可選的 _encoder 是一個可調用對象(即函數),它將執行實際的圖像數據編碼以便傳輸。 這個可調用對象接受一個參數,該參數是
MIMEImage的實例。 它應當使用get_payload()和set_payload()來將載荷改為已編碼形式。 它還應根據需要將任何 Content-Transfer-Encoding 或其他標頭添加到消息對象中。 默認編碼格式為 base64。 請參閱email.encoders模塊來查看內置編碼器列表。可選的 policy 參數默認為
compat32。_params 會被直接傳遞給
MIMEBase構造器。在 3.6 版更改: 添加了 policy 僅限關鍵字形參。
-
class
email.mime.message.MIMEMessage(_msg, _subtype='rfc822', *, policy=compat32)? 模塊:
email.mime.messageMIMENonMultipart的子類,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.textMIMENonMultipart的子類,MIMEText類被用來創建主類型為 text 的 MIME 對象。 _text 是用作載荷的字符串。 _subtype 指定子類型并且默認為 plain。 _charset 是文本的字符集并會作為參數傳遞給MIMENonMultipart構造器;如果該字符串僅包含ascii碼位則其默認值為us-ascii,否則為utf-8。 _charset 形參接受一個字符串或是一個Charset實例。除非 _charset 參數被顯式地設為
None,否則所創建的 MIMEText 對象將同時具有附帶charset形參的 Content-Type 標頭,以及 Content-Transfer-Encoding 標頭。 這意味著后續的set_payload調用將不再產生已編碼的載荷,即使它在set_payload命令中被傳入。 你可以通過刪除Content-Transfer-Encoding標頭來“重置”此行為,在此之后的set_payload調用將自動編碼新的載荷(并添加新的 Content-Transfer-Encoding 標頭)。可選的 policy 參數默認為
compat32。在 3.5 版更改: _charset 也可接受
Charset實例。在 3.6 版更改: 添加了 policy 僅限關鍵字形參。
