使用Flask发送电子邮件

问题描述 投票:0回答:2

我正在关注Miguel Grinberg撰写的Flask Web Development书,我在他的电子邮件章节中遇到了一个问题。

这些是他的配置:

import os
# ...
app.config["MAIL_SERVER"] = "smtp.googlemail.com"
app.config["MAIL_PORT"] = 587
app.config["MAIL_USE_TLS"] = True
app.config["MAIL_USERNAME"] = os.environ.get("MAIL_USERNAME")
app.config["MAIL_PASSWORD"] = os.environ.get("MAIL_PASSWORD")

设置环境变量后,我进入shell并尝试运行以下代码:

(venv) $ flask shell
>>> from flask_mail import Message
>>> from hello import mail
>>> msg = Message("test email", sender="[email protected]", recipients=["[email protected]])
>>> msg.body = "This is plain text body"
>>> msg.html = "This is <b>HTML</b> body"
>>> with app.app_context():
...    mail.send(msg)
...

我的gmail设置正确,我跟着tutorial并完成了所有提到的步骤。 我的代码产生了以下错误:

Traceback (most recent call last):
  File "<console>", line 2, in <module>
  File "c:\...\flasky\venv\lib\site-packages\flask_mail.py", line 491, in send
    with self.connect() as connection:
  File "c:\...\flasky\venv\lib\site-packages\flask_mail.py", line 144, in __enter__
    self.host = self.configure_host()
  File "c:\...\flasky\venv\lib\site-packages\flask_mail.py", line 158, in configure_host
    host = smtplib.SMTP(self.mail.server, self.mail.port)
  File "C:\...\Python\Python37\lib\smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\...\Python\Python37\lib\smtplib.py", line 336, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\...\Python\Python37\lib\smtplib.py", line 307, in _get_socket
    self.source_address)
  File "C:\...\Python\Python37\lib\socket.py", line 727, in create_connection
    raise err
  File "C:\...\Python\Python37\lib\socket.py", line 716, in create_connection
    sock.connect(sa)
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or
established connection failed because connected host has failed to respond

我找到了另外一个关于同样事情的question,我尝试了一些在那里建议的东西:

我换了线

app.config["MAIL_SERVER"] = "smtp.googlemail.com"

app.config["MAIL_SERVER"] = "smtp.gmail.com"

我硬编码“MAIL_USERNAME”和“MAIL_PASSWORD”变量,但我又得到了同样的错误。

由于没有任何工作,以前的问题关于这个很老(4年),我认为值得再次提出这个问题。

如果有人知道我做错了什么,请告诉我。 谢谢

python python-3.x flask timeoutexception flask-mail
2个回答
1
投票

确保您允许安全性较低的应用连接到您的Google帐户。 这是链接:https://myaccount.google.com/lesssecureapps


0
投票

尝试使用以下参数:

app.config["MAIL_SERVER"] = "smtp.gmail.com"
app.config["MAIL_PORT"] = 465
© www.soinside.com 2019 - 2024. All rights reserved.