Flask学习之十一 邮件支持

英文博客地址:blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xi-email-support

中文翻译地址:http://www.pythondoc.com/flask-mega-tutorial/email.html

开源中国社区:http://www.oschina.net/translate/the-flask-mega-tutorial-part-xi-email-support

对于我们这个应用,我们可能想要有这样的功能,当有一个新的关注者的时候,发一封邮件给用户。

幸运地,Flask 已经存在处理邮件的扩展,尽管不是 100% 支持我们想要的功能,但是已经很好了。

在前面我们就已经安装了Flask-Mail,安装命令为:

flask/bin/pip install flask-mail

一、配置

需要设置两个方面的内容:

  • 邮件服务器信息
  • 用户邮箱地址
# email server
MAIL_SERVER = ‘your.mailserver.com‘
MAIL_PORT = 25
MAIL_USERNAME = None
MAIL_PASSWORD = None

# administrator list
ADMINS = [‘[email protected]‘]

上面是之前的代码,其中并没有设置切实可用的邮件服务器和邮箱。现在我们通过一个例子来看如何使用gmail邮箱账户来发送邮件:

# email server
MAIL_SERVER = ‘smtp.googlemail.com‘
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
MAIL_USERNAME = os.environ.get(‘MAIL_USERNAME‘)
MAIL_PASSWORD = os.environ.get(‘MAIL_PASSWORD‘)

# administrator list
ADMINS = [‘[email protected]‘]

Note: We are not going to enhance the server setup to allow those that require an encrypted communication through TLS or SSL.

(大概意思应该是:我们不会提高服务器设置,让那些需要加密通信的通过TLS或者SSL)

上面的代码是要求把用户名和密码写到环境变量中,再从环境变量中读取,这样会比较安全。不过我暂时不会怎么把信息写入环境变量,所以暂时还是直接写入源码了:

# email server
MAIL_SERVER = ‘smtp.googlemail.com‘
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
MAIL_USERNAME = ‘your-gmail-username‘
MAIL_PASSWORD = ‘your-gmail-password‘

# administrator list
ADMINS = [‘[email protected]‘]

我们也需要初始化一个 Mail 对象,这个对象为我们连接到 SMTP 服务器并且发送邮件(文件 app/__init__.py):

from flask.ext.mail import Mail
mail = Mail(app)

然后试一下发邮件:

>>> from flask.ext.mail import Message
>>> from app import app, mail
>>> from config import ADMINS
>>> msg = Message(‘test subject‘, sender=ADMINS[0], recipients=ADMINS)
>>> msg.body = ‘text body‘
>>> msg.html = ‘<b>HTML</b> body‘
>>> with app.app_context():
...     mail.send(msg)
....

然后发现忧桑地被墙了,暂时找不到解决办法,错误代码:

socket.error: [Errno 101] Network is unreachable

使用gmail不成功我就改QQ邮箱试一下了。

# mail server settings
MAIL_SERVER = ‘smtp.qq.com‘
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USE_SSL = False
MAIL_USERNAME = ‘your-gmail-username‘
MAIL_PASSWORD = ‘your-gmail-password‘
# administrator list
ADMINS = [‘your-gmail-username@qq.com‘]

改成QQ邮箱出现错误:

raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (454, ‘Authentication failed, please open smtp flag first!‘)

原因是我没有开启POP3/SMTP服务

解决方法:在QQ邮箱的设置里面,找到账户-》POP3/IMAP/SMTP选择开启POP3/SMTP服务

smtplib.SMTPAuthenticationError: (535, ‘Authentication failed‘)

上面的错误是说我验证失败了,因为我刚才开启了POP3/SMTP服务,需要有一个独立密码,而我一开始用的是我的QQ密码。

改正了密码之后就可以了。

备注:因为我不断在修改配置文件,所以我就把命令行的代码直接放到一个test.py文件里面了:

#!flask/bin/python
from flask.ext.mail import Message
from app import app, mail
from config import ADMINS
msg = Message(‘test subject‘, sender=ADMINS[0], recipients=ADMINS)
msg.body = ‘text body‘
msg.html = ‘<b>HTML</b> body‘
with app.app_context():
    mail.send(msg)
时间: 2024-11-09 10:34:01

Flask学习之十一 邮件支持的相关文章

Flask学习之十一——关注者

1. 关注者功能在数据库中的实现 一对多关系是最常用的关系类型,它把一个记录和一组相关的记录联系在一起.实现这种关系时,要在“多”这一侧加入一个外键,指向“一”这一侧联接的记录.比如在User中指定外键,指向Role(多个User为一个Role) 大部分的其他关系类型都可以从一对多类型中衍生.多对一关系从“多”这一侧看,就是一对多关系.一对一关系类型是简化版的一对多关系,限制“多”这一侧最多只能有一个记录.唯一不能从一对多关系中简单演化出来的类型是多对多关系. 多对多关系 下面以一个典型的多对多

初探swift语言的学习笔记十一(performSelector)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在OC中使用好好的performSelector,但不知为什么在swift有意的被拿掉了.更有甚者连IMP, objc_msgSend也不能用了.虽然想不通为什么,但应该有他的道理.就不纠结了. 大家可能在OC中使用得更多的就是延时处理,及后台处

第十七篇:实例分析(4)--初探WDDM驱动学习笔记(十一)

感觉有必要把 KMDDOD_INITIALIZATION_DATA 中的这些函数指针的意思解释一下, 以便进一步的深入代码. DxgkDdiAddDevice 前面已经说过, 这个函数的主要内容是,将BASIC_DISPLAY_DRIVER实例指针存在context中, 以便后期使用, 支持多实例. DxgkDdiStartDevice 取得设备信息, 往注册表中加入内容, 从POST设备中获取FRAME BUFFER以及相关信息(DxgkCbAcquirePostDisplayOwnershi

#HTTP协议学习# (十一)理解HTTP幂等性

在httpcomponent 文档中看到如下段落: 1.4.1. HTTP transport safety It is important to understand that the HTTP protocol is not well suited to all types of applications. HTTP is a simple request/response oriented protocol which was initially designed to support s

【转】MYSQL入门学习之十一:触发器的基本操作

转载地址:http://www.2cto.com/database/201212/176781.html 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):  www.2cto.com DELETE: INSERT: UPDATE: 使用触发器,需要MySQL5或之后的版本支持. 一.触发器基本操作 1.创建触发器 创建触发器时,需要给出4条信息: 唯一的触发器名:(虽然MySQL5允许不同的表上的触发器名称相同,但一般最好不要这么做

[ZHUAN]Flask学习记录之Flask-SQLAlchemy

From: http://www.cnblogs.com/agmcs/p/4445583.html Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作. 一.配置Flask-SQLAlchemy 程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALch

Flask 学习(一)概述及安装

Flask 概述及安装 Flask 简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 官方网址 :http://flask.pocoo.org/ 了解 Flask:首先,Flask 是Python 的一个Web 应用框架:其次,它是“微型”的 . 比起同类现有的web框架(如:Django),Flask 并不包含数据库抽象层,表单验证等.Flask 旨在保持代码简洁且易于扩展(Flask源码十

从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件

原文:从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件 本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开始学习jQuery (七) jQuery动画-让页面动起来! 从零

Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolvers,可以让你在浏览器中render model,而不必绑定到某种特定的view技术上.开箱即用,例如,Spring可以让你使用JSPs.Velocity目标和XSLT views.See Chapter 23, View technologies for a discussion of how