用 Python 发送带附件的电子邮件
本篇文章将介绍如何使用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。
相关文章
在 Python 中验证电子邮件地址
发布时间:2023/06/01 浏览次数:76 分类:Python
-
有一些内置功能(例如正则表达式)和库(例如 dnspython)可以帮助完成这些过程。 本文将解释如何使用这些功能和库在 Python 中验证电子邮件。在 Python 中使用正则表达式验证电子邮件
使用 Python 向多个地址发送电子邮件
发布时间:2023/06/01 浏览次数:124 分类:Python
-
在本文中,我们将演示如何使用 Python 编程语言向使用不同电子邮件地址的不同收件人发送电子邮件。 具体来说,我们将向许多不同的人发送电子邮件。使用 Python 向多个地址发送电子邮件
Python 中的 SendGrid
发布时间:2023/06/01 浏览次数:129 分类:Python
-
SendGrid 是一家 SMTP 服务提供商,提供 Web API 以允许客户处理集成信息。 通过该服务提供的 API 密钥,可以在很短的时间内轻松发送各种电子邮件。
Python 线程优先级
发布时间:2023/06/01 浏览次数:159 分类:Python
-
使用 Python 线程,我们可以同时运行程序的不同部分,使您的程序设计更容易。 如果您了解一些 Python,我们将向您展示如何使用线程来加速您的 Python 程序。Python 中的线程
Python 线程队列
发布时间:2023/06/01 浏览次数:65 分类:Python
-
本篇文章将介绍限制 Python 中的活动线程数。Python 中的线程 Python 中的线程允许多个执行线程在单个进程中同时运行。
在 Python 中实现最小堆
发布时间:2023/06/01 浏览次数:181 分类:Python
-
本篇文章将介绍最小堆及其在 Python 中的实现。Python 中的最小堆 每个父节点都小于或等于最小堆中的子节点。 它遵循升序,优先级总是与较小的节点。
Python Heapq 窥视
发布时间:2023/06/01 浏览次数:54 分类:Python
-
我们可以使用 heap[0] 表示法、heappop() 函数和 nsmallest() 函数来查看 Python 中堆的最小元素。
Python 中十六进制数的按位异或
发布时间:2023/06/01 浏览次数:109 分类:Python
-
本文的主要目的是演示如何在 Python 的十六进制数字系统中处理 XOR 数字。Python 中十六进制数的按位异或 XOR 是按位运算符,意思是异或。
在 Python 中将十六进制转换为 Base64
发布时间:2023/06/01 浏览次数:85 分类:Python
-
本篇文章将介绍在 Python 中将 hex 转换为 base64 的方法。使用 Python 中的 codecs 模块将 HEX 转换为 BASE64 Python 中的 codecs 模块提供了 encode() 和 decode() 方法来实现不同文本编码格式之间的转换。