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

Python下无需重命名,如何发送多个同名文件作为邮件附件?

解决Gmail中同名附件被覆盖的问题

你遇到的问题是因为Gmail会通过文件名+附件的唯一标识判断是否为重复文件,默认情况下如果两个附件filename相同且无唯一标识,就会被合并显示。要在不修改filename的前提下让两个附件都正常显示,最可靠的方法是给每个附件添加唯一的Content-ID。

具体实现代码

修改附件添加逻辑,为每个附件生成唯一的Content-ID即可:

from email.message import EmailMessage
import aiosmtplib
from email.utils import make_msgid  # 生成标准格式的Content-ID

msg = EmailMessage()
msg["Subject"] = "Reports"
msg["From"] = "sender@gmail.com"
msg["To"] = "receiver@gmail.com"

files_to_attach = [
    {"path": "folder1/report.pdf", "name": "report.pdf"},
    {"path": "folder2/report.pdf", "name": "report.pdf"}
]

for file in files_to_attach:
    with open(file["path"], 'rb') as f:
        # 生成唯一Content-ID,domain参数可替换为你的域名,也可留空用默认值
        unique_cid = make_msgid(domain="your-domain.com")
        msg.add_attachment(
            f.read(),
            maintype='application',
            subtype='octet-stream',
            filename=file["name"],
            # 为当前附件添加唯一标识头
            headers={'Content-ID': unique_cid}
        )

# 发送邮件
# await aiosmtplib.send(msg, ...)

原理说明

Content-ID是MIME协议中用来标识邮件内每个附件/内嵌资源的唯一标识符,Gmail会通过这个ID区分不同附件——即使文件名完全相同,只要Content-ID不一样,就会被视为独立文件显示,不会出现覆盖情况。

如果不想用make_msgid,也可以用UUID生成自定义格式的Content-ID,只要符合<唯一字符串@域名>的格式即可,示例:

import uuid
unique_cid = f"<{uuid.uuid4()}@your-domain.com>"

内容的提问来源于stack exchange,提问作者Ajith Kumar R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 21:14:52