我想找到最方便最简单的方式用python发送电子邮件。这些电子邮件可以在正文中包含纯文本、html 表格和附件。
过去几天我一直在学习如何使用 python 通过 Outlook 发送电子邮件。在工作中,我们使用 Outlook,我不是开发人员,我只是想用 python 自动化我的工作程序。
在这个旧的 question 和通过谷歌搜索到处发现最流行的 answer 是结合 3 个模块:
我还发现我们可以组合模块:
但是 docs 和这些 examples 不是很有帮助,因为我无法混合使用 html + 纯文本(这将是我的下一个问题)
我还发现这个模块 yagmail 在这个 answer 中很方便且易于实现。
那么,在 2021 年使用 Python 发送电子邮件的最佳/方便/现代/简单方式是什么?
答案 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 消息,因为电子邮件客户端将首先尝试呈现最后一个子部分。