发送 HTML 格式邮件和带附件的邮件

4,757 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

上节我们说到针对不同场景发送邮件也有不同的类型,我们可以大致划分为:

  1. 普通文本邮件;
  2. HTML 格式邮件;
  3. 带附件的邮件。

我们已经学习了如何使用 smtplib 和 email 模块发送普通文本邮件,这节我们来学习下如何发送 HTML 格式邮件和为邮件添加附件。

1. HTML 格式邮件介绍

所谓 HTML 格式的邮件,是指一类像网页一样的邮件,它包含有 HTML(超文本)链接,单击链接可以转到其他页面,可以有图片,声音等。对比普通的文本邮件,HTML 格式的邮件,可以使得邮件内容多姿多彩,除文字外,还能有声音图像链接等等。

通常在宣传活动、电商类等内容上使用 HTML 格式邮件的情况较多,目的是为了更好的展示邮件内容,以及和用户有所交互。

2. 发送 HTML 格式邮件

发送邮件如下代码所示:

import smtplib
from email.mime.text import MIMEText
host_server = 'smtp.qq.com'  # 主机地址
# 发件人邮箱
sender = "xxx@qq.com"
# 发件人邮箱密码、授权码
code = "xlogucqphohxcabi"
# 收件人
user = "xxxx@163.com"
# 准备邮件数据
# 邮件标题
mail_title = "第二封邮件"
# 内容
mail_content = """
<p>HTML格式邮件内容</p>
<hr/>
<p><a href="http://www.baidu.com">百度一下</a></p>
<ul>
    <li>top1</li>
    <li>top2</li>
</ul>
"""
# SMTP
smtp = smtplib.SMTP(host_server)
# 登录
smtp.login(sender, code)
# 发送
msg = MIMEText(mail_content, 'html', 'utf-8')
msg['Subject'] = mail_title
msg['From'] = sender
msg['To'] = user
smtp.sendmail(sender, user, msg.as_string())

代码解释:在上一小发送普通邮件代码的基础上,将发送内容由普通文本变更为 HTML 格式内容,首先修改 mail_content 设置为 HTML 内容,修改 MIMEText 构建参数为 html,其他内容不变。执行完成后,打开收件邮件即可收到第二封邮件,如下图所示。

1.png

3. 带附件邮件介绍

电子邮件附件是跟电子邮件一同发出的附带文件,附件包括声音、视频、文档、图片等一系列允许发送的文件(注意.exe 文件不允许发送)。带附件的邮件具体附件位置如下图所示。

2.png

4. 发送带附件的邮件

发送邮件如下代码所示:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
host_server = 'smtp.qq.com'  # 主机地址
# 发件人邮箱
sender = "389818529@qq.com"
# 发件人邮箱授权码
code = "xlogucqphohxcabi"
# 收件人
user = "yanwydxf@163.com"
# 准备邮件数据
# 邮件标题
mail_title = "第三封邮件"
# 邮件内容
mail_content = "具体请查看附件!"
# SMTP
smtp = smtplib.SMTP(host_server)
# 登录
smtp.login(sender, code)
#构建附件
attachment=MIMEApplication(open('newinfo.xlsx','rb').read())
#为附件添加一个标题
attachment.add_header('Content-Disposition','attachment',filename='data.xlsx')
msg=MIMEMultipart()#构建带附件的实例
#邮件标题
msg['Subject'] = mail_title
#发件人
msg['From'] = sender
#收件人
msg['To'] = user
# 发送
smtp.sendmail(sender, user, msg.as_string())

代码解释:在发送普通邮件的代码的基础上,导入 email 模块下 MIMEMultipart 与 MIMEApplication 用于构建附件。首先通过 MIMEApplication 封装附件,newinfo.xlsx 为本地文件名称, data.xlsx 为发送到对方邮箱后所显示的名称。通过 MIMEMultipart 构建带附件的实例,其他内容不变。执行完成后,打开收件邮件即可收到第三封邮件,如下图所示。

3.png