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

CSV数据行为何以独立文本文件呈现而非在邮件正文中?

问题分析

你的问题出在每一行CSV数据都被封装成独立的MIMEText对象并附加到邮件,MIMEMultipart在默认混合模式下,多个文本部分会被邮件客户端识别为单独附件,而非合并到正文。另外build_message里的字符串拼接逻辑也存在错误,导致格式混乱。

解决方案

将所有CSV行合并为一个完整的文本内容,生成单个MIMEText对象,这样所有内容会统一显示在邮件正文里。以下是修改后的代码:

修改后的核心代码

读取CSV部分(无需修改)

lines_to_send = []
with open(file, mode='r') as file:
    csvFile = csv.reader(file)
    for line in csvFile:
        lines_to_send.append(line)

发送邮件部分(关键修改)

usernameEmail = '...'
passwordEmail = '...'
toEmails = ['...']

def send_mail(toaddrs_list, msg_lines, fromaddr, subject="Title"):
    s = smtplib.SMTP('...')
    s.starttls()
    s.set_debuglevel(1)
    s.login(usernameEmail, passwordEmail)
    msg = MIMEMultipart()
    sender = fromaddr
    recipients = toaddrs_list
    msg['Subject'] = subject
    if fromaddr is not None:
        msg['From'] = sender
    msg['To'] = ", ".join(recipients)
    
    # 只添加一个合并后的文本部分
    for mime_text in build_message(msg_lines):
        msg.attach(mime_text)

    s.sendmail(sender, recipients, msg.as_string())

def build_message(lines):
    # 将所有CSV行合并为一个字符串,每行用逗号分隔并换行
    content = '\n'.join([', '.join(line) for line in lines])
    # 返回单个MIMEText对象的列表
    return [MIMEText(content, 'plain')]

send_mail(toEmails, lines_to_send, usernameEmail)

可选优化:生成HTML表格(更美观的正文格式)

如果希望邮件正文显示为规整的表格,可以把build_message改成HTML格式:

def build_message(lines):
    html_content = '<table border="1" cellpadding="4" cellspacing="0">'
    for line in lines:
        html_content += '<tr>'
        for cell in line:
            # 转义HTML特殊字符,避免格式错乱
            html_content += f'<td>{cell.replace("<", "&lt;").replace(">", "&gt;")}</td>'
        html_content += '</tr>'
    html_content += '</table>'
    return [MIMEText(html_content, 'html')]
关键说明
  • 原代码循环创建MIMEText并逐个attach,相当于给邮件添加了N个独立的文本附件,这是数据行被单独附加的根本原因。
  • 合并所有内容为单个MIMEText后,邮件客户端会将其识别为邮件正文的一部分,而非附件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:40:22