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

yizhihongxing

发送带有附件、正文为 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日

相关文章

  • 为什么我的 python 模块无法安装?

    【问题标题】:Why won’t my python module install?为什么我的 python 模块无法安装? 【发布时间】:2023-04-01 00:45:01 【问题描述】: 我正在尝试构建一个pulp distributor plugin,它将执行一个包含任意代码的 bash 脚本,以便在发布 RPM 存储库后触发操作。 这些插件通常使…

    Python开发 2023年4月8日
    00
  • Python构建网页爬虫原理分析

    Python构建网页爬虫原理分析 前言 随着互联网的发展,数据变得越来越重要。然而,大量的数据通常分散在不同的网站上,如果我们需要获取这些数据,手动复制粘贴不仅费时费力,而且效率极低。此时,用Python构建一个网页爬虫就显得十分有用了。 本文将介绍Python构建网页爬虫的原理和基本步骤。 原理 Python构建网页爬虫的原理可以简单概括为以下几个步骤: …

    python 2023年6月6日
    00
  • 使用Python 统计文件夹内所有pdf页数的小工具

    使用Python 统计文件夹内所有pdf页数的小工具 背景 当我们需要查看PDF文件夹中所有文件的页数时,可能需要一个一个文件打开查看,手动记录页数。这样会非常耗费时间并且繁琐。因此,我们可以使用Python编写一个小工具来快速统计所有PDF文件的页数。 实现步骤 安装PyPDF2库: pip install PyPDF2 编写Python脚本 import…

    python 2023年6月6日
    00
  • python初学定义函数

    下面是Python初学定义函数的完整攻略: 什么是函数? 函数是一段可以重复使用的代码块,用于实现特定功能的封装。在Python中,可以通过定义函数来封装一段功能代码。 定义函数的基本语法 Python中定义函数的基本语法如下所示: def function_name(parameters): function_body return [expression…

    python 2023年6月5日
    00
  • python通过链接抓取网站详解

    Python通过链接抓取网站详解 简介 Web爬虫是一种自动化程序,可以从互联网上的网站中提取数据。Python可以通过链接抓取网站,将网络数据从HTML源代码中提取出来。 步骤 下面是Python通过链接抓取网站的基本步骤: 导入所需模块。Python有许多模块可以实现网络数据抓取。最常用的是requests和BeautifulSoup。运行pip ins…

    python 2023年5月14日
    00
  • python 3调用百度OCR API实现剪贴板文字识别

    Python 3调用百度OCR API实现剪贴板文字识别 本文介绍如何使用Python 3调用百度OCR API实现剪贴板文字识别,同时提供了2个示例来展示如何调用OCR API以及如何通过Python将识别结果保存到文本文件。 前置条件 在使用本文提供的代码之前,您需要先完成以下事项: 注册百度OCR API并获取相应的API Key和Secret Key…

    python 2023年5月19日
    00
  • 如何使用Python从数据库中获取CLOB类型的数据并将其保存到本地文件中?

    以下是如何使用Python从数据库中获取CLOB类型的数据并将其保存到本地文件中的完整使用攻略。 使用Python从数据库中获取CLOB类型的数据并将其保存到本地文件中的前提条件 在Python中从数据库获取CLOB类型的数据并将其保存到本地文件中前,需要保已经安装并启动支持数据的,例如Oracle、MySQL或PostgreSQL,并且需要安装Python…

    python 2023年5月12日
    00
  • python自动化测试selenium核心技术三种等待方式详解

    Python自动化测试Selenium核心技术三种等待方式详解 前言 在进行Web自动化测试时,我们需要确保页面元素都已经加载完成,否则会影响后续操作。而网络环境、网页渲染速度或网站性能等问题可能导致页面加载速度不一,这就需要测试工程师使用等待机制解决这一问题。 在Selenium中,等待机制有3种方式:隐式等待、显式等待和强制等待。 一、隐式等待 在执行脚…

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