使用Flask-Mail插件提供电子邮件支持
插件包装了python标准库中的smtplib包
- 安装
(venv) $ pip install flask-mail
- 设置SMTP服务器的配置
#qq邮箱示例
import os
# ...
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
这里我不推荐gmail,因为在墙外,使用过程会由各种小问题。
推荐微软outlook,次之qq,163。
常用:
- outlook
服务器名称: smtp-mail.outlook.com
端口: 587
服务器名称:smtp.qq.com
端口: 465或587- 163
服务器名称: smtp.163.com
端口: 465或587
- 初始化:
from flask.ext.mail import Mail
mail = Mail(app)
#设定环境变量
(venv) $ set MAIL_USERNAME=<username>
(venv) $ set MAIL_PASSWORD=<password>
在程序中集成发送电子邮件功能:
定义一个函数,避免每次都手动编写电子邮件消息。可以使用 Jinja2 模板渲染邮件正文,灵活性极高。
from flask.ext.mail import Message
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <flasky@example.com>'
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)
mail.send(msg)
send_email 函数的参数分别为收件人地址、主题、渲染邮件正文的模板和关键字参数列表。指定模板时不能包含扩展名,这样才能使用两个模板分别渲染纯文本正文和富文本正文。调用者将关键字参数传给 render_template() 函数。