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日

相关文章

  • Django基础知识 web框架的本质详解

    本攻略将提供一个Django基础知识的详解,包括Django的概念、Django的本质、Django的基本组件以及两个示例,分别演示如何使用Django创建Web应用程序。 Django的概念 Django是一个基于Python的Web框架,用于快速开发Web应用程序。Django提供了一组强大的工具和库,用于处理Web应用程序的各种方面,例如URL路由、模…

    python 2023年5月15日
    00
  • 带有 Amazon Linux AMI 和 Python 的 MS SQL 驱动程序

    【问题标题】:MS SQL Driver with Amazon Linux AMI an Python带有 Amazon Linux AMI 和 Python 的 MS SQL 驱动程序 【发布时间】:2023-04-04 19:10:01 【问题描述】: 我看过很多关于 PHP 的此类帖子,但没有关于 Python 的帖子。 我正在尝试在 AWS Ela…

    Python开发 2023年4月6日
    00
  • Python进阶学习之带你探寻Python类的鼻祖-元类

    Python进阶学习之带你探寻Python类的鼻祖-元类 什么是元类? 元类是用于创建类对象的类,是类的模板。可以想象成一个工厂,用于创建其他类。 元类的作用 元类的主要作用是可以控制类的创建过程,比如自定义类的属性和方法,甚至是限制类的创建。 Python中元类的用法 在Python中,我们可以使用type()函数来动态地创建类,type()函数接受三个参…

    python 2023年6月5日
    00
  • 如何使用 Python 将德语变音符号导出到 excel 文件中

    【问题标题】:How to export German umlauts into excel file using Python如何使用 Python 将德语变音符号导出到 excel 文件中 【发布时间】:2023-04-05 10:13:01 【问题描述】: 我遇到了以下问题,我还没有在这里找到解决方案。我正在使用 Python 2.7,我喜欢将 Pan…

    Python开发 2023年4月5日
    00
  • 详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题

    详解Python3安装Pillow后报错没有Pillow模块以及没有PIL模块问题 在Python3中,安装Pillow模块后,可能会出现以下两个问题: 报错没有Pillow模块。 报没有PIL模块。 以下是解决这两个问题的方法: 问题1:报错没有Pillow模块 如果在Python3中安装Pillow模块后,使用import语句导入Pillow模块时,出现…

    python 2023年5月13日
    00
  • 浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)

    浅谈Python2之汉字编码为unicode的问题 在Python2中,当我们读入一个包含中文的字符串时,会出现类似\xC3\xA4等乱码的情况。这是由于Python2默认读取字符集为ASCII,而中文是以其他编码形式进行存储的。我们需要将这些编码转换成Unicode才能正确显示。 如何判断一个字符串是否为Unicode编码 我们可以使用Python2内置的…

    python 2023年5月20日
    00
  • 利用Python爬虫爬取金融期货数据的案例分析

    利用Python爬虫爬取金融期货数据的案例分析 本文将介绍如何使用Python爬虫爬取金融期货数据的完整攻略,包括数据获取、数据清洗和数据分析。本文将使用两个示例来演示如何使用Python爬虫爬取金融期货数据。 数据获取 在数据获取阶段,我们需要确定数据来源和获取数据的方法。在本文中,我们将使用Python爬虫从东方财富网获取金融期货数据。 以下是一个示例代…

    python 2023年5月15日
    00
  • 解决Python 中英文混输格式对齐的问题

    解决Python中英文混输格式对齐的问题,可以采用以下方法: 1. 使用中文字符宽度作为对齐基准 中文字符通常比英文字符宽度要大,因此我们可以将中文字符的宽度作为对齐基准,从而解决混输格式对齐的问题。 可以使用Python中的wcswidth函数来计算字符串的宽度,例如: import unicodedata def get_display_width(te…

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