Отправка электронного письма с помощью Flask - PullRequest
0 голосов
/ 12 марта 2019

Я слежу за книгой 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="you@example.com", recipients=["you@example.com])
>>> msg.body = "This is plain text body"
>>> msg.html = "This is <b>HTML</b> body"
>>> with app.app_context():
...    mail.send(msg)
...

Мой gmail настроен правильно, я следовал учебнику и выполнил все упомянутые шаги.
Мой кодвыдал следующую ошибку:

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

Я нашел еще один вопрос , который был поднят по поводу того же, и я попробовал несколько вещей, которые были предложены там:

Я изменил строку

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

на

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

и жестко закодировал переменные "MAIL_USERNAME" и "MAIL_PASSWORD", но снова получил ту же ошибку.

Из-заничего не работает, и предыдущий вопрос об этом был очень стар (4 года). Я подумал, что стоит поднять это снова.

Если кто-нибудь знает, что я делаю неправильно, пожалуйста, дайте мне знать.
Спасибо

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Убедитесь, что вы позволили менее безопасным приложениям подключаться к вашей учетной записи Google.
Вот ссылка: https://myaccount.google.com/lesssecureapps

0 голосов
/ 12 марта 2019

Попробуйте со следующими параметрами:

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