很多类型的应用程序都需要在特定事件发生时提醒用户,而常用的通信方法是电子邮件。
虽然 Python 标准库中的 smtplib 包可用在 Flask 程序中发送电子邮件,但包装了 smtplib 的
Flask-Mail 扩展能更好地和 Flask 集成。
使用 pip 安装 Flask-Mail:
(venv) $ pip install flask-mail
Flask-Mail 配置项
Flask-Mail 使用标准的 Flask 配置 API 进行配置,下面是一些常用的配置项:
163邮箱配置app.config[ 'MAIL_SERVER'] = '' 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 <youremail@>'
微软 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