flask_mail使用qq邮箱服务器发邮件中遇到的坑

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邮箱进行设置
进入邮箱——>设置——>账户


image.png

另外,方法一的授权码,也是在这张图片的标记处生成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。