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. Vue项目的部署

    通过vue-cli创建的工程,默认已经打好了基础,包含vue-loader webpack. 通常我们开发中,使用npm run dev进行开发,webpack会Hot reload,不用我们手动刷新 ...

  2. Linux下Tomcat进行远程调试

    1.更改tomcat远程调试端口(可以使用默认端口不更改) 打开目录下的catalina.sh文件,找到JPDA_ADDRESS=”8000”,8000代表远程调试端口,可以更改成其他没有被占用的端口 ...

  3. oracle linux 6.5 安装 oracle 12cR2数据库(2)-DBCA建库

    援引:http://www.cnblogs.com/kerrycode/p/3386917.html  by 潇湘隐者 Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引 ...

  4. hdu4171 Paper Route 树的性质+DFS

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4171 题意: 有n+1个点,这n+1个点由n条边相连,且保证连通.然后给出各个点到出口的距离,要求从 ...

  5. [笔记]机器学习(Machine Learning) - 03.正则化(Regularization)

    欠拟合(Underfitting)与过拟合(Overfitting) 上面两张图分别是回归问题和分类问题的欠拟合和过度拟合的例子.可以看到,如果使用直线(两组图的第一张)来拟合训,并不能很好地适应我们 ...

  6. JAVA-Socket通信笔记

    JAVA - Socket 从开学到现在 也学了三个月时间的java了,一直在 在 语法和基本使用上周旋,井底之娃一枚. 这两天 有学长指点,花了两天的时间 学习了java多线程和socket的简单使 ...

  7. Java IO和NIO文章目录

    1.java IO详尽解析 2.深入分析 Java I/O 的工作机制 3.InputStream类详解 4.OutputStream类详解 5.JAVA的节点流和处理流 6.FileInputStr ...

  8. OpenCV探索之路(三):滤波操作

    滤波处理分为两大类:线性滤波和非线性滤波.OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法. 线性滤波:方框滤波.均值滤波.高斯滤波 方框滤波 #include<open ...

  9. Day2-字符编码转换

    1.在python2默认编码是ASCII, python3里默认是unicode 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so ...

  10. ZigZag Conversion2015年6月23日

    题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...