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

Python发送多附件邮件时报set_content not valid on multipart错误如何解决

问题原因
  • 调用EmailMessage.add_attachment()方法后,邮件消息会自动转为multipart多部分类型,该类型消息不允许再调用set_content()方法修改正文内容
  • 代码逻辑漏洞:当检测到multiAbort_file存在时,你先添加了第二个附件,之后又调用msg.set_content()修改正文,此时消息已经是多部分类型,直接触发报错
修复方案

提前判断multiAbort_file是否存在,先确定最终的正文内容,调用set_content()设置正文后再统一添加所有附件即可,调整后的代码示例如下:

import os
import smtplib
from datetime import datetime
from email.message import EmailMessage

# 自行配置发件信息常量
SENDER_EMAIL = "你的发件邮箱地址"
APP_PASSWORD = "你的邮箱应用密码"

date_string = f'{datetime.now():%Y-%m-%dT%H_%M_%S%z}'

def send_mail_with_excel(recipient_email, subject, content, date_time):
    input_file = "C:\\scripts\\mail_send\\remediated_data_" + date_time + ".csv"
    multiAbort_file = "C:\\scripts\\mail_send\\multi_aborts_data_"+ date_time + ".csv"

    msg = EmailMessage()
    msg['Subject'] = subject
    msg['From'] = SENDER_EMAIL
    msg['To'] = recipient_email

    # 先确定最终正文再设置
    final_content = content
    if os.path.isfile(multiAbort_file):
        final_content += "\n Note : there is another list of items that are aborted multiple times in multi_aborts file, please restart these to continue"
    msg.set_content(final_content)

    # 再统一添加所有附件
    with open(input_file, 'rb') as f:
        file_data = f.read()
    msg.add_attachment(file_data, maintype="application", subtype="csv", filename=input_file)

    if os.path.isfile(multiAbort_file):
        with open(multiAbort_file, 'rb') as f:
            file_data = f.read()
        msg.add_attachment(file_data, maintype="application", subtype="csv", filename=multiAbort_file)

    with smtplib.SMTP('smtp-mail.outlook.com', 587) as smtp:
        smtp.starttls()
        smtp.login(SENDER_EMAIL, APP_PASSWORD)
        smtp.send_message(msg)

send_mail_with_excel(["abc@xyz.com"], "Remediated List of items" + date_string,
                     "Remediated List of items " + date_string, date_string)

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

相关产品推荐
方舟 Agent Plan

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

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