错误描述
在通过Flask-Mail模块发送邮件时,会生如下错误:
smtplib.SMTPAuthenticationError: (535, b’Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256’)
问题产生原因
我代码中是这样配置的:
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
然后在命令行中调用:
>>> from hello import mail
>>> from flask_mail import Message
>>> msg = Message('test mail', sender='2781936169@qq.com', recipients=['2781936169@qq.com'])
>>> msg.html = "This is <b>HTML</b> body"
>>> with app.app_context():
... mail.send(msg)
在环境变量中我已经设置了MAIL_USERNAME
和MAIL_PASSWORD
。查看错误提示似乎是说没有权限什么的,难道是必须启用SSL吗?我在配置中做了修改:
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_PORT'] = 465
但是依然还是报错。没办法,百度之下发现网上的说法大多是“使用邮箱授权码”,但是我使用的就是授权码啊。
然后我看到有人说qq邮箱本身不支持,或者需要额外设置,换个邮箱就可以!
于是我使用163邮箱测试,环境变量以及代码部分也修改成163邮箱对应参数。果然,成功了!收件成功的气泡音,让我长出一口气~
注意
修改完环境变量后要重启控制台才能生效!我刚换了163邮箱,更改环境变量之后没有重启控制台,所以还是报错,差点郁闷死。重启之后完美解决!
总结
qq邮箱似乎不支持Flask-Mail,就算支持应该也需要很多设置,总之很麻烦。换163邮箱就可以了。其他邮箱我没试,不是很清楚。
希望能给到和我一样遇到此问题的小伙伴一点帮助!