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 ...
随机推荐
- 基于Activiti的流程应用开发平台JSAAS-WF V5.3
第1章 产品概述及体系架构 1.1.概述 红迅JSAAS-WF工作流平台V5是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的流程管理产品,它基于流行的JAVA开源技术上构建, ...
- python3 selenium 如何处理异常情况
使用场景: 1.元素只有在某一特定情况下才会出现 2.元素定位不到 使用方法: try: except exceptions.NoSuchElementException: 举例说明: # _._ c ...
- 【Java SE】如何用Java实现直接选择排序
摘要:直接选择排序属于选择排序的一种,但是它的排序算法比冒泡排序的速度要快一些,由于它的算法比较简单,所以也比较适合初学者学习掌握. 适宜人群:有一定Java SE基础,明白Java的数据类型,数组的 ...
- mysql语句insert后取到返回的主键id
Q: 有时候做类似接口里的数据订正,需要取到insert语句返回的id主键,在程序里通过对象返回好取,但是写sql怎么取到呢? A: 用select @@identity得到上一次插入记录时自动 ...
- 非学习型单层感知机的java实现(日志三)
要求如下: 所以当神经元输出函数选择在硬极函数的时候,如果想分成上面的四个类型,则必须要2个神经元,其实至于所有的分类问题,n个神经元则可以分成2的n次方类型. 又前一节所证明出来的关系有: 从而算出 ...
- HTML基础知识入门
好的,我们开始吧,打开Eclipse,新建一个项目,就叫做Base吧,基础班的意思.注意哦,要建一个JavaWeb项目.右键,new,Dynamic Web Project,如果出来的菜单项没有,就点 ...
- [刷题]Codeforces 785D - Anton and School - 2
Description As you probably know, Anton goes to school. One of the school subjects that Anton studie ...
- 【更新WordPress 4.6漏洞利用PoC】PHPMailer曝远程代码执行高危漏洞(CVE-2016-10033)
[2017.5.4更新] 昨天曝出了两个比较热门的漏洞,一个是CVE-2016-10033,另一个则为CVE-2017-8295.从描述来看,前者是WordPress Core 4.6一个未经授权的R ...
- 栅栏——CyclicBarrier
栅栏CyclicBarrier和闭锁CountDownLatch类似,可以说它们都是用来计数,都能阻塞一组线程知道某个事件发生.不同的是闭锁用于等待事件,而栅栏用于等待其他线程. 在前一篇<Co ...
- XML文件生成
import java.io.* ; import org.w3c.dom.* ; import javax.xml.parsers.* ; import javax.xml.transform.* ...