首页 > 解决方案 > HTML 电子邮件不发送(python3)

问题描述

我正在尝试发送 HTML 电子邮件,但是,当我运行此代码时,实际上什么也没有发生。我坐下来等待,因为程序永远不会结束。我做错了什么?

import smtplib, ssl, getpass
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
port = 465
smtp_server = "smtp.gmail.com"
sender_email = "REDACTED"  
receiver_email = "REDACTED"
password = getpass.getpass()
html = """
<html>
<head></head>
<body>
    <h1>HEADER</h1>
    <br>
    body<br>
</body>
</html>
"""
msg = MIMEMultipart()
attach = MIMEText(html, 'html')
msg.attach(attach)

context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, msg)
    server.close()

标签: python

解决方案


在将 msg 传递给 sendmail 方法之前,需要将其展平为字符串:

server.sendmail(sender_email, receiver_email, str(msg))

此外,您可能希望在 msg 对象上设置一些标题:

msg.add_header('From', sender_email)
msg.add_header('Subject', 'whatever')

启用 SMTP 对象的调试输出将有助于追踪这些问题,请尝试在 server.login 调用上方插入此行:

server.set_debuglevel(1)

如果您要使用电子邮件,尽管可能值得研究一下email.message.EmailMessage类。


推荐阅读