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的更多相关文章

  1. Flask從入門到入土(二)——請求响应與Flask扩展

    ———————————————————————————————————————————————————————————— 一.程序和請求上下文 Flask從客戶端收到請求時,要讓視圖函數能訪問一些對象 ...

  2. Flask 扩展 Mail

    安装 pip install flask-mail from flask import Flask from flask_mail import Mail, Message app = Flask(_ ...

  3. Flask扩展 -- flask-mail

    电子邮件是最常用的通信方式之一.虽然Python标准库中的smtplib包可用在Flask程序中发送电子邮件,但包装了smtplib的Flask-Mail扩展能更好的和Flask集成. 1.安装Fla ...

  4. Inside Flask - flask 扩展加载过程

    Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...

  5. Flask 扩展 自定义扩展

    创建一个为视图访问加日志的扩展Flask-Logging,并从中了解到写Flask扩展的规范. 创建工程 先创建一个工程,目录结构如下: flask-logging/ ├ LICENSE # 授权说明 ...

  6. Flask 扩展 表单

    pip install flask-wtf 一个简单的表单 from flask_wtf import Form from wtforms import StringField from wtform ...

  7. Flask从入门到精通之flask扩展

    Flask被设计成可扩展形式,因此并没有提供一些重要的功能,比如数据库和用户认证,所以开发者可以自由选择最适合程序的包,或者按需求自行开发.社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你还 ...

  8. Flask扩展实现HTTP令牌token认证HTTPTokenAuth

    Token认证 在restful设计中,用户认证模式通常使用json web token,而不会使用传统的HTTP Basic认证(传入账号密码) token认证模式如下:在请求header中加入to ...

  9. 2.6、Flask扩展

    Flask 被设计为可扩展形式,故而没有提供一些重要的功能,例如数据库和用户认证,所以开发者可以自由选择最适合程序的包,或者按需求自行开发. 社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你 ...

  10. Flask基础(13)-->Flask扩展Flask-Script

    Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...

随机推荐

  1. seajs模块标识命名和解析规则

    模块标识采用路径形式,但要注意与路径的区别.require.require.async的第一个参数是模块标识.而seajs.use第一个参数为文件路径. use是全局的,require是局部的.模块标 ...

  2. Linux下Hadoop2.7.1集群环境的搭建(超详细版)

                                本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 一.基础环境 ...

  3. [刷题]算法竞赛入门经典(第2版) 5-10/UVa1597 - Searching the Web

    题意:不难理解,照搬题意的解法. 代码:(Accepted,0.190s) //UVa1597 - Searching the Web //#define _XIENAOBAN_ #include&l ...

  4. LeetCode---------Longest Substring Without Repeating Characters解法

    题目如下: Given a string, find the length of the longest substring without repeating characters. Example ...

  5. 进军VR虚拟现实-先来全景智慧城市-有梦想的互联网创业者

    随着VR的大火,越来越多的企业开始进军VR行业,不过并不是所有企业进军VR行业都是成功的,那么问题来了,VR虚拟现实行业投资怎么做才能取得成功呢?这是当下很多企业面临的一个问题,VR虚拟现实行业投资也 ...

  6. 11154 LRC才不会告诉你们的事情

    #include<stdio.h> #include<string.h> int main() { ,t=; ],sum[],k=,d=; ]; ]; scanf(" ...

  7. 006开源O/R映射框架内容回顾

    Hibernate是一个O/R映射框架(也称为ORM) 从ORM词来看,O---Object(对象模型):R--- Relational(关联模型),可以做对象和关联的一种映射,当然这只是部分功能,一 ...

  8. Java微服务框架

    Java的微服务框架dobbo.spring boot.redkale.spring cloud 消息中间件RabbitMQ.Kafka.RocketMQ

  9. Vue2.x中的Render函数

    Render函数是Vue2.x版本新增的一个函数:使用虚拟dom来渲染节点提升性能,因为它是基于JavaScript计算.通过使用createElement(h)来创建dom节点.createElem ...

  10. oracle配置odbc数据源

    今天配置oracle数据源心得: 1.需安装oracle客户端,若校验报错,将杀毒软件全部退出之后再重新安装: 2.安装完成后,运行odbcad32(64位),在odbc界面可找到相应驱动: 3.客户 ...