如何通过Gmail发送以可视化表格展示Pandas DataFrame的邮件?
解决方案:通过Gmail发送带可视化Pandas DataFrame表格的邮件
你现在的代码核心问题是没有将邮件标记为HTML格式,导致邮件客户端把df.to_html()生成的代码当成纯文本显示,不会渲染成你想要的表格样式。下面是完整的可行方案,能让DataFrame以美观的可视化表格形式出现在邮件里:
完整代码示例
import pandas as pd import smtplib from email.mime.text import MIMEText # 1. 构建测试用的DataFrame(和你的示例一致) df_1 = [1,2,3,5] df_2 = [10,20,30,50] df_test = pd.concat([pd.DataFrame(df_1), pd.DataFrame(df_2)], axis=1) df_test.columns = ['数值1', '数值2'] # 给列添加名称,让表格更清晰 # 2. 将DataFrame转为带样式的HTML表格 # 添加边框、内边距等属性,让表格更接近你期望的样式 html_table = df_test.to_html(border=1, cellpadding=4, index=False) # 3. 构建完整的HTML邮件内容(可自定义标题、说明文字) html_content = f""" <html> <body> <h3>测试数据表格</h3> {html_table} </body> </html> """ # 4. 配置邮件参数 fromaddr = "你的Gmail邮箱地址" toaddr = "收件人邮箱地址" password = "你的Gmail应用专用密码" # 重要提示:开启2FA后需用应用专用密码,而非普通登录密码 # 5. 创建MIMEText对象,明确指定为HTML格式 msg = MIMEText(html_content, 'html', 'utf-8') msg['From'] = fromaddr msg['To'] = toaddr msg['Subject'] = "包含Pandas可视化表格的测试邮件" # 6. 发送邮件 try: server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(fromaddr, password) server.send_message(msg) print("邮件发送成功!") except Exception as e: print(f"发送失败:{e}") finally: server.quit()
关键细节说明
- HTML格式标记:通过
MIMEText(html_content, 'html', 'utf-8')明确告知邮件客户端这是HTML内容,这样才会自动渲染表格样式。 - 表格样式优化:
to_html()的参数中,border=1添加表格边框,cellpadding=4增加单元格内边距,index=False隐藏行索引,让表格更整洁易读。 - Gmail认证注意事项:
- 如果你的Gmail账号开启了两步验证(2FA),必须使用应用专用密码登录,不能用普通密码。你可以在Google账号的「安全」设置中生成应用专用密码。
- 若未开启2FA,需先在Google账号设置中允许「不太安全的应用访问」(不推荐,建议开启2FA使用应用密码更安全)。
运行这段代码后,收件人就能收到带有清晰可视化表格的邮件啦!
内容的提问来源于stack exchange,提问作者Nick Dragosh
相关产品推荐
相关产品推荐

