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

Python通过MIME发Gmail邮件时HTML嵌入的txt文件不显示如何解决

原因分析
  • 你当前HTML代码中<object>标签的data属性指向本地路径的hi.txt,收件人接收邮件时本地设备不存在该文件,无法加载对应资源
  • 所有主流邮件客户端都默认禁止加载本地文件资源,属于常规安全限制,即便收件人本地存在同名文件也无法正常渲染
解决方案

推荐优先使用第一种方案,兼容性最好:

方案1:直接读取txt内容嵌入HTML

不需要依赖外部资源引用,所有邮件客户端都可以正常显示。

  1. 先读取本地hi.txt的文件内容:
# 读取本地txt文件内容
with open("hi.txt", "r", encoding="utf-8") as f:
    receipt_content = f.read()
  1. 替换HTML中原有的<object>标签,用<pre>标签渲染文本内容,保留原有排版:
<pre style="font-family: monospace; background: #ffffff; padding: 15px; width: 500px; height: 300px; overflow-y: auto;">
{receipt_content}
</pre>

如果你代码中已经定义了receipt变量存储回执内容,可以直接复用该变量,不需要重复读取文件。

方案2:将txt作为内嵌附件通过cid引用

如果必须保留<object>标签的实现方式,可以将txt设置为邮件内嵌资源,通过cid方式引用:

  1. 构造txt内嵌附件,添加Content-ID标识:
from email.mime.text import MIMEText

# 读取txt文件构造内嵌资源
with open("hi.txt", "r", encoding="utf-8") as f:
    txt_data = f.read()
txt_attachment = MIMEText(txt_data, "plain")
# 设置Content-ID,HTML中通过cid引用
txt_attachment.add_header("Content-ID", "<hi_receipt>")
txt_attachment.add_header("Content-Disposition", "inline", filename="hi.txt")
# 附加到邮件
email.attach(txt_attachment)
  1. 修改HTML中<object>标签的data属性:
<object data="cid:hi_receipt" type="text/plain" width="500" style="height: 300px">
<a href="cid:hi_receipt">下载回执</a>
</object>
注意事项
  • 方案2的<object>标签在不同邮件客户端的支持度差异较大,部分客户端会直接屏蔽该标签的渲染,无特殊需求优先使用方案1
  • 所有邮件的静态资源都不能使用本地路径,必须内嵌到邮件内容中,公网外链资源还会被多数邮件客户端默认拦截,嵌入内容是最稳妥的实现方式

内容的提问来源于stack exchange,提问作者petshop.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:08