python如何发送带有附件、正文为HTML的邮件

发送带有附件、正文为 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_hostnameloginpasswordfrom_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技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • 使用llama Index帮你训练pdf的示例详解

    关于“使用llama Index帮你训练pdf的示例详解”的攻略,可以按照以下步骤: 1. 安装llama Index 首先需要安装llama Index,这是一个开源的工具库,可以让用户更加方便快捷地访问和处理PDF文档。可以通过以下命令进行安装: pip3 install llama_index 2. 准备PDF文档并生成索引 接下来,可以准备一份PDF…

    python 2023年6月2日
    00
  • 详解Python WSGI标准

    下面就来详细讲解Python WSGI标准的完整攻略。 什么是WSGI? WSGI(Web Server Gateway Interface)是Python Web应用程序和Web服务器之间的标准接口。它定义了Web服务器与Python Web应用程序之间的通信协议,使得Python Web应用程序可以跨Web服务器之间移植和共享。 WSGI标准的基本原理 …

    python-answer 2023年3月25日
    00
  • Python自动重试HTTP连接装饰器

    一、什么是Python自动重试HTTP连接装饰器? Python自动重试HTTP连接装饰器即为一个能够在HTTP连接失败时自动重试的Python函数装饰器。该装饰器会在装饰的函数执行过程中,对HTTP请求返回的状态进行判断,并在需要时自动发起新的请求。这样,可以保证当HTTP连接出现故障时,程序不会因此而直接崩溃,而是能够进行自我修复,从而提高程序的稳定性和…

    python 2023年5月13日
    00
  • Python实现微信中找回好友、群聊用户撤回的消息功能示例

    简介 随着社交软件的普及,我们几乎每天都在使用微信。而在微信聊天时,有时会因为一时的疏忽或敏感气氛而发送了一些不合适的消息,此时就需要将该消息撤回。但是,微信中的撤回消息功能存在时间限制,一旦超过时间限制,就无法撤回消息了。本文就是要通过Python实现在超过时间限制之后也能找回好友、群聊用户撤回的消息功能。 实现方法 为了实现微信消息找回功能,我们需要了解…

    python 2023年6月3日
    00
  • Python程序慢的重要原因

    Python 程序慢的原因有很多,其中一些重要的因素如下: 1. 解释器 Python 是一门解释型语言,大部分 Python 程序运行速度比编译型语言慢。每行代码都需要解释器进行解释,这会影响程序的整体执行时间。与编译型语言相比,Python 速度慢的一个显著原因是因为在运行时需要解释和编译脚本。 2. GIL(全局解释器锁) Python 具有 GIL,…

    python 2023年6月3日
    00
  • python3 requests库文件上传与下载实现详解

    以下是关于Python3 requests库文件上传与下载实现的攻略: Python3 requests库文件上传与下载实现详解 在Python3中,使用requests库可以方便地实现文件上传和下载。以下是Python3 requests库文件上传与下载实现的攻略。 文件上传 使用requests库上传文件时,需要使用files参数,并将文件打开并读取为二…

    python 2023年5月14日
    00
  • Python中使用items()方法返回字典元素对的教程

    当我们使用Python字典时,有时需要遍历字典的每一个键值对,可以通过使用 items() 方法来获取字典中每个键值对。该方法返回一个包含所有(键,值)元组的列表,其中每个元组都是字典中的一个键值对。 以下是使用 items() 方法遍历字典的示例: 示例1: # 定义一个字典 score = {‘Math’: 90, ‘Chinese’: 85, ‘Eng…

    python 2023年5月13日
    00
  • Python通过Manager方式实现多个无关联进程共享数据的实现

    Python通过Manager方式实现多个无关联进程共享数据的实现方法如下: 准备工作 首先需要导入multiprocessing模块,从中获取Manager类。 import multiprocessing # 获取Manager类 manager = multiprocessing.Manager() 使用Manager创建共享变量 在获取了Manage…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部