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

Python实现DataFrame嵌入邮件正文为表格而非附件的问题

解决DataFrame嵌入邮件正文而非附件的问题

问题分析

你当前代码的核心问题是没有将开头的文本内容与DataFrame生成的HTML表格整合到同一个邮件正文中,加上部分邮件客户端对纯HTML结构的解析偏差,导致表格被误识别为附件。

修正方案

以下是调整后的代码,既解决表格嵌入正文的问题,也可利用你导入的pretty_html_table库美化表格(可选):

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

# 筛选需要发送的DataFrame列
mail_df = mail_df[['IDNo','Value1','Value2','Value3']]

# 构造邮件开头文本
body_text = '''Dear Employee,

Please find the below details. 
Please confirm these entries and incase of any changes needed, Log in to - 
abcd.com. 
'''

# 生成带样式的表格HTML(不需要美化的话,替换为mail_df.to_html(index=False))
table_html = build_table(mail_df, 'blue_light')

# 整合文本与表格为完整HTML结构
html_content = f"""
<html>
    <head></head>
    <body>
        <p>{body_text}</p>
        {table_html}
    </body>
</html>
"""

# 邮件基础配置
host = "host.name.com"
TO = "pqr@gmail.com"
msg = MIMEMultipart('alternative')  # 指定类型提升客户端兼容性
msg['Subject'] = "Mail Subject"
msg['From'] = 'xyz@gmail.com'
msg['To'] = TO

# 添加HTML格式的正文
part_html = MIMEText(html_content, 'html')
msg.attach(part_html)

# 发送邮件(需登录的话添加server.login(用户名, 密码))
with smtplib.SMTP(host) as server:
    server.starttls()
    server.send_message(msg)

关键调整点

  • 将开头文本与表格HTML整合到同一个<body>标签内,确保正文内容完整
  • 使用MIMEMultipart('alternative')替代默认类型,适配不同邮件客户端的解析规则
  • 借助pretty_html_table生成美观表格,也可直接用原生to_html方法生成基础表格
  • 用with语句管理SMTP连接,自动关闭连接更安全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:50:02