Python 的 email 包处理并管理整个电子邮件消息的 MIME 部分,使用 email 包和 smtplib 包。email 包有多个组件,分别用来解析和生成电子邮件。
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from smtplib import SMTP
# 发送一条多部分消息
def make_mpa_msg():
email = MIMEMultipart('alternative')
text = MIMEText("Hello 数据云团!\r\n", 'plain')
email.attach(text)
html = MIMEText('<html><body><h4>数据云团</h4></body></html>', 'html')
email.attach(html)
return email
# 发送一条电子邮件消息,含有一张图片
def make_img_msg(fn):
f = open(fn, "r")
data = f.read()
f.close()
email = MIMEImage(data, name=fn)
email.add_header("Content-Disposition", "attachment; filename='%s'" % fn)
return email
def sendMsg(fr, to, msg):
s = SMTP('localhost')
errs = s.sendmail(fr, to, msg)
s.quit()
if __name__ == "__main__":
print("发送一条多部分消息...")
msg = make_mpa_msg()
# 发送者
msg["From"] = SENDER
# 接收者
msg['To'] = ', '.join(RECIPS)
# 邮件标题
msg["Subject"] = '多内容发送'
sendMsg(SENDER, RECIPS, msg.as_string())
# 发送一条电子邮件消息,含有一张图片
print("发送图片...")
msg = make_img_msg(SOME_IMG_FILE)
# 发送者
msg["From"] = SENDER
# 接收者
msg['To'] = ', '.join(RECIPS)
# 邮件标题
msg["Subject"] = '图片发送'
sendMsg(SENDER, RECIPS, msg.as_string())
多部分选择消息通常包含两部分,一是以纯文本表示的邮件消息正文,以及等价的 HTML 格式。由邮件客户端来决定显示哪一部分。
为了创建这种类型的消息,需要使用 email.mime.multipart.MIMEMultipart 类,并传递 alternative 作为唯一的参数来实例化这个类。如果不传递这个参数,则前面的纯文本和 HTML 会分别作为消息中的附件,这种情况下,有些邮件系统会同时显示这两部分的内容。