为了账号安全,请及时绑定邮箱和手机立即绑定

python中,使用MIMEApplication封装邮件附件,Outlook为什么无法收到邮件附件?

python中,使用MIMEApplication封装邮件附件,Outlook为什么无法收到邮件附件?

哔哔one 2019-04-10 20:48:36
在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':binarydatapart.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)
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

欧欧好高兴又有人和我遇到了相同的问题~=w=缘分啊~我真的很少上segmentfault的。。要不是今天又遇到个坑想要分享一下、。。。
当时我遇到这个问题的时候也郁闷了,当时是用Airmail收不到附件,仔细研究了一下邮件的原件的内容才找到
这个问题你可以看一下RFC1341,当头部指定了Content-Type:multipart/alternative时,邮件客户端如果觉得自己不能够展示附件相应的类型,例如Content-Type:text/x-whatever时,就会选择不显示,解决办法是指定为Content-Type:multipart/mixed或者指定为其他的头,例如楼主的这个
pythonclassMIMEApplication(MIMENonMultipart):
"""Classforgeneratingapplication/*MIMEdocuments."""
def__init__(self,_data,_subtype='octet-stream',
_encoder=encoders.encode_base64,**_params):
它指定了_subtype='octet-stream'
而_subtype在MIMEBase是默认不指定的
这个问题我提了个issue给Pythonenvolop库,奈何不鸟我。。我项目里反正也就只能继承和覆盖了这个库的to_mime_message函数。。。
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 380 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信