smtp - python中,使用MIMEApplication封装邮件附件,Outlook为什么无法收到邮件附件?
高洛峰
高洛峰 2017-04-17 14:59:47
0
2
584

在python中使用MIMEAppliction封装附件,outlook收到此邮件时无附件。

使用MIMEBase封装附件,outlook可以收到附件。

其他客户端、网页端均正常显示,就想搞明白为什么,以后要如何取舍,在网上看到的办法都是使用MIMEApplication,对不明确的附件类型的附件进行统一包装。

两段代码如下,请教为什么?

file_mail = MIMEApplication(open(fileurl,'rb').read())  
file_mail.add_header('Content-Disposition', 'attachment',filename=filename.decode('utf-8').encode('gb2312'))  
msg.attach(file_mail)


part = MIMEBase('application', 'octet-stream') #'octet-stream': binary data 
part.set_payload(open(file, 'rb').read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file)) 
msg.attach(part)
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
阿神

沒用過 MIMEApplication。看上去沒什麼差別。

你可以給能夠復現問題的程式碼嗎? (我沒有辦法驗證,而你的程式碼有所缺失,所以構造的郵件可能會發生你遇到的問題,也可能不會。)

巴扎黑

歐歐好高興又有人和我遇到了相同的問題~=w=緣分啊~我真的很少上segmentfault的。 。要不是今天又遇到個坑想要分享一下、。 。 。
當時我遇到這個問題的時候也鬱悶了,當時是用Airmail收不到附件,仔細研究了一下郵件的原件的內容才找到
這個問題你可以看一下RFC 1341,當頭部指定了Content-Type: multipart/alternative 時,郵件用戶端如果覺得自己不能夠展示附件相應的類型,例如Content-Type: text/x-whatever 時,就會選擇不顯示,解決方法是指定為Content-Type: multipart/mixed 或指定為其他的頭,例如樓主的這個

pythonclass MIMEApplication(MIMENonMultipart):
    """Class for generating application/* MIME documents."""

    def __init__(self, _data, _subtype='octet-stream',
                 _encoder=encoders.encode_base64, **_params):

它指定了_subtype='octet-stream'
而_subtype在MIMEBase是預設不指定的

這個問題我提了個issue給Python envolop庫,奈何不鳥我。 。我專案裡反正也就只能繼承和覆蓋了這個函式庫的to_mime_message函數。 。 。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!