You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:57:01