2019年8月19日 / 679次阅读 / 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客户端可以用来验证此功能。方法如下:
选择Foxmail这个阅读纯文本内容的选项后,邮件就自动切到Plain的内容显示。看到的结果如下:
验证成功!这就是发送同时支持HTML和Plain两个格式Email的方法。
-- EOF --
本文链接:https://www.pynote.net/archives/899
前一篇:glob模块使用教程
后一篇:zip函数
©Copyright 麦新杰 Since 2019 Python笔记