Python 中的 MIMEMultipart
发送电子邮件作为提示、提醒或其他任何事情已成为我们生活中重要且常规的一部分。 软件开发人员在开发阶段经常遇到这样的情况:他们希望最终用户通过他们的应用程序接收电子邮件。
在本文中,我们将了解如何在 Python 及其 MIME(多用途互联网邮件扩展)模块的帮助下发送带有附件的电子邮件的有效方法。
Python 的 MIMEMultipart、MIMEText 和 MIMEBase 模块
与 Python 中的 smtplib 非常相似,MIME 模块提供了高级工具来帮助使电子邮件的发送-接收过程变得更容易、更增强。
虽然 smtplib 模块使我们能够发送不带附件的电子邮件,但当我们必须发送带附件的电子邮件时,会使用 MIME 模块。
MIME 的三个模块具有不同且独特的用途,每个模块都能够增强我们通过 Python 脚本发送电子邮件的体验。
-
MIME多部分
当我们想要构造具有不同内容类型的消息时,使用此模块。 这意味着 MIMEMultipart 支持使用多种内容类型。
例如,text/HTML 和 application/octet-stream。 借助 multipart,我们还可以同时拥有 HTML 和 HTML 中的图像。
-
MIME文本
这用于发送基于文本的电子邮件。 该模块使我们能够轻松编写和发送完整的基于文本的电子邮件。
-
MIME库
MIMEBase 模块仅用作基类,以便我们可以拥有更具体的子类和“MIME 感知”。
使用 Python 发送带附件的电子邮件的示例脚本
虽然人们可能认为编写一个 Python 脚本来发送带附件的电子邮件可能比不带附件的电子邮件相当复杂,但 MIME 模块使整个过程变得相当简单。
我们需要按照以下步骤发送带有附件的电子邮件。
添加附件需要我们导入以下Python库。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
这些库使手头的任务变得相当简单。 幸运的是,这些是本机库并且可以很好地完成工作,因此我们不需要导入任何外部库来添加附件。
- 首先,我们通过为 MIMEMultipart 创建一个实例来开始脚本,我们将其称为 msg。
- 然后,我们描述发件人和收件人的电子邮件地址。 我们还在我们创建的实例的From、To 和Subject 键中描述了主题。
- 现在,我们需要在一个名为 body 的变量中构造我们希望发送的消息正文,并将该变量附加到我们之前使用 Attach() 方法创建的 msg 实例。
-
现在到了有趣的部分,我们打开要附加的文件。 我们以 rb 模式打开这个文件。
接下来,我们创建一个带有两个参数的 MIMEBase 实例:maintype 和 subtype。 这些定义了我们所有 MIME 感知的消息子类的基类。
请记住,这里的主类型是主要由文本或图像组成的内容类型,子类型是次要内容类型,通常由纯文本、GIF、音频和/或其他媒体组成。
- 现在,我们使用 set_payload 将有效负载更改为编码形式。 我们以 Base 64 对其进行编码,并将该文件附加到我们之前创建的多部分实例消息中。
这是一个 Python 脚本,可以帮助我们可视化和理解 MIME 模块的使用。
示例代码:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = "EMAIL address of the sender"
toaddr = "EMAIL address of the receiver"
# instance of MIMEMultipart
msg = MIMEMultipart()
# storing the sender's email address
msg['From'] = fromaddr
# storing the receiver's email address
msg['To'] = toaddr
# storing the subject
msg['Subject'] = "Subject of the Mail"
#The string to store the body of the mail
body = "Body_of_the_mail"
# attach the body with the msg instance
msg.attach(MIMEText(body, 'plain'))
# open the file to be sent
filename = "File_name_with_extension"
attachment = open("Path of the file", "rb")
#The instance of MIMEBase and named as p
p = MIMEBase('application', 'octet-stream')
# To change the payload into encoded form
p.set_payload((attachment).read())
# encode into base64
encoders.encode_base64(p)
p.add_header('Content-Disposition', "attachment; filename= %s" % filename)
# attach the instance 'p' to instance 'msg'
msg.attach(p)
# creates SMTP session
s = smtplib.SMTP('smtp.gmail.com', 587)
# start TLS for security
s.starttls()
# Authentication
s.login(fromaddr, "Password_of_the_sender")
# Converts the Multipart msg into a string
text = msg.as_string()
# sending the mail
s.sendmail(fromaddr, toaddr, text)
# terminating the session
s.quit()
这是一个相当简单的脚本,用于向一个人发送电子邮件。 如果我们希望将这封电子邮件发送给多个人,我们可以使用循环来实现这一点。
这里需要注意的另一件重要事情是,如果我们在电子邮件帐户上启用了两步身份验证,则此脚本将不起作用。 为此,我们必须禁用两步验证。
以这种方式发送电子邮件还可以确保电子邮件直接到达用户的收件箱,而不是垃圾邮件文件夹。
虽然此功能可能会被滥用,但我们知道它对于需要紧急处理且不允许因错过电子邮件而造成延误的企业很有帮助。
我们已经了解了使用 Python 及其本机 MIME 库发送带有附件的简单电子邮件的所有知识。
相关文章
Python 中的自动 ARIMA
发布时间:2023/06/26 浏览次数:127 分类:Python
-
在本文中,我们将了解 Python 中的 Auto ARIMA 及其工作原理。Python 中的自动 ARIMA pmdarima 库中的 auto_arima() 函数有助于确定 ARIMA 模型的最佳参数,并提供拟合的 ARIMA 模型作为结果。
Python 中的方差膨胀因子
发布时间:2023/06/26 浏览次数:93 分类:Python
-
本文介绍了方差膨胀因子 (VIF) 及其在检测有影响的观测值方面的性能,并演示了如何使用 statsmodels 在 Python 中使用 VIF。Python 中的方差膨胀因子
在 Python 中跨多个文件使用全局变量
发布时间:2023/06/26 浏览次数:90 分类:Python
-
这个简单的指南是关于在 Python 中跨多个文件使用全局变量的。 但在进入主题之前,我们先简要了解一下全局变量及其在多个文件中的使用。Python 中的全局变量
基于 Python 中的值对计数器进行排序
发布时间:2023/06/26 浏览次数:165 分类:Python
-
本篇文章介绍如何使用 Python 根据计数器的值对计数器进行排序。Python 计数器概述 计数器是 Python 中集合模块的一部分,可帮助计算特定字符出现的总数。
在Python中发送UDP数据包
发布时间:2023/06/26 浏览次数:92 分类:Python
-
今天,我们将学习用户数据报协议(UDP),并了解如何使用 Python 编程发送 UDP 数据包。在Python中发送UDP数据包
Python 自定义迭代器
发布时间:2023/06/26 浏览次数:119 分类:Python
-
在本文中,我们将了解什么是迭代器以及如何借助 __iter__ 和 __next__ 类方法创建自定义迭代器。 我们还将学习如何在 Python 生成器的帮助下创建自定义迭代器。借助 Python 中的类方法 __iter__ 和
Python 高斯核
发布时间:2023/06/26 浏览次数:161 分类:Python
-
高斯核是一种高通滤波器,是图像处理中最常用的滤波器之一。 它也用于机器学习。 本博客将介绍该内核以及如何使用它。
Python 脚本中的 FFmpeg
发布时间:2023/06/26 浏览次数:167 分类:Python
-
本篇文章将介绍在Python中使用FFMPEG命令。安装 FFmpeg Python 包 首先,您必须在系统上安装 FFmpeg。 以管理员身份打开命令提示符并运行以下命令以使用 choco 安装 FFmpeg。
Python 中的 DNS 查找
发布时间:2023/06/25 浏览次数:118 分类:Python
-
本文将讨论 DNS 和 DNS 查找的概念。 之后,我们讨论使用 Python 进行 DNS 查找的方法。什么是 DNS DNS(域名系统)将域名转换为公共IP地址。