email模块发送邮件附件,文件损坏无法打开的问题

python devops flask 阅读:588

在ops中使用smtplib和email发送带附件的邮件发现附件被损坏无法打开

附件的设置为:MIMEText(open("2018-06-13_09-18-01.xlsx", 'rb').read(),‘base64’,'utf-8')

image.png

打印MIME消息由消息头和消息体

image.png

发现传输的编码的为‘8bit’,数据为原始的数据流,没有被base64过,导致我们收到的邮件附件就是原始数据,邮箱软件无法根据传输编码去解码数据所以打开提示为无效文件

解决方法:

#attachment_flow为数据流


MIMEText(email.Encoders._bencode(attachment_flow))
att.replace_header('Content-Transfer-Encoding', 'base64')

现在邮件附件正常打开,查看消息头的编码格式和消息体是正常的

image.png