📌  相关文章
📜  使用Python从您的 Gmail 帐户发送带有附件的邮件

📅  最后修改于: 2022-05-13 01:54:35.894000             🧑  作者: Mango

使用Python从您的 Gmail 帐户发送带有附件的邮件

在上一篇文章中,我们讨论了从 Gmail 帐户发送没有任何主题和任何附件的邮件的基础知识。今天,我们将学习如何使用Python发送带有附件和主题的邮件。在继续之前,强烈建议学习如何使用Python发送简单的邮件并学习Python'smtplib' 库的基本工作原理。
如果您阅读了上一篇文章,那么您已经了解了会话是如何创建的以及它是如何工作的。现在,您需要学习附加文件和邮件主题。为此,您需要导入一些Python的本机库。从这些库中,您需要导入我们程序中使用的工具。

从 Gmail 帐户发送带有附件的邮件的步骤:

  1. 要添加附件,您需要导入:
    • 导入 smtplib
    • 从 email.mime.multipart 导入 MIMEMultipart
    • 从 email.mime.text 导入 MIMEText
    • 从 email.mime.base 导入 MIMEBase
    • 从电子邮件导入编码器

    这些库将使我们的工作变得简单。这些是本机库,您不需要为此导入任何外部库。

  2. 首先,创建一个 MIMEMultipart 的实例,即“msg”开始。
  3. 在创建的实例“msg”的“From”、“To”和“Subject”键中提及发送者的电子邮件ID、接收者的电子邮件ID和主题。
  4. 在一个字符串中,写下您要发送的消息的正文,即正文。现在,使用附加函数将主体与实例 msg 附加在一起。
  5. 以“rb”模式打开您要附加的文件。然后创建一个带有两个参数的 MIMEBase 实例。第一个是“_maintype”,另一个是“_subtype”。这是 Message 的所有 MIME 特定子类的基类。
    请注意,'_maintype' 是 Content-Type 主要类型(例如 text 或 image),而 '_subtype' 是 Content-Type 次要类型(例如 plain 或 gif 或其他媒体)。
  6. 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 将始终将您的邮件放在主要部分,并且发送的邮件不会是垃圾邮件。