发送带有附件、正文为 HTML 的邮件可以使用 Python 的 smtplib、email.mime.text 和 email.mime.multipart 模块实现。
以下是详细的攻略步骤:
步骤一:导入模块
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
步骤二:创建邮件消息
创建消息体时需要分别创建一个 MIMEMultipart 和一个 MIMEText 对象。其中,MIMEMultipart 对象是邮件的根容器,MIMEText 对象则负责表示邮件正文的内容。
msg = MIMEMultipart()
msg.attach(MIMEText(html, 'html', 'utf-8'))
上述代码段创建一个 MIMEMultipart 对象 msg,并将 MIMEText 对象以 「html」的格式添加到邮件中。
步骤三:添加附件
要添加附件,需要使用 MIMEApplication 对象。举个例子,假设要添加 current_dir 目录下的 test.pdf 附件,则可以使用以下代码:
with open(f'{current_dir}/test.pdf', 'rb') as f:
attach = MIMEApplication(f.read(), _subtype=None)
attach['Content-Disposition'] = f'attachment;filename="test.pdf"'
msg.attach(attach)
静态的 html 文件也可以加入邮件:
html_attach = MIMEText(html, 'html', 'utf-8')
html_attach['Content-Disposition'] = 'attachment;filename="index.html"'
msg.attach(html_attach)
步骤四:发送邮件
server = smtplib.SMTP_SSL(smtp_ssl_hostname)
server.login(login, password)
server.sendmail(from_addr, to_addrs, msg.as_string())
server.quit()
上述代码段需要将以下参数定义为全局变量:smtp_ssl_hostname
、login
、password
、from_addr
以及 to_addrs
。其中,
- smtp_ssl_hostname:SMTP 服务器的 SSL 主机名
- login:发件人邮箱的登录名
- password:发件人邮箱的登录密码
- from_addr:发件人的邮箱地址
- to_addrs:收件人的邮箱地址,可以是单个邮箱地址,也可以是一个列表
示例一:发送简单的文本邮件
以下示例演示如何用 Python 发送一封简单的文本邮件:
import smtplib
from email.mime.text import MIMEText
content = '这是发件箱发送的一封邮件'
to = ['收件箱地址1', '收件箱地址2']
msg = MIMEText(content)
msg['Subject'] = '这是一封测试邮件'
msg['From'] = '发件箱地址'
msg['To'] = ','.join(to)
server = smtplib.SMTP('smtp.qq.com', 587)
server.starttls()
server.login('发件箱地址', '授权码')
server.sendmail('发件箱地址', to, msg.as_string())
server.quit()
在该示例中通过使用 smtplib 模块和 email.mime.text 模块中的 MIMEText 类发送了邮件。
示例二:发送具备 HTML 格式正文、带有附件的邮件
以下示例演示如何发送一封邮件,其中包含 HTML 格式正文,并添加了附件:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
html = """
<html>
<head></head>
<body>
<p>这是一封包含 html 格式正文的邮件</p>
</body>
</html>
"""
current_dir = '.' # 附件所在目录
msg = MIMEMultipart()
msg.attach(MIMEText(html, 'html', 'utf-8'))
with open(f'{current_dir}/test.pdf', 'rb') as f:
attach = MIMEApplication(f.read(), _subtype=None)
attach['Content-Disposition'] = f'attachment;filename="test.pdf"'
msg.attach(attach)
msg['Subject'] = '这是一封包含html和附件的邮件'
msg['From'] = '发件人地址'
msg['To'] = '收件人地址'
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
server.login('发件箱地址', '发件人邮箱SMTP授权码')
server.sendmail('发件人地址', '收件人地址', msg.as_string())
server.quit()
该示例使用了 email.mime.multipart 中的 MIMEApplication 类添加了一个名为 test.pdf 的附件。同时,该示例还使用了 email.mime.text 中的 MIMEText 类来表示邮件正文中的 HTML 格式内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python如何发送带有附件、正文为HTML的邮件 - Python技术站