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

Selenium Python发送邮件:DataFrame列无法渲染为可点击链接

问题原因分析
  1. 返回对象错误:你在get_bug_data中生成了带HTML链接的表格,但HTML(table_data.to_html(...))仅创建了IPython环境的HTML展示对象,并未生成可用于邮件的HTML字符串;函数最终返回的是原始DataFrame,其中Bug ID列是包含HTML标签的普通字符串。
  2. HTML转义问题:当你将DataFrame传入build_table时,该函数大概率对字符串中的HTML标签进行了转义(比如把<转为&lt;),导致邮件中显示的是纯文本标签,而非可渲染的链接。
解决方案

方案一:直接生成HTML表格字符串发送(推荐)

修改get_bug_data函数,让它返回渲染好的HTML表格字符串,而非DataFrame:

def get_bug_data():
    blocker_bugs = []
    # 补充你获取JIRA数据的循环逻辑(原代码缺失循环部分)
    for i in range(len(keys)):
        daily_bugs = {"Bug ID": keys[i].text, "Summary": summary[i].text, "Components": comp[i].text}
        blocker_bugs.append(daily_bugs)
    table_data = pd.DataFrame(blocker_bugs)
    # 生成带链接的HTML表格,escape=False确保标签不被转义
    html_table = table_data.to_html(render_links=True, index=False, escape=False)
    return html_table

# 调用部分修改
sender = 'xxx.com'
receiver = 'xxx.com'

def send_mail(body):
    message = MIMEMultipart('related')
    message['Subject'] = 'Blocker JIRA '
    message['From'] = sender
    message['To'] = receiver
    msgTXT = MIMEText(body, 'html')
    message.attach(msgTXT)
    msg_body = message.as_string()
    server = smtplib.SMTP('smtp.xxx.com', 587)
    server.ehlo()
    server.starttls()
    server.login('xxx.com', 'xxx')
    server.sendmail(sender, receiver, msg_body)
    server.quit()

data_html = get_bug_data()
send_mail(data_html)

方案二:保留build_table的处理方式

如果必须使用build_table,需要确保它不对HTML标签进行转义:

  • 若build_table是自定义函数:检查其中生成表格的逻辑,移除对字符串的HTML转义操作,确保Bug ID列的<a>标签被原样保留。
  • 若build_table是第三方库函数:查阅其文档,找到关闭HTML转义的参数(类似escape=False)并开启。
额外注意点
  • 移除get_bug_data中无用的global table_data声明,无需全局变量。
  • 原代码中data = get_bug_data()后的单独data行是无效代码,可直接删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:36:07