如何通过电子邮件发送Python DataFrame,避免表格显示为原始HTML代码?
问题原因
你当前的邮件发送逻辑将HTML内容作为纯文本直接发送,未指定邮件内容的MIME类型为HTML,因此邮件客户端不会对HTML标签进行渲染,直接展示原始代码。
解决方案
需要使用Python标准库的email模块构造标准HTML格式邮件,修改后的完整代码如下:
import smtplib import ssl from email.mime.text import MIMEText from pretty_html_table import build_table # 生成表格HTML email_df = build_table(df, "blue_light") # 构造邮件正文 message_content = f""" Dear mister X, Please have a look at these numbers. There is a big change in revenue since {period_1} compared to {period_2}: {email_df} """ # 构造HTML类型的邮件对象,指定内容类型为html msg = MIMEText(message_content, 'html', 'utf-8') # 单独设置邮件头信息 msg['Subject'] = f"blablabla - {today}" msg['From'] = sender_email msg['To'] = receiver_email context = ssl.create_default_context() with smtplib.SMTP_SSL(smtp_server, port, context=context) as server: server.login(sender_email, password) # 传入格式化后的MIME邮件内容 server.sendmail(sender_email, receiver_email, msg.as_string())
补充说明
- 不要将Subject主题直接拼接到邮件正文中,需通过MIME对象的头信息单独设置,避免被识别为正文内容
- MIMEText的第二个参数指定为
html,明确告知邮件客户端该内容需要以HTML格式渲染,表格会自动正常展示 - 如果需要同时支持纯文本和HTML两种格式的邮件,可以改用
MIMEMultipart('alternative'),同时添加纯文本和HTML两个版本的MIMEText对象,兼容不支持HTML的邮件客户端
内容的提问来源于stack exchange,提问作者Jorginton
相关产品推荐
相关产品推荐

