python3发邮件,附件名称为中文时出错

问题描述

我写了一个发邮件的类,一切进行的很顺利,但是附件名改成中文的时候就出问题了

问题出现的环境背景及自己尝试过哪些方法

用的是python3*和email包

是了MIMEText、MIMEApplication、MIMEBase都不行

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

//下面是MIMEText
att1 = MIMEText(open(v, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
#生成附件的名称
filename = (v.split("\\"))[-1]
att1["Content-Disposition"] = 'attachment; filename='+filename
#将附件内容插入邮件中
self.message.attach(att1)

//下面是MIMEApplication
xlsxpart = MIMEApplication(open(v, 'rb').read())
basename = (v.split("\\"))[-1]
xlsxpart.add_header('Content-Disposition', 'attachment', filename=('gbk', '', basename))
self.message.attach(xlsxpart)

你期待的结果是什么?实际看到的错误信息又是什么?

用浏览器打开邮箱还能看到一个附件,但是名称不是正确的,用foxmail打开直接看不到附件。求高手指点。谢谢~~

阅读 7.6k
2 个回答

附件名可以中文,下面是自己以前的一个代码片段,用make_header

from email.header import  make_header
file_msg = MIMEText(open(file,'rb').read(), 'base64', 'UTF-8')
file_msg["Content-Type"] = 'application/octet-stream;name="%s"'% make_header([(file,'UTF-8')]).encode('UTF-8')
file_msg["Content-Disposition"] = 'attachment;filename= "%s"' % make_header([(file, 'UTF-8')]).encode('UTF-8')
msg.attach(file_msg)

邮件传输附件名不正常中文的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏