安装

pip install flask-mail

from flask import Flask
from flask_mail import Mail, Message app = Flask(__name__)
app.config.update(
MAIL_SERVER='smtp.example.com',
MAIL_USERNAME='bjhee',
MAIL_PASSWORD='example'
) mail = Mail(app) @app.route('/mail')
def send_mail():
msg = Message('Hello',
sender=('Billy.J.Hee', 'bjhee@example.com'),
recipients=['you@example.com'])
msg.html = '<h1>Hello World</h1>'
mail.send(msg)
return 'Successful' if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)

配置参数

批量发送

@app.route('/batch')
def send_batch():
with mail.connect() as conn:
for user in users:
msg = Message(subject='Hello, %s' % user['name'],
body='Welcome, %s' % user['name'],
recipients=[user['email']])
conn.send(msg) return 'Successful'

这样应用同邮件服务器的连接”mail.connect()”会一直保持到所有邮件发送完毕,也就是退出with语句后再关闭,避免多次创建关闭连接的开销。批量发送邮件个数上限由配置项”MAIL_MAX_EMAILS”决定。

邮件带附件

@app.route('/mail')
def send_mail():
msg = Message('Hello',
sender=('Billy.J.Hee', 'bjhee@example.com'),
recipients=['you@example.com'])
msg.html = '<h1>Hello World</h1>' # Add Attachment
with app.open_resource('blank.docx') as fp:
msg.attach('blank.docx', 'application/msword', fp.read()) mail.send(msg)
return 'Successful'

上面的代码中,我们通过”app.open_resource()”方法打开了本地当前目录下的”blank.docx”文件,然后通过”Message.attach()”方法将其附到消息对象中即可。”Message.attach()”方法的第一个参数指定了附件上的文件名,第二个参数指定了文件内容的MIME类型,第三个参数就是文件内容。

email_dispatched信号

Flask-Mail扩展还提供了一个信号”email_dispatched”,当邮件被调度时,该信号就会被发出

from flask_mail import email_dispatched

def log_mail_sent(message, app):
print 'Message "%s" is sent successfully' % (message.subject) email_dispatched.connect(log_mail_sent)

另外,在跑测试时我们不希望邮件真的被发出去,此时可以将Flask应用的配置项”TESTING”设成True,或者将Flask-Mail扩展的配置项”MAIL_SUPPRESS_SEND”设成True。这样,调用”Mail.send()”方法后,邮件不会被发出,但是你依然可以接收到”email_dispatched”信号。

Flask 扩展 Mail的更多相关文章

  1. Flask扩展 -- flask-mail

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

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

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

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

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

  4. Flask 扩展 自定义扩展

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

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

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

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

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

  7. 2.6、Flask扩展

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

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

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

  9. flask扩展系列之 - 访问速度限制

    flask-limiter 是一个对客户端的访问速率进行限制的flask扩展.可以自定义一些访问的(速度)限制条件来把那些触发限制的请求拒之门外.一般常用来进行对爬虫的限制. 下面就常见的用法,举了一 ...

随机推荐

  1. SVN的安装以及和eclipse的结合使用

    SVN概述 l 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: l 备份多个版本,占用磁盘空间大 l 解决代码冲突困难 l 容易引发BUG l 难于追 ...

  2. 洛谷P3434 [POI2006]KRA-The Disks(线段树)

    洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...

  3. Emacs考场配置

    当年\(NOip\)考场配置不记得啦 存在这里搞事情 (set-background-color "gray15") (set-foreground-color "gra ...

  4. 【BZOJ1095】捉迷藏(动态点分治)

    [BZOJ1095]捉迷藏(动态点分治) 题面 BZOJ 题解 动态点分治板子题 假设,不考虑动态点分治 我们来想怎么打暴力: \(O(n)DP\)求树的最长链 一定都会.不想解释了 所以,利用上面的 ...

  5. 【BZOJ3993】星际战争(网络流,二分答案)

    [BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团 ...

  6. Pluto - iOS 上一个高性能的排版渲染引擎

    WeTest 导读 Pluto 是 iOS 上的一个排版渲染引擎,通过 JSON/JS 文件可以很方便地描述界面元素,开发效率很高,并且在流畅度,内存等方便有保证.pluto.oa.com 上有更多详 ...

  7. Django admin 组件 原理分析与扩展使用 之 sites.py (一)

    一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...

  8. 【Unity与23种设计模式】责任链模式(Chain of Responsibility)

    GoF中定义: "让一群对象都有机会来处理一项请求,以减少请求发送者与接收者之间的耦合度.将所有的接受对象串联起来,让请求沿着串接传递,直到有一个对象可以处理为止." 举个现实中的 ...

  9. Facebook兆级别图片存储及每秒百万级别图片查询原理

    前言 Facebook(后面简称fb)是世界最大的社交平台,需要存储的数据时刻都在不断剧增(占比最大为图片,每天存储约20亿张,大概是微信的三倍). 那么问题来了,fb是如何存储兆级别的图片?并且又是 ...

  10. 记kkpager分页控件的使用

    kkpager支持异步加载分页: 1.页面添加div标签和引用JS,默认标签为<div id="kkpager"></div> 引用JS和样式 <sc ...