0x00 前言
最近在看狗书,准备系统性的学习一下flask,但是在<<电子邮件>>那章作者使用了gmail作为邮箱服务,笔者配了很久都发不出去,可能是天朝特色导致不能使用gmail的,于是探索了一下flask框架下使用qq邮箱发送电子邮件。
0x01 qq邮箱配置
因为是使用SMTP服务发送电子邮件,所以首先要去qq邮箱设置页开启:

开启后会得到一个授权码作为邮箱密码使用
0x02 flask配置
配置项 |
默认值 |
功能 |
MAIL_SERVER |
localhost |
邮箱服务器 |
MAIL_PORT |
25 |
端口 |
MAIL_USE_TLS |
False |
是否使用TLS |
MAIL_USE_SSL |
False |
是否使用SSL |
MAIL_DEBUG |
app.debug |
是否为DEBUG模式,打印调试消息 |
MAIL_SUPPRESS_SEND |
app.testing |
设置是否真的发送邮件,True不发送 |
MAIL_USERNAME |
None |
用户名,填邮箱 |
MAIL_PASSWORD |
None |
密码,填授权码 |
MAIL_DEFAULT_SENDER |
None |
默认发送者,填邮箱 |
MAIL_MAX_EMAILS |
None |
一次连接中的发送邮件的上限 |
MAIL_ASCII_ATTACHMENTS |
False |
如果 MAIL_ASCII_ATTACHMENTS 设置成 True 的话,文件名将会转换成 ASCII 的。一般用于添加附件。 |
pip install Flask-Mail
- 配置config (这里的配置与书中gmail配置稍有不同):
1 2 3 4 5 6 7 8
| app.config['MAIL_SERVER'] = 'smtp.qq.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = 'your_qq@qq.com' app.config['MAIL_PASSWORD'] = 授权码 app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]' app.config['FLASKY_MAIL_SENDER'] = 'your_qq@qq.com' app.config['FLASKY_ADMIN'] = 'your_qq@qq.com'
|
send_mail (抄自狗书):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from threading import Thread from flask import current_app, render_template from flask_mail import Message from . import mail
def send_async_email(app, msg): with app.app_context(): mail.send(msg)
def send_email(to, subject, template, **kwargs): app = current_app._get_current_object() msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + ' ' + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to]) msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) thr = Thread(target=send_async_email, args=[app, msg]) thr.start() return thr
|
0x03 发送成功

0x04 参考链接
Flask 文档
Flask Web开发:基于Python的Web应用开发实战(第2版)
flask-email手册
使用 Flask-Mail 和 qq 邮箱 SMTP 服务发送邮件