用 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。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串