如何用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
相关产品推荐
相关产品推荐

