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

如何用smtplib发送带pandas DataFrame生成CSV附件且保留HTML视图的邮件

解决方案:邮件正文嵌入HTML表格+添加CSV附件

你的问题在于用add_alternative添加CSV是错误的——这个方法是用来为同一邮件内容提供不同格式的备选版本(比如纯文本和HTML),而非添加独立附件。正确的做法是使用EmailMessage.add_attachment()方法来添加CSV附件,同时保留原有的HTML正文设置。

修正后的完整代码

import smtplib
import pandas as pd
from email.message import EmailMessage

# 邮件配置
SMTP_SERVER = 'smtp_server@example.com'
FROM = 'some_address@example.com'
TO = ['address@example.com']
SUBJECT = 'test attachment e-mail'
EMAIL_TEMPLATE = """\
<html>
  <head>
  <style>
  table, th, td {{font-size:9pt; border:1px solid black; border-collapse:collapse; text-align:left; background-color:LightGray;}}
  th, td {{padding: 5px;}}
  </style>
  </head>
  <body>
     Dear Team,<br><br>
     Please Find the Project-wise Report with their respective Owners ID and e-mail address.!<br><br>
     {} <br><br>
    Kind regards.<br>
    STR TEAM.
  </body>
</html>"""

# 读取DataFrame(修正原代码错误:pd.DataFrame()不能直接传文件路径,需用pd.read_csv)
df = pd.read_csv("/tmp/fix.txt")

def send_email():
    server = smtplib.SMTP(SMTP_SERVER)
    msg = EmailMessage()
    msg['Subject'], msg['From'], msg['To'] = SUBJECT, FROM, TO
    
    # 设置纯文本备选内容
    msg.set_content("Text version of your html template")
    
    # 添加HTML正文
    msg.add_alternative(
        EMAIL_TEMPLATE.format(df.to_html(index=False)),
        subtype='html'
    )
    
    # 添加CSV附件
    csv_content = df.to_csv(index=False)
    msg.add_attachment(
        csv_content,
        maintype='text',
        subtype='csv',
        filename='project_report.csv'  # 附件显示的文件名
    )
    
    server.send_message(msg)
    server.quit()  # 关闭SMTP连接

if __name__ == '__main__':
    send_email()

关键说明

  1. 修正DataFrame创建:原代码pd.DataFrame("/tmp/fix.txt")不符合语法,需用pd.read_csv()读取文本文件生成DataFrame。
  2. 附件添加逻辑:
    • 先用df.to_csv(index=False)生成CSV格式字符串
    • 通过add_attachment()指定内容、MIME类型(text/csv)和附件文件名,实现独立附件添加
  3. HTML视图保留:原有的add_alternative设置HTML正文的逻辑完全保留,不会影响邮件的HTML显示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:40:30