python - 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()
解决方案
在将 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类。
推荐阅读
- php - PHP - 未正确使用 GET 参数中的数据
- javascript - 事件监听函数找不到其他函数
- python - “KeyError: 0” 与 xgboost、scikit-learn 和 pandas
- mysql - 如何查找 id 是否存在于另一列的多个实例中?
- javascript - JavaScript 媒体查询和 CSS 动画的问题
- node.js - req.isAuthenticated 不是重构中间件后的函数
- typescript - 从嵌套对象的 getter 访问包装对象的属性
- typescript - 具有泛型参数的 typeof 类
- ruby-on-rails - 如何在 Rails 的脚手架资源中添加路由
- python - keras GRU 不会采用我简单的二维数组