Python发送邮件时xlsx等附件转为.aaf未知格式的问题求助
问题原因
该问题由代码不规范写法触发内网老旧邮件服务器的解析异常导致,公网邮箱容错性更高因此未暴露问题:
- 指定的Excel附件MIME子类型不符合标准,内网邮件系统无法识别
- 重复添加
Content-Disposition头部导致头信息冲突,服务器解析附件名时出错,误修改后缀为异常格式 - 文件名未做标准编码,若包含非ASCII字符会进一步加剧解析混乱
- 原文件读取逻辑只取文件名不带路径,若附件不在当前工作目录会读取到无效文件,也会触发格式异常
修复后代码
from pathlib import Path from email.message import EmailMessage from email.utils import encode_rfc2231 from smtplib import SMTP_SSL def send_mail(mail_list, cc_list, subject, text, attachment): msg = EmailMessage() msg["From"] = MY_ID msg["To"] = ",".join(mail_list) msg["Cc"] = ",".join(cc_list) msg["Subject"] = subject msg.set_content(text) if attachment: file_path = Path(attachment) filename = file_path.name with open(file_path, "rb") as f: # 修正为xlsx标准MIME类型,兼容老旧邮件系统 msg.add_attachment( f.read(), maintype="application", subtype="vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename=encode_rfc2231(filename, 'utf-8') ) # 已删除重复的add_header语句,add_attachment会自动生成合规头信息 with SMTP_SSL("smtp.gmail.com", 465) as smtp: smtp.login(MY_ID, MY_PW) smtp.send_message(msg)
其他场景适配
如果需要发送PDF附件且遇到同类异常,添加附件时指定maintype="application", subtype="pdf"即可,上述编码、去重逻辑同样适用。
内容的提问来源于stack exchange,提问作者Ahra Cho
相关产品推荐
相关产品推荐

