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

如何用Python同时在邮件正文中发送HTML与纯文本内容?

解决Python SMTP同时发送纯文本和HTML正文的问题

嘿,这个问题我之前也碰到过!你直接把两个MIMEText对象attach到邮件里的方式不对,邮件客户端会把它们当成独立的附件/内容块,而不是同一邮件正文的不同格式版本。

要让纯文本和HTML同时作为正文的可选版本,你需要用MIMEMultipart('alternative')来包裹这两个部分。alternative类型的意思是这两个部分是同一内容的不同呈现形式,邮件客户端会自动选择它能支持的格式来显示(比如支持HTML的客户端会显示HTML版本,不支持的就显示纯文本)。

这里是修正后的完整代码,同时我也修复了你原代码里的两个小语法错误:

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

# 修复原代码中未闭合的字符串引号
text = 'Hi,\n Just for testing'
with open('samplefile.html') as fp:
    body = fp.read()

# 创建alternative类型的多部分邮件容器,这是关键!
msg = MIMEMultipart('alternative')
# 补充邮件基础信息(根据你的实际需求修改)
msg['Subject'] = 'Test Email with Dual Format Body'
msg['From'] = 'your_sender_email@example.com'
msg['To'] = 'your_recipient_email@example.com'

# 生成纯文本和HTML内容部分
part1 = MIMEText(text, 'plain')
part2 = MIMEText(body, 'html')  # 修复原代码中未闭合的引号

# 将两个内容部分附加到邮件容器中
msg.attach(part1)
msg.attach(part2)

# 以下是SMTP发送示例(根据你的邮件服务器配置调整)
# import smtplib
# with smtplib.SMTP('smtp.yourprovider.com', 587) as server:
#     server.starttls()
#     server.login('your_sender_email@example.com', 'your_email_password')
#     server.send_message(msg)

这样设置之后,邮件客户端就会正确识别两个部分为正文的可选格式,不会把HTML当成附件了。原理是MIMEMultipart('alternative')告诉邮件客户端:“这两个部分是同一个内容的不同展示方式,你选合适的显示就行”,而不是把它们当成独立的附件或内容块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:05:23