flask 扩展之 -- flask-mail
Flask-Mail 封装了 python 标准库 smtplib 包, 以便于更好的与 Flask 集成.
一. 安装
$ pip install flask-mail
二. 配置 及 初始化
Flask-Mail SMTP 服务器配置列表
| 配置 | 默认值 | 说明 |
|---|---|---|
| MAIL_SERVER | localhost | 电子邮件服务器的主机名或 IP 地址 |
| MAIL_PORT | 25 | 电子邮件服务器的端口 |
| MAIL_USE_TLS | False | 启用传输层安全(Transport Layer Security,TLS)协议 |
| MAIL_USE_SSL | False | 启用安全套接层(Secure Sockets Layer,SSL)协议 |
| MAIL_USERNAME | None | 邮件账户的用户名 |
| MAIL_PASSWORD | None | 邮件账户的密码 |
配置示例
import os
# ...
app.config["MAIL_SERVER"] = 'smtp.googlemail.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")
------------------------------------------------------------
定义环境变量 :
Linux :
$ export MAIL_USERNAME=<MY_USERNAME>
$ export MAIL_PASSWORD=<MY_PASSWD>
Windows :
$ set MAIL_USERNAME=<MY_USERNAME>
$ set MAIL_PASSWORD=<MY_PASSWD>
初始化
from flask_mail import Mail
mail = Mail(app)
三. 在程序中集成发送电子邮件功能
可以使用 jinja2 模板渲染邮件正文
from flask_migrate import Migrate, MigrateCommand
app.config["FLASK_MAIL_SUBJECT_PREFIX"] = '[MyFlask]' # 邮件中主题前缀.
app.config["FLASK_MAIL_SENDER"] = 'FLASK Admin <admin@example.com>' # 发件人地址
def send_email(to, subject, template, **kwargs):
"""收件人地址, 主题, 邮件末班, 关键字参数列表(模板中定义的模板参数)"""
msg = Message(app.config["FLASK_MAIL_SUBJECT_PREFIX"] + subject,
sender=app.config["FLASK_MAIL_SENDER"],
recipients=[to])
msg.body = render_template(template + '.txt', **kwargs) # 纯文本正文
msg.html = render_template(template + '.html', **kwargs) # 富文本正文
mail.send(msg)
四. 异步发送电子邮件.
from threading import Thread
def send_async_email(app, msg):
with app.app_context(): # 激活程序上下文.
mail.send(msg)
def send_email(to, subject, template, **kwargs):
"""收件人地址, 主题, 邮件末班, 关键字参数列表(模板中定义的模板参数)"""
msg = Message(app.config["FLASK_MAIL_SUBJECT_PREFIX"] + subject,
sender=app.config["FLASK_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])
return thr
当程序要发送大量邮件时, 使用专门发送电子邮件的作业要比给每封邮件都新建一个线程更合适, 如使用 Celery 等任务队列
flask 扩展之 -- flask-mail的更多相关文章
- Flask從入門到入土(二)——請求响应與Flask扩展
———————————————————————————————————————————————————————————— 一.程序和請求上下文 Flask從客戶端收到請求時,要讓視圖函數能訪問一些對象 ...
- Flask 扩展 Mail
安装 pip install flask-mail from flask import Flask from flask_mail import Mail, Message app = Flask(_ ...
- Flask扩展 -- flask-mail
电子邮件是最常用的通信方式之一.虽然Python标准库中的smtplib包可用在Flask程序中发送电子邮件,但包装了smtplib的Flask-Mail扩展能更好的和Flask集成. 1.安装Fla ...
- Inside Flask - flask 扩展加载过程
Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...
- Flask 扩展 自定义扩展
创建一个为视图访问加日志的扩展Flask-Logging,并从中了解到写Flask扩展的规范. 创建工程 先创建一个工程,目录结构如下: flask-logging/ ├ LICENSE # 授权说明 ...
- Flask 扩展 表单
pip install flask-wtf 一个简单的表单 from flask_wtf import Form from wtforms import StringField from wtform ...
- Flask从入门到精通之flask扩展
Flask被设计成可扩展形式,因此并没有提供一些重要的功能,比如数据库和用户认证,所以开发者可以自由选择最适合程序的包,或者按需求自行开发.社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你还 ...
- Flask扩展实现HTTP令牌token认证HTTPTokenAuth
Token认证 在restful设计中,用户认证模式通常使用json web token,而不会使用传统的HTTP Basic认证(传入账号密码) token认证模式如下:在请求header中加入to ...
- 2.6、Flask扩展
Flask 被设计为可扩展形式,故而没有提供一些重要的功能,例如数据库和用户认证,所以开发者可以自由选择最适合程序的包,或者按需求自行开发. 社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你 ...
- Flask基础(13)-->Flask扩展Flask-Script
Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...
随机推荐
- 【算法系列学习】线段树 单点覆盖,区间查询最大值 [kuangbin带你飞]专题七 线段树 B - I Hate It
https://vjudge.net/contest/66989#overview #include<iostream> #include<cstdio> #include&l ...
- PHP学习笔记-2
PHP 是一门弱类型语言: 在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型.(跟Javascript很像啊!) PHP 会根据变量的值,自动把变量转换为正确的数据类型. 在强类型的编 ...
- Java scheduled executor
A typical usage of java scheduled executor looks like this ScheduledExecutorService executor = Execu ...
- oracle 12c 新特性之(相同字段上的多重索引、ddl 日志、限制PGA的大小、分页查询)
1. 相同字段上的多重索引 在Oracle 12c R1之前,一个字段是无法以任何形式拥有多个索引的.或许有人会想知道为什么通常一个字段需要有多重索引,事实上需要多重索引的字段或字段集合是很多的. ...
- hdu2089 不要62 我的第一个数位DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位DP的入门题,我是根据kuangbin的博客写出来的 思路: dp[i][0],表示长度为i ...
- 细看JS中的BOM、DOM对象
DOM对象模型 DOM(Document Object Model),是指文档对象模型,是W3C组织推荐的处理可扩展标志语言的 ...
- ThinkPHP集成万象优图
项目原因 不告诉你,反正需要把腾讯云的万象优图整合进来. 下载PHP版的万象优图的SDK 下载地址:https://github.com/tencentyun/image-php-sdk git cl ...
- Linux Set Command
1. set -e "Exit immediately if a simple command exits with a non-zero status." When this o ...
- MySql学习笔记(一) —— 关键字的使用
1.distinct关键字 作用:检索出有不同值的列,比如一个商品表中存在供应商vend_id,一个供应商会对应很多商品,我们要查找有多少供应商,就可以用到该关键字去重. select distinc ...
- Sqoop简介及安装
Hadoop业务的大致开发流程以及Sqoop在业务中的地位: Sqoop概念 Sqoop可以理解为[SQL–to–Hadoop],正如名字所示,Sqoop是一个用来将关系型数据库和Hadoop中的数据 ...