迹忆客 专注技术分享

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

用 Python 发送带附件的电子邮件

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

本篇文章将介绍如何使用Python发送带附件的邮件。 为此,我们不需要外部库来发送邮件。 相反,我们导入一个名为 smtplib 的模块并使用它,因为邮件是通过 SMTP 协议发送的。 让我们看看我们该怎么做。


用 Python 发送带附件的电子邮件

Python 在发送文本消息时将所有消息内容视为普通文本。 即使我们在文本消息中添加 HTML 标签,它们也不会按照 HTML 语法进行结构化,消息仍将显示为主要文本。

但是,Python 可以以其本机格式发送 HTML 消息。 因此,我们可以在发送邮件时选择MIME版本、内容类型、字符集来发送HTML邮件。

Python 包含一个称为 smtplib 的包。 邮件通过 SMTP(简单邮件传输协议)发送。 对于邮件,它生成 SMTP 客户端会话对象。

SMTP 需要正确(有效)的源和目标电子邮件地址、服务器地址和端口号。 例如,Google 的端口号是 587。请记住,服务器地址和端口号会根据我们使用的服务而改变。 对于本文,我们使用的是 Google。

首先,我们必须导入邮件发送模块smtplib。 我们还使用 MIME(Multipurpose Internet Mail Extension)模块来增加适应性。

我们可能会使用 MIME 标头保存发件人、收件人和其他信息。 还需要 MIME 将文件附加到电子邮件中。 为了发送消息,我们使用 Google 的 Gmail 服务。

为了符合 Google 的安全要求,我们必须进行某些调整。 例如,如果缺少此类设置或 Google 不支持从第三方应用程序访问,则以下代码可能无法运行。

我们必须在 Google 帐户中指定不太安全的应用程序访问设置才能提供访问权限。 此外,如果启用了两步验证,我们就不能使用不太安全的访问。


在 Python 中发送带附件的电子邮件的步骤

首先,我们必须创建 MIME,然后将发件人、收件人、邮件标题和附件正文添加到创建的 MIME 中。 之后,以二进制模式打开电子邮件附加的文件。

对于附件,添加标头,使用工作端口号“587”打开 SMTP 会话,然后退出会话。

示例代码:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
mail_content = '''Hello,
This mail is to inform you about Today's meeting.
'''

sender_address = 'sender@gmail.com'
sender_pass = '-------'
receiver_address = 'receiver@gmail.com'

message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'Info about meeting.'
message.attach(MIMEText(mail_content, 'plain'))

session = smtplib.SMTP('smtp.gmail.com', 587)
session.starttls()
session.login(sender_address, sender_pass)
text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()

print('Mail Sent')

输出:

Mail Sent

这是另一个如何使用 Python 发送带附件的电子邮件的示例。

示例代码:

import smtplib

from pathlib import Path
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
import email.utils
from email import encoders
from smtpd import COMMASPACE


def send_mail(send_from, send_to, subject, message, files=[],
              server="localhost", port=587, username='', password='',
              use_tls=True):

    msg = MIMEMultipart()
    msg['From'] = send_from
    import email.utils
    msg['To'] = COMMASPACE.join(send_to)
    msg['Date'] = email.utils.formatdate(localtime=True)
    msg['Subject'] = subject

    msg.attach(MIMEText(message))

    for path in files:
        part = MIMEBase('application', "octet-stream")
        with open(path, 'rb') as file:
            part.set_payload(file.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition',
                        'attachment; filename={}'.format(Path(path).name))
        msg.attach(part)

    smtp = smtplib.SMTP(server, port)
    if use_tls:
        smtp.starttls()
    smtp.login(username, password)
    smtp.sendmail(send_from, send_to, msg.as_string())
    smtp.quit()

输出:

/Users/apple/PycharmProjects/email/venv/bin/python /Users/apple/PycharmProjects/email/main.py 

Process finished with exit code 0

请记住,使用 Python 发送电子邮件的第一步是降低您的 Google 帐户的安全性; 否则,它将生成一个连接被拒绝的错误。 确保删除两步身份验证 (2FA) 以使其正常工作。

其次,我们必须导入邮件发送模块,SMTP需要有效的源和目的邮箱地址和端口号。 例如,Google 的端口号是 587。

转载请发邮件至 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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便