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

Python使用MIMEMultipart发邮件不断累加内容/附件如何解决?

问题原因

你当前使用的MIMEMultipart实例msg是在循环逻辑之外初始化的,msg.attach()方法的作用是往实例的内容队列里追加内容,并不会自动清空上一轮循环添加的文本、附件等资源,所以每发一封邮件内容都会叠加之前的所有内容。

最优解决方案

最稳妥、不易出错的处理方式是:把MIMEMultipart实例的初始化逻辑放到循环内部,每给一个收件人发邮件就新建一个独立的msg对象,自动规避内容叠加问题,哪怕后续要加附件逻辑也能正常运行。
修正后的代码示例:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

# 邮箱服务初始化逻辑保留在循环外即可
server = smtplib.SMTP('你的SMTP服务器地址', 587)
server.starttls()
server.login(your_email, your_email_password)

for i in range(len(emails)):
    # 每轮循环新建msg对象,自动清空上一轮的所有内容和配置
    msg = MIMEMultipart()
    name = names[i] + ","
    email = emails[i] + "@nmamit.in"
    TEXT = "my message" + name
    msg['Subject'] = subjet_txt
    msg['From'] = your_email
    msg['To'] = email
    msg.attach(MIMEText(TEXT, 'plain'))
    # 如有附件,也在当前循环内添加即可
    text = msg.as_string()
    server.sendmail(your_email, email, text)
server.quit()

可选:重置现有MIMEMultipart对象的方案

如果你不想每次新建实例,也可以在每次发送完邮件后手动清空现有对象的内容和头部配置,但是这种方式容易遗漏配置导致异常,不推荐使用:

# 每次发送完邮件后执行
msg.set_payload([]) # 清空所有已添加的文本、附件内容
for key in list(msg.keys()): # 清空所有已设置的头部信息(收件人、发件人、主题等)
    del msg[key]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:54:03