У меня возникли проблемы при отправке электронного письма с подтверждением регистрации моего приложения 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?