SMTPAuthenticationError при подтверждении по электронной почте в Flask - PullRequest
0 голосов
/ 21 марта 2020

У меня возникли проблемы при отправке электронного письма с подтверждением регистрации моего приложения flask. SMTPAuthenticationError появляется на моем терминале всякий раз, когда регистрируемый пользователь пытается отправить / повторно отправить электронное письмо с подтверждением.

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

  • IMAP: включен
  • Доступ к менее защищенным приложениям: ВКЛ

И это работает! Мне удалось получить подтверждение по электронной почте в почтовом ящике своей учетной записи gmail, напрямую введя свое имя пользователя и пароль gmail для 2-го аргумента MAIL_USERNAME и MAIL_PASSWORD соответственно, как показано ниже:

config.py

MAIL_USERNAME = os.environ.get('MAIL_USERNAME', 'example@gmail.com')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD', 'examplepassword')

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

models.py

class RegistrationForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Length(1, 64),
                                             Email()])
    username = StringField('Username', validators=[
        DataRequired(), Length(1, 64),
        Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0,
               'Usernames must have only letters, numbers, dots or '
               'underscores')])
    password = PasswordField('Password', validators=[
        DataRequired(), EqualTo('password2', message='Passwords must match.')])
    password2 = PasswordField('Confirm password', validators=[DataRequired()])
    submit = SubmitField('Register')

config.py

MAIL_USERNAME = os.environ.get('MAIL_USERNAME', 'email')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD', 'password')

Это не работает! поэтому попытался заменить его на:

config.py

MAIL_USERNAME = os.environ.get('MAIL_USERNAME', 'Email')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD', 'Password')

Это все еще не работает!

Опять же, это уже доказано работать с прямым вводом электронной почты и паролем, при этом мне удалось получить подтверждение по электронной почте из моей учетной записи gmail, а также успешно подтвердить регистрацию моей учетной записи в моем приложении flask (в целом код мудрая функциональность в хорошем рабочем состоянии!)

Похоже, что суженная проблема root является вторым аргументом как для MAIL_USERNAME, так и для MAIL_PASSWORD; при этом, кажется, что очень специфический c аргумент должен быть записан.

Что это за конкретное ключевое слово c, которое мне нужно написать для обоих моих 2-х аргументов? В соответствии с пользовательским вводом в электронной почте StringField и PasswordField?

...