中文文件名的邮件附件在qq邮箱和sina邮箱显示有误
来源:6-3 发送html邮件和带附件的邮件
小神1984
2023-03-12 14:03:11
问题描述:
发送邮件到QQ邮箱,附件名变成了tcmime.xxx.bin; 发送到sina邮箱,附件名变成了 附件1,下载后可以用word打开。不知道是哪里出了问题?
相关代码:
# coding:utf-8 import os import xlrd import smtplib from email.header import Header from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from docx import Document from docx.oxml.ns import qn from docx.shared import Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT path = r"D:\PycharmProjects\salary\org_file\salary.xlsx" book = xlrd.open_workbook(path) sheet = book.sheet_by_index(0) # 读取excel到列表 result = [] for i in sheet.get_rows(): content = [] for j in i: content.append(j.value) result.append(content) for i in result: print(i) # 编辑word tar_path = os.path.split(path)[0] tar_file_list = [] receiver_name_list = [] for d in result[1:]: doc = Document() title = doc.add_heading('', 0) _title = title.add_run('5月工资单') table_obj = doc.add_table(2, 10, style='Table Grid') cell = table_obj.rows[0].cells for n, c in enumerate(result[0][:-1]): cell[n].text = str(c) cell = table_obj.rows[1].cells for n, c in enumerate(d[:-1]): cell[n].text = str(c) style = doc.styles['Normal'] style.font.name = '微软雅黑' style.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑') style.font.size = Pt(11) title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER _title.font.name = '微软雅黑' _title._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') _title.bold = True tar_file = os.path.join(tar_path, d[0]+'5月工资单.docx') doc.save(tar_file) tar_file_list.append(tar_file) receiver_name_list.append(d[0]) # 发送邮件 mail_host = 'smtp.sina.com' mail_user = 'm00000000' mail_pass = '00000000000' sender = 'm00000000@sina.com' receivers = [] for d in result[1:]: receivers.append(d[10]) for n, t in enumerate(tar_file_list): message = MIMEMultipart() attr = MIMEText(open(t, 'rb').read(), 'base64', 'uft-8') attr['Content-Type'] = 'application/octet-stream' f_name = os.path.split(t)[-1] attr.add_header('Content_Disposition', 'attachment', filename=('gbk', '', f_name)) message.attach(attr) msg_content = ''' <p style="font-weight:bold;">亲爱的 ''' + receiver_name_list[n] + ''' : </p> <p style="text-indent:2em;">感谢您为公司做出的贡献! </p> <p style="text-indent:2em;">本月工资已经到账,请注意查收。如未收到,请您在5个工作日内联系人力资源部。 </p> <p style="text-indent:2em;">您的工资单详情请查看邮件附件! </p> <p style="text-indent:2em;">如有异议请联系人力资源部。 </p></p> <br /><br /><br /> <p style="text-align:right;">人力资源部<br />2021年5月31日 </p> ''' text = MIMEText(msg_content, 'html', 'utf-8') message.attach(text) message['From'] = Header(sender) message['Subject'] = Header('5月工资单') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, (receivers[n], sender), message.as_string()) except smtplib.SMTPException as e: print('error: %s' % e)
1回答
好帮手慕小猿
2023-03-13
同学,你好!是附件名称为中文造成的,同学按以下操作进行修改
1、导入make_header()方法
2、使用make_header方法对filename进行操作
祝学习愉快~
相似问题