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

在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 학습자의 빠른 성장을 도와주세요!