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

使用Python email模块发送邮件时附件显示为noname的问题排查

附件显示'noname'的原因及修复方案

问题出在你把附件的文件名头加到了外层的邮件容器对象上,而非附件本身:

你当前代码中是给MIMEMultipart对象(email变量)添加Content-Disposition头,但邮件客户端只会读取附件对应的MIMEBase对象的头信息来识别文件名,外层的头不会被解析为附件的文件名。

修正后的代码

import smtplib

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# Setup email log message
logfile = "log.txt"
sender = "xxxxx@gmail.com"
password = "xxxxx"
receiver = "xxxxx@gmail.com"
subject = "Log file ALERT!"
body = """
Hello Dave,
Here is your log file.
"""

email = MIMEMultipart()
email["From"] = sender
email["To"] = receiver
email["Subject"] = subject

email.attach(MIMEText(body, "plain"))
attachment = "logkeys.txt"
attached_file = open(attachment, 'rb')
payload = MIMEBase('application', 'octet-stream')
payload.set_payload((attached_file).read())
encoders.encode_base64(payload)
# 关键修改:把Content-Disposition头添加到payload(附件对象)上,而非外层email对象
payload.add_header('Content-Disposition', 'attachment', filename=attachment)
email.attach(payload)

session = smtplib.SMTP_SSL('smtp.gmail.com', 465) #use gmail with port
session.login(sender, password) #login with mail_id and password
session.sendmail(sender, receiver, email.as_string())
session.quit()

说明

将email.add_header(...)替换为payload.add_header(...)后,代表附件的MIMEBase对象会携带正确的文件名标识头,邮件客户端就能正确识别并显示附件名称logkeys.txt,而不是默认的'noname'。

内容的提问来源于stack exchange,提问作者pentestdave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:09:53