迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的 MIMEMultipart

作者:迹忆客 最近更新:2023/06/26 浏览次数:

发送电子邮件作为提示、提醒或其他任何事情已成为我们生活中重要且常规的一部分。 软件开发人员在开发阶段经常遇到这样的情况:他们希望最终用户通过他们的应用程序接收电子邮件。

在本文中,我们将了解如何在 Python 及其 MIME(多用途互联网邮件扩展)模块的帮助下发送带有附件的电子邮件的有效方法。


Python 的 MIMEMultipart、MIMEText 和 MIMEBase 模块

与 Python 中的 smtplib 非常相似,MIME 模块提供了高级工具来帮助使电子邮件的发送-接收过程变得更容易、更增强。

虽然 smtplib 模块使我们能够发送不带附件的电子邮件,但当我们必须发送带附件的电子邮件时,会使用 MIME 模块。

MIME 的三个模块具有不同且独特的用途,每个模块都能够增强我们通过 Python 脚本发送电子邮件的体验。

  1. MIME多部分

    当我们想要构造具有不同内容类型的消息时,使用此模块。 这意味着 MIMEMultipart 支持使用多种内容类型。

    例如,text/HTML 和 application/octet-stream。 借助 multipart,我们还可以同时拥有 HTML 和 HTML 中的图像。

  2. MIME文本

    这用于发送基于文本的电子邮件。 该模块使我们能够轻松编写和发送完整的基于文本的电子邮件。

  3. 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

这些库使手头的任务变得相当简单。 幸运的是,这些是本机库并且可以很好地完成工作,因此我们不需要导入任何外部库来添加附件。

  1. 首先,我们通过为 MIMEMultipart 创建一个实例来开始脚本,我们将其称为 msg。
  2. 然后,我们描述发件人和收件人的电子邮件地址。 我们还在我们创建的实例的From、To 和Subject 键中描述了主题。
  3. 现在,我们需要在一个名为 body 的变量中构造我们希望发送的消息正文,并将该变量附加到我们之前使用 Attach() 方法创建的 msg 实例。
  4. 现在到了有趣的部分,我们打开要附加的文件。 我们以 rb 模式打开这个文件。

    接下来,我们创建一个带有两个参数的 MIMEBase 实例:maintype 和 subtype。 这些定义了我们所有 MIME 感知的消息子类的基类。

    请记住,这里的主类型是主要由文本或图像组成的内容类型,子类型是次要内容类型,通常由纯文本、GIF、音频和/或其他媒体组成。

  5. 现在,我们使用 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 库发送带有附件的简单电子邮件的所有知识。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便