2021年用python发邮件最方便的方法是什么?

时间:2021-01-15 14:07:38

标签: python html email smtp smtplib

我想找到最方便最简单的方式用python发送电子邮件。这些电子邮件可以在正文中包含纯文本、html 表格和附件。

过去几天我一直在学习如何使用 python 通过 Outlook 发送电子邮件。在工作中,我们使用 Outlook,我不是开发人员,我只是想用 python 自动化我的工作程序。

在这个旧的 question 和通过谷歌搜索到处发现最流行的 answer 是结合 3 个模块:

  1. smtplib
  2. email.mime.multipart
  3. email.mime.text

我还发现我们可以组合模块:

  1. smtplib
  2. email.message,

但是 docs 和这些 examples 不是很有帮助,因为我无法混合使用 html + 纯文本(这将是我的下一个问题)

我还发现这个模块 yagmail 在这个 answer 中很方便且易于实现。

那么,在 2021 年使用 Python 发送电子邮件的最佳/方便/现代/简单方式是什么?

1 个答案:

答案 0 :(得分:2)

https://realpython.com/python-send-email/ 中的“包括 HTML 内容”部分应涵盖您的用例:

<块引用>

在下面的示例中,我们的 MIMEText() 对象将包含我们消息的 HTML 和纯文本版本,而 MIMEMultipart("alternative") 实例将这些组合成一条消息,并带有两个替代呈现选项:

import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"
password = input("Type your password and press enter:")

message = MIMEMultipart("alternative")
message["Subject"] = "multipart test"
message["From"] = sender_email
message["To"] = receiver_email

# Create the plain-text and HTML version of your message
text = """\
Hi,
How are you?
Real Python has many great tutorials:
www.realpython.com"""
html = """\
<html>
  <body>
    <p>Hi,<br>
       How are you?<br>
       <a href="http://www.realpython.com">Real Python</a> 
       has many great tutorials.
    </p>
  </body>
</html>
"""

# Turn these into plain/html MIMEText objects
part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

# Add HTML/plain-text parts to MIMEMultipart message
# The email client will try to render the last part first
message.attach(part1)
message.attach(part2)

# Create secure connection with server and send email
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
    server.login(sender_email, password)
    server.sendmail(
        sender_email, receiver_email, message.as_string()
    )
<块引用>

在此示例中,您首先将纯文本和 HTML 消息定义为字符串文字,然后将它们存储为纯文本/html MIMEText 对象。然后可以将这些按此顺序添加到 MIMEMultipart("alternative") 消息中,并通过您与电子邮件服务器的安全连接发送。请记住在纯文本选项之后添加 HTML 消息,因为电子邮件客户端将首先尝试呈现最后一个子部分。