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

解决邮件HTML以附件呈现问题:实现HTML与纯文本同时渲染

解决邮件HTML变附件、实现双格式渲染的问题
  • 核心问题:你用的MIMEMultipart("mixed")是用来包含附件+邮件内容的多部分类型,会把HTML/纯文本当成独立附件处理,这就是达不到预期的原因。
  • 正确方案:改用MIMEMultipart("alternative"),这个类型专门用于提供同一内容的不同格式版本(纯文本、HTML),邮件客户端会自动选择合适的版本渲染,不会把HTML当成附件。

修正步骤

  1. 把创建多部分容器的代码从MIMEMultipart("mixed")改成MIMEMultipart("alternative")
  2. 分别创建纯文本和HTML的MIMEText对象,对应类型设为'plain'和'html'
  3. 把这两个文本部分按纯文本在前、HTML在后的顺序添加到容器里(这是邮件协议的约定,别搞反)

示例代码

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 创建正确类型的邮件容器
msg = MIMEMultipart("alternative")
msg['Subject'] = "双格式测试邮件"
msg['From'] = "发件人@example.com"
msg['To'] = "收件人@example.com"

# 纯文本内容
plain_content = "这是纯文本版本的邮件内容"
plain_part = MIMEText(plain_content, 'plain')

# HTML内容
html_content = """
<html>
  <body>
    <p>这是<b>加粗的HTML版本</b>邮件内容</p>
  </body>
</html>
"""
html_part = MIMEText(html_content, 'html')

# 按顺序添加到容器
msg.attach(plain_part)
msg.attach(html_part)

# 后续发送逻辑正常写就行

额外说明

如果之后需要加附件,得套两层:外层用MIMEMultipart("mixed"),内层用MIMEMultipart("alternative")放纯文本和HTML,再把附件添加到外层的mixed容器里,这样就不会影响双格式渲染了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:07:11