使用Python从您的 Gmail 帐户发送带有附件的邮件
在上一篇文章中,我们讨论了从 Gmail 帐户发送没有任何主题和任何附件的邮件的基础知识。今天,我们将学习如何使用Python发送带有附件和主题的邮件。在继续之前,强烈建议学习如何使用Python发送简单的邮件并学习Python'smtplib' 库的基本工作原理。
如果您阅读了上一篇文章,那么您已经了解了会话是如何创建的以及它是如何工作的。现在,您需要学习附加文件和邮件主题。为此,您需要导入一些Python的本机库。从这些库中,您需要导入我们程序中使用的工具。
从 Gmail 帐户发送带有附件的邮件的步骤:
- 要添加附件,您需要导入:
- 导入 smtplib
- 从 email.mime.multipart 导入 MIMEMultipart
- 从 email.mime.text 导入 MIMEText
- 从 email.mime.base 导入 MIMEBase
- 从电子邮件导入编码器
这些库将使我们的工作变得简单。这些是本机库,您不需要为此导入任何外部库。
- 首先,创建一个 MIMEMultipart 的实例,即“msg”开始。
- 在创建的实例“msg”的“From”、“To”和“Subject”键中提及发送者的电子邮件ID、接收者的电子邮件ID和主题。
- 在一个字符串中,写下您要发送的消息的正文,即正文。现在,使用附加函数将主体与实例 msg 附加在一起。
- 以“rb”模式打开您要附加的文件。然后创建一个带有两个参数的 MIMEBase 实例。第一个是“_maintype”,另一个是“_subtype”。这是 Message 的所有 MIME 特定子类的基类。
请注意,'_maintype' 是 Content-Type 主要类型(例如 text 或 image),而 '_subtype' 是 Content-Type 次要类型(例如 plain 或 gif 或其他媒体)。 - set_payload 用于改变有效载荷的编码形式。在 encode_base64 中对其进行编码。最后附上 MIMEMultipart 创建的实例 msg 的文件。
完成这些步骤后,按照上一篇文章中的说明创建会话,对其进行保护并检查真实性,然后在发送邮件后终止会话。
# Python code to illustrate Sending mail with attachments
# from your Gmail account
# libraries to be imported
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 senders email address
msg['From'] = fromaddr
# storing the receivers email address
msg['To'] = toaddr
# storing the subject
msg['Subject'] = "Subject of the Mail"
# 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")
# 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()
要点:
- 您可以使用循环向多个人发送邮件。
- 这段代码很容易实现。但如果您在您的 gmail 帐户上启用了两步验证,它将不起作用。需要先关闭两步验证。
- 使用这种方法,Gmail 将始终将您的邮件放在主要部分,并且发送的邮件不会是垃圾邮件。