Flask Mail не работает с учетной записью Gmail и экземпляром AWS - PullRequest
0 голосов
/ 14 января 2019

Итак, я создал приложение для колб, и оно отлично работало, когда я запускал его локально. Затем я отправил его в свой экземпляр AWS EC2. Когда я запускал его из своего экземпляра, он больше не отправлял электронные письма. Это добавило бы к моей базе данных, тогда следующая строка должна была послать электронное письмо. Вот где это терпело неудачу. Это было то, что Google блокировал устройство. Затем я смог разрешить это устройство, и все работало нормально.

Перемотка вперед, я добавил эластичный IP-адрес, а затем связал его с моим доменом, и теперь он снова не работает. Он все еще добавляется в мою базу данных, так что я думаю, что проблема в том, что Google не позволяет приложению работать. Я не уверен, как решить это, но я работал над этим в течение некоторого времени. Это код ошибки, который я получаю на своем экземпляре

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "FlaskApp.py", line 130, in register
    mail.send(msg)
  File "/usr/local/lib/python2.7/site-packages/flask_mail.py", line 492, in send
    message.send(connection)
  File "/usr/local/lib/python2.7/site-packages/flask_mail.py", line 427, in send
    connection.send(self)
  File "/usr/local/lib/python2.7/site-packages/flask_mail.py", line 178, in send
    "The message does not specify a sender and a default sender "
AssertionError: The message does not specify a sender and a default sender has not been configured

На моем веб-сайте появляется вкладка «500 Internal Server Error», и на веб-сайте отображается следующее.

Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

Может кто-нибудь помочь мне понять это. Я хотел бы иметь возможность отправлять электронные письма снова, используя мое приложение фляги. Я новичок в этом, поэтому моя логика говорит, что это все, потому что мне отказывают в доступе к учетной записи Google. Но я не могу найти ссылку или что-либо, что позволит мне разрешить доступ к экземпляру EC2. Я даже пытался использовать это: https://accounts.google.com/DisplayUnlockCaptcha, но это тоже не работает.

UPDATE: Он работал раньше, и я ничего не изменил в своем исходном коде, см. Ниже:

FROM_EMAIL = os.environ.get('EMAIL_USERNAME')

app.config.update(
  DEBUG = False,
  MAIL_SERVER = 'smtp.gmail.com',
  MAIL_PORT = 465,
  MAIL_USE_SSL = True,
  MAIL_USERNAME = FROM_EMAIL,
  MAIL_PASSWORD = os.environ.get('EMAIL_PASSWORD_TOKEN'),
  )
mail = Mail(app)

и затем, когда я звоню, я использую:

msg = Message("Welcome",
    sender = FROM_EMAIL,
    recipients = [request.form["email"]])
msg.body = "Welcome! \n\n Congratulations on your sucessful registration."
mail.send(msg)

ОБНОВЛЕНИЕ № 2: Я не уверен, почему, но мне пришлось добавить отправителя по умолчанию, и это сработало, но я все еще не могу отправлять электронные письма. Теперь я получаю следующую ошибку:

[2019-01-22 01:40:44,973] ERROR in app: Exception on /register/ [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "FlaskApp.py", line 131, in register
    mail.send(msg)
  File "/usr/local/lib/python2.7/site-packages/flask_mail.py", line 492, in send
    message.send(connection)
  File "/usr/local/lib/python2.7/site-packages/flask_mail.py", line 427, in send
    connection.send(self)
  File "/usr/local/lib/python2.7/site-packages/flask_mail.py", line 192, in send
    message.rcpt_options)
  File "/usr/lib64/python2.7/smtplib.py", line 737, in sendmail
    raise SMTPSenderRefused(code, resp, from_addr)
SMTPSenderRefused: (530, '5.5.1 Authentication Required. Learn more at\n5.5.1  https://support.google.com/mail/?p=WantAuthError d21sm19653189pfo.162 - gsmtp', u'myemail@gmail.com')
199.169.1.69 - - [22/Jan/2019 01:40:44] "POST /register/ HTTP/1.1" 500 -

Не уверен, полезно ли это знать или нет, но я могу войти в gmail, используя SMTP-команды из экземпляра, но я все еще получаю сообщение об ошибке. Я следовал инструкциям, найденным здесь: Как отправить электронную почту, используя простые команды SMTP через Gmail?

1 Ответ

0 голосов
/ 15 января 2019

Если вы получаете сообщение об ошибке при указании отправителя, вы определенно не предоставляете адрес отправителя. Вот соответствующий код в Flask-Mail: https://github.com/mattupstate/flask-mail/blob/e195fca6de1077cabb711426e6378f51dc39d598/flask_mail.py#L177. Как вы можете видеть, в тот момент в коде он еще даже не пытался отправить электронное письмо, поэтому причиной этой ошибки не может быть блокирование Google устройством.

Из предоставленного вами кода я буду проверять, действительно ли установлена ​​переменная среды EMAIL_USERNAME. Вы можете попробовать жестко запрограммировать его, чтобы удалить переменную среды из уравнения и убедиться, что код действительно может отправлять электронную почту через Gmail.

...