Отправка почты из Flask-Mail (SMTPSenderRefused 530)

Конфигурация приложения, используемая в приложении Flask Mail (следующая книга разработки Miguel Grinberg Flask developlemt):

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')

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

from flask.ext.mail import Message
from hello import mail
msg = Message('test subject', sender='same as MAIL_USERNAME', recipients=['[email protected]'])
msg.body = 'text body'
msg.html = '<b>HTML</b> body'
with app.app_context():
    mail.send(msg)

При отправке приложение снова и снова приводит к следующей ошибке:

SMTPSenderRefused: (530, '5.5.1 Authentication Required. Learn more at\n5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 qb10sm6828974pbb.9 - gsmtp', u'configured MAIL_USERNAME')

Любое обходное решение для ошибки?

Ответ 1

Во время поиска проблем, я перепробовал настройки SMTP для Google,

Google SMTP settings

Изменение

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

в

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

сделал трюк.

Также убедитесь, что полное имя пользователя используется как имя пользователя SMTP Gmail, то есть [email protected], как показано на изображении выше.

Надеюсь это поможет!!!

Ответ 2

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

app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')

Поскольку вы можете видеть, что ваше флеш-приложение получает ваши учетные данные электронной почты через os.environ.get(), и если вы временно установите эти переменные среды в своей системе, в моем случае Mac OSX после сеанса терминала они исчезнут, поэтому вы необходимо установить их снова в следующий раз, когда вы войдете в терминал, как показано ниже:

export MAIL_USERNAME=**YOUR EMAIL**
export PASSWORD=**YOUR PASSWORD**

Я получил эту ошибку из-за этого сценария, чтобы установить их навсегда, вам нужно включить эти переменные в файл .bash_profile в вашем домашнем каталоге.

Ответ 3

Вам нужно изменить настройки своей учетной записи Google. На этой странице включите параметр "Разрешить менее безопасные приложения".

Как сказано на этой странице:

Некоторые приложения и устройства используют менее безопасную технологию входа, что делает вашу учетную запись более уязвимой. Вы можете отключить доступ к этим приложениям, который мы рекомендуем, или включить доступ, если вы хотите использовать их, несмотря на риски. Узнать больше

Ответ 4

Сделайте эти 2 вещи, чтобы решить:

  1. Используйте эту ссылку и включите "Разрешить менее безопасные приложения" - https://myaccount.google.com/lesssecureapps.

  2. Используйте жестко запрограммированное значение для электронной почты и пароля, и все заработало нормально. Просто в файле ' init.py' отредактируйте следующий раздел:

Не используйте os.environ.get

app.config['MAIL_USERNAME'] = '[email protected]'
app.config['MAIL_PASSWORD'] = 'yourpassword'