发送同时支持HTML和Plain格式的Email

2019年8月19日 / 23次阅读 / Last Modified 2019年8月20日
Email

Email为什么要同时支持HTML和Plain格式?因为有一些古老的非图形界面的Email客户端程序,只能显示Plain格式。同样一封邮件,在不同的客户端下,展现不一样。在高级的网页版的客户端下,就是一个精美的HTML页面,而在Linux的字符界面下,可能就是Plain格式。本文介绍如何使用Python来实现发送这样的Email。

发送同时支持HTML和Plain格式的Email,需要使用MIMEMultipart('alternative')对象。

下面是示例代码。这段代码在HTML格式的邮件内容中,还嵌入了一张图片;而纯文本的邮件内容,只有一行文字。

import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email import encoders

msg = MIMEMultipart('alternative')
msg_str = """
<p>Both HTML and Plain</p>
<img src="cid:123">
"""
msg.attach(MIMEText(msg_str, 'html', 'utf-8'))
with open('logo.jpg','rb') as f:
    pic = MIMEImage(f.read())
    pic.add_header('Content-ID','<123>')
    msg.attach(pic)
msg.attach(MIMEText('This is plain text', 'plain', 'utf-8'))

msg['From'] = 'from@qq.com'
msg['To'] = 'to@qq.com'
msg['Subject'] = Header('Both HTML and Plain','utf-8').encode()
smtp = smtplib.SMTP_SSL('smtp.qq.com')
smtp.login('from@qq.com','password')
smtp.sendmail('from@qq.com', 'to@qq.com', msg.as_string())
smtp.quit()

在msg对象上,attach两个MIMEText对象,一个是HTML,一个是Plain。然后就是正常发送。

QQ信箱网页版的纯文本按钮不能使用,它不是将邮件内容切换到Plain区域,只是将HTML文本转换成Plain格式(去掉Plain无法显示的格式,也是这是QQ邮箱网页版的一个bug)。著名的Foxmail客户端可以用来验证此功能。方法如下:

切换HTML格式的邮件到Plain
切换HTML格式的邮件到Plain

选择Foxmail这个阅读纯文本内容的选项后,邮件就自动切到Plain的内容显示。看到的结果如下:

邮件中Plain部分内容的显示
邮件中Plain部分内容的显示

验证成功!这就是发送同时支持HTML和Plain两个格式Email的方法。

-- EOF --

本文链接:https://www.pynote.net/archives/899

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top