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. mui开发app之js将base64转图片文件

    之前我已经做过一个利用cropper裁剪并且制作头像的功能.如何在mui app中实现相册或相机获取图片后裁剪做头像请看另一篇博客:mui开发app之cropper裁剪后上传头像的实现 但是当时裁剪后 ...

  2. 为RecyclerView的item之间设置相同的间距

    项目中经常碰到列表当中的每一项之间需要设置间距的问题,我们可以通过给列表中的每一项设置margin值来实现,例如纵向的间距可以给每一项设置right_margin,这种方法下,整个列表的最左边会紧贴屏 ...

  3. 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用:Task List

    最近我为我自己的应用开发框架Apworks设计了一套案例应用程序,并以Apache 2.0开源,开源地址是:https://github.com/daxnet/apworks-examples,目的是 ...

  4. windows下安装mongodb以及node.js连接mongodb

    一.MongoDB 下载 下载地址  https://www.mongodb.com/download-center#community  选择windows版下载,然后安装. 二.安装完毕后创建数据 ...

  5. IOS安装CocoaPods详情过程

    一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPod ...

  6. [刷题]算法竞赛入门经典(第2版) 5-1/UVa1593 - Alignment of Code

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1593 - Alignment of Code #include&l ...

  7. Java IO详解(一)------File 类

    File 类:文件和目录路径名的抽象表示. 注意:File 类只能操作文件的属性,文件的内容是不能操作的. 1.File 类的字段 我们知道,各个平台之间的路径分隔符是不一样的. ①.对于UNIX平台 ...

  8. CAS单点登录服务器搭建

    关于cas单点登录的原理及介绍这里不做说明了,直接开始: 1.war包下载 去官网(https://www.apereo.org/projects/cas/download-cas)下载cas_ser ...

  9. Kafka学习-简介

      Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.S ...

  10. 模板方法模式(Tempalte Method Pattern)

    模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有 ...