Python进阶-生成电子邮件

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 会分别作为消息中的附件,这种情况下,有些邮件系统会同时显示这两部分的内容。

原文发布于微信公众号 - 数据云团(SmartData)

原文发表时间:2019-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券