flask_mail使用qq邮箱服务器发邮件时有可能会遇到如下报错
原因是我们使用了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')
我们可以看flask_mail中Mail源码:
state = _Mail(
app.config.get('MAIL_SERVER', '127.0.0.1'),
app.config.get('MAIL_USERNAME'),
app.config.get('MAIL_PASSWORD'),
app.config.get('MAIL_PORT', 25),
app.config.get('MAIL_USE_TLS', False),
app.config.get('MAIL_USE_SSL', False),
app.config.get('MAIL_DEFAULT_SENDER'),
int(app.config.get('MAIL_DEBUG', app.debug)),
app.config.get('MAIL_MAX_EMAILS'),
app.config.get('MAIL_SUPPRESS_SEND', app.testing))
Mail中的默认端口:25
然而qq邮箱已经取消了25端口的非ssl验证,要使用465的ssl加密验证
因此有两种解决方法:
方法一:
将配置中设置使用465端口,并开启SSL
配置代码如下:
app = Flask(__name__)
app.config['MAIL_DEBUG'] = True # 开启debug,便于调试看信息
app.config['MAIL_SUPPRESS_SEND'] = False # 发送邮件,为True则不发送
app.config['MAIL_SERVER'] = 'smtp.qq.com' # 邮箱服务器
app.config['MAIL_PORT'] = 465 # 端口
app.config['MAIL_USE_SSL'] = True # 重要,qq邮箱需要使用SSL
app.config['MAIL_USE_TLS'] = False # 不需要使用TLS
app.config['MAIL_USERNAME'] = '*******@qq.com' # 填邮箱
app.config['MAIL_PASSWORD'] = '**************' # 填授权码
app.config['MAIL_DEFAULT_SENDER'] = '*******@qq.com' # 填邮箱,默认发送者
manager = Manager(app)
mail = Mail(app)
方法一完美解决。
方法二:
可以进入qq邮箱进行设置
进入邮箱——>设置——>账户
另外,方法一的授权码,也是在这张图片的标记处生成。