使用Python按磁盘使用率条件为邮件HTML表格文本设置颜色
修复方案
核心问题说明
你当前的代码存在3个影响效果的问题:
- 语法缩进错误:给使用率添加红色样式的代码行没有缩进在
if row['Usage in %'] >= 80:判断逻辑下,条件判断根本不会执行 - HTML标签被转义:
tabulate生成HTML时默认会转义内容中的HTML特殊字符,你插入的样式标签会被转义成纯文本,无法作为样式生效 - 标签使用不合理:
<p>是块级元素,自带默认上下边距,放入表格单元格会撑高行高,破坏表格布局
修复后完整代码
import smtplib import pandas as pd from csv import DictReader from tabulate import tabulate from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText me = 'noreply@automationtest.com' password = '你的邮箱授权码' server = '对应SMTP服务器地址' you = 'email@someautomation.com' text = """ {table} """ html = """ <html> <head> <style> table, th, td {{ border: 1px solid black; border-collapse: collapse; }} th, td {{ padding: 5px; }} </style> </head> <body> <p style="font-family:verdana">Hi,</p> <p style="font-family:verdana">sometext</p> {table} <p style="font-family:verdana">sometext</p> <p style="font-family:verdana">Regards</p> <p style="font-family:verdana">someme</p> </body> </html> """ with open('files/file.csv') as input_file: reader = DictReader(input_file) data = list(reader) for row in data: row['Usage in %'] = pd.to_numeric(row['Usage in %']) if row['Usage in %'] >= 80: # 改用span行内标签,不破坏表格布局 row['Usage in %'] = f"<span style='color:red'>{row['Usage in %']}</span>" text = text.format(table=tabulate(data, headers="keys", tablefmt="grid")) # 新增safe_mode=False禁止转义HTML内容,保证样式生效 html = html.format(table=tabulate(data, headers="keys", tablefmt="unsafehtml", safe_mode=False)) message = MIMEMultipart("alternative", None, [MIMEText(text), MIMEText(html,'html')]) message['From'] = me message['To'] = you server = smtplib.SMTP(server) server.ehlo() server.starttls() server.login(me, password) server.sendmail(me, you, message.as_string()) server.quit()
效果验证
修改后表格边框会按照你定义的样式正常显示,磁盘使用率超过80%的单元格内容会自动变为红色,完全符合预期效果。
内容的提问来源于stack exchange,提问作者ayuuk ja'ay
相关产品推荐
相关产品推荐

