2016-10-23 50 views
1

我有一個誤解。爲什麼stmplib模塊需要除MIMEApplication之外的其他模塊?

在smtplib中,我可以通過導入正確的模塊來附加文本文件,圖像文件,zip或任何其他文件類型。

例如附加一個文本文件,我需要做的:

from email.mime.text import MIMEText 

to_attach = MIMEText(temp_file.read()) 
to_attach.add_header('Content-Disposition', 'attachment', filename='xxx.txt') 
msg.attach(to_attach) 

而對於圖片:

from email.mime.image import MIMEImage 

等等....

但是爲什麼我當我有MIMEApplication模塊時需要這些不同的模塊?

from email.mime.application import MIMEApplication 

我成功地發送任何類型的文件(ZIP,APK,PNG等)與該模塊到我的郵箱......

那麼,什麼是其他模塊的目的,如果有的話?

+0

MIMEImage自動設置Content-Type標題並將子類型設置爲Image類型。 – Random

回答

0

mime類型告訴接收電子郵件客戶端連接了哪種文件類型。 smtplib模塊通過設置郵件附件的Content-Type標頭來完成此操作。

「應用程序」mimetype是最低公分母類型。它告訴電子郵件客戶端數據是一個沒有特別解釋的二進制文件。通常,未知二進制數據的唯一選擇是提供將其保存到磁盤。另一方面,如果某些二進制數據被標記爲圖像,客戶端可能會在電子郵件中顯示它,或者提供打開圖像查看器。您的電子郵件客戶端可能能夠讀取一些二進制數據,並確定某個特定的二進制附件實際上是一個圖像(例如),但您不應該依賴於此。

標記數據作爲文本還允許客戶端是智能有關轉換的行結尾(因爲不同的操作系統有不同的慣例有關哪些字符或多個字符的組合標記行的末尾)發送文本文件作爲二進制應用防止這一點,但並不像發送二進制文件那樣糟糕,這會導致腐敗。

簡而言之,最好發送帶有正確MIME類型的附件,以便接收者能夠正確處理它們的最佳機會。

相關問題