如何使用Python通过邮件发送PrettyTable表格
如何通过邮件发送PrettyTable生成的表格
我用Python创建了一个PrettyTable表格,需要将表格的输出内容通过邮件发送,初始实现代码如下:
env = "Dev" cost = 25.3698 line = [env, "${:,.2f}".format(cost)] totalcostofenv = PrettyTable(['Environment', 'Cost']) totalcostofenv.add_row(line) print(totalcostofenv)
经过尝试,我已经找到完整解决方案,实现代码如下:
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import os from prettytable import PrettyTable env = "Dev" cost = 25.3698 line = [env, "${:,.2f}".format(cost)] totalcostofenv = PrettyTable(['Environment', 'Cost']) totalcostofenv.add_row(line) print(totalcostofenv) print(totalcostofenv.get_html_string()) def trigger_email(): # 获取表格的HTML字符串 my_message = totalcostofenv.get_html_string() # 纯文本版本内容 text = "Hi!" # HTML邮件模板,添加表格样式 html = """\ <html> <head> <style> table, th, td { border: 1px solid black; border-collapse: collapse; } th, td { padding: 5px; text-align: left; } </style> </head> <body> <p>环境成本使用情况<br> %s </p> </body> </html> """ % (my_message) # 创建纯文本和HTML邮件部分 part1 = MIMEText(text, 'plain') part2 = MIMEText(html, 'html') # 组装邮件 msg = MIMEMultipart() from_addr = "发件人邮箱" # 从环境变量获取邮箱密码,避免硬编码 mail_password = os.environ.get('gmail-pass') to_addr = "收件人邮箱" msg.attach(part1) msg.attach(part2) try: # 连接Gmail的SMTP服务器发送邮件 smtp = smtplib.SMTP('smtp.gmail.com',587) smtp.starttls() smtp.login(from_addr , mail_password) smtp.sendmail(from_addr , to_addr , msg.as_string()) print('邮件发送成功') except: print('邮件发送失败') trigger_email()
关键说明
- 核心逻辑:利用PrettyTable的
get_html_string()方法,将控制台格式的表格转换为HTML字符串,实现邮件中表格的正常渲染。 - 样式优化:在HTML模板中添加CSS样式,给表格设置边框、内边距和文本对齐,让邮件里的表格更规整美观。
- 兼容性处理:通过
MIMEMultipart同时添加纯文本和HTML版本内容,适配不同邮件客户端的显示需求。 - 安全优化:从环境变量读取邮箱密码,避免密码硬编码在代码中。
内容的提问来源于stack exchange,提问作者Bhavesh R
相关产品推荐
相关产品推荐

