Flask-Mail使用163邮箱异步发送邮件
很多类型的应用程序都需要在特定事件发生时提醒用户,而常用的通信方法是电子邮件。
虽然 Python 标准库中的 smtplib 包可用在 Flask 程序中发送电子邮件,但包装了 smtplib 的
(venv) $ set MAIL_PASSWORD=<Gmail password> 授权码
虽然 Python 标准库中的 smtplib 包可用在 Flask 程序中发送电子邮件,但包装了 smtplib 的
Flask-Mail 扩展能更好地和 Flask 集成。
使用 pip 安装 Flask-Mail:
(venv) $ pip install flask-mail
Flask-Mail 配置项
Flask-Mail 使用标准的 Flask 配置 API 进行配置,下面是一些常用的配置项:
配置项 | 说明 |
---|---|
MAIL_SERVER | 邮件服务器地址,默认为 localhost |
MAIL_PORT | 邮件服务器端口,默认为 25 |
MAIL_USE_TLS | 是否启用传输层安全 (Transport Layer Security, TLS)协议,默认为 False |
MAIL_USE_SSL | 是否启用安全套接层 (Secure Sockets Layer, SSL)协议,默认为 False |
MAIL_DEBUG | 是否开启 DEBUG,默认为 app.debug |
MAIL_USERNAME | 邮件服务器用户名,默认为 None |
MAIL_PASSWORD | 邮件服务器密码,默认为 None |
MAIL_DEFAULT_SENDER | 邮件发件人,默认为 None,也可在 Message 对象里指定 |
MAIL_MAX_EMAILS | 邮件批量发送个数上限,默认为 None |
MAIL_SUPPRESS_SEND | 默认为 app.testing,如果为 True,则不会真的发送邮件,供测试用 |
163邮箱配置
app.config['MAIL_SERVER'] = 'smtp.163.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] =os.environ.get('MAIL_PASSWORD')
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <[email protected]>'
微软 Windows 用户可按照下面的方式设定环境变量:(<>改为'')
(venv) $ set MAIL_USERNAME=<Gmail username> 邮箱(venv) $ set MAIL_PASSWORD=<Gmail password> 授权码
在cmd下面,设置环境变量的时候,不需要引号,在powershell下面设置的时候,需要引号!!!
异步发送邮件代码:
mail = Mail(app)
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
def send_email(to, subject, template, **kwargs):
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