Flask狼书笔记 | 06_电子邮件

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 6 电子邮件Web中,我们常在用户注册账户时发送确认邮件,或是推送信息。邮件必要的字段包含发信方(sender),收信方(to),邮件主题(subject),邮件正文(body)。

6 电子邮件

Web中,我们常在用户注册账户时发送确认邮件,或是推送信息。邮件必要的字段包含发信方(sender),收信方(to),邮件主题(subject),邮件正文(body)。

本章用到:Flask-MailSendGrid

6.1 使用Flask-Mail发送

Flask-Main的常用配置:(p179),默认的发信端口为25。需要配置的内容包括服务器、端口、加密、发信人。

常用smtp服务提供商配置:(p180)

1、配置flask-mail

加密:

# ssl/tls加密
mail_use_ssl = True
mail_port = 456
# starttls加密
mail_use_tls = True
mail_port = 587

整体配置:

from flask import Flask
from flask_mail import Mail
app = Flask(__name__)
app.config.update(...) # 可以在这里统一加载配置
mail = Mail(app)

2、构建和发送邮件数据

也可以包装一个视图函数,实现在网页上编辑和发送电子邮件。

from flask_mail import Message
message = Message(subject='...', recipients=['...', ...], body='...')
mail.send(message)

6.2 使用事务邮件服务SendGrid

小结一下,有三种方式可以获得可用的邮件服务器:1)邮箱服务提供商,2)自己安装运行邮件服务器,3)使用事务邮件服务(如Mailgun、Sendgrid)。不过,事务邮件服务书中给出的都是国外网站,访问不太方便。此外,我在注册SendGrid账户时失败了。前面Flask-Mail的方式称为SMTP转发,另一种方式是Web API转发,不同之处在于通过http协议的post请求即可使用Web API转发来发送邮件,只需要以规定的格式构建表示邮件数据的字典,然后以JSON格式发起请求。(p185)


SendGrid也提供了官方的Python SDK,这种方式应该不用注册sendgrid账号(但我还未尝试)。SendGrid库除了单纯的发送邮件,还提供了一些辅助类来帮助构建按邮件数据字典(你也可以不用这些辅助类,手动构建)。

pip install sendgrid

SDK:SoftWare Development Kit,软件开发工具包

6.3 电子邮件进阶

1、正文类型

邮件的正文可以是html也可以是纯文本,出于全面的考虑可以同时提供两种(因为一些老旧的邮件系统无法读取html格式的)。

邮件客户端通常对于html邮件有一些限制,见(p189)。

在flask-mail中,可以通过不同的参数传入不同的文本格式。在sendgrid中则可以通过Content类的type_参数指定格式。

message = Message(..., body='纯文本正文', html='HTML正文')

2、使用模板组织正文

我们通常需要动态构建邮件正文,如含用户名称的部分,或提供让用户编辑的表单。使用render_template函数渲染后赋值给Message类的实例对象即可。

3、异步发送邮件(p191)

暂时没懂异步与不异步的效果区别,在开发过程中再看吧。文中使用了threading.Thread类实现异步效果。在生成环境中则应该使用异步任务队列。


程序上下文问题:异步的发信函数在后台线程调用,后台线程中并没有程序上下文存在,可以传入app实例并手动激活上下文。

with app.app_context():
    mail.send(message)

6.4 小结

本章的内容比较简单,依葫芦画瓢即可。这章的笔记我写得更简单,省略了很多我以前习惯记录的“葫芦”(代码),只进行概况和思路的描述。我觉得这样写笔记更加高效,需要具体细节时则可以再去书上查找。

本书的第一部分——基础知识到这里也就结束了。

相关文章
|
6月前
|
前端开发 JavaScript 数据库
Flask狼书笔记 | 09_图片社交网站 - 大型项目的架构与需求(2)
9.8 收藏图片 前面已经学习过如何使用关联表来表示多对多关系,缺点是只能表示关系,不能存储数据(如我还想记录下收藏图片的时间戳)。这种情况下,我们可以使用关联模型来表示多对多关系。 在关联模型中,我们将Photo模型与User模型的多对多关系,分离成了User模型和Collect模型的一对多关系,和Photo模型与Collect模型的一对多关系。
140 0
|
6月前
|
存储 前端开发 API
Flask狼书笔记 | 08_个人博客(上)
8 个人博客 个人博客是一个典型的CMS(内容管理系统),通常包含前台和后台两部分。这一张将涉及更高级的项目组织方式,以及一些新的Python包:Flask-Login,Unidecode。 8.1 大型项目结构
70 0
|
6月前
|
SQL 存储 前端开发
Flask狼书笔记 | 07_留言板
7 留言板 这是一个简单的程序,涉及到的大部分是之前所学习到的基础知识。新涉及的python包: BootStrap-Flask,Flask-Moment,Faker,Flask-Debug Toolbar。
68 0
|
6月前
|
存储 移动开发 JavaScript
Flask狼书笔记 | 04_表单
4 表单 表单是和用户交互最常见的方式之一,本章涉及的Python包由WTForms、Flask-WTF、Flask-CKEditor。(p104) 4.1 HTML表单
62 0
|
6月前
|
存储 前端开发 JavaScript
Flask狼书笔记 | 09_图片社交网站 - 大型项目的架构与需求(1)
9 图片社交网站 本章新涉及的Python包:Flask-Dropzone, Pillow, Flask-Avatars, Whoosh, Flask-Whooshee。 9.1 项目组织架构 1、功能式架构
107 0
|
6月前
|
存储 安全 数据库
Flask狼书笔记 | 08_个人博客(下)
8 个人博客 8.4 初始化博客 1、安全存储密码 密码不要以明文的形式直接存储在数据库中,以防被攻击者盗取、泄露。一般的做法是,不存储密码本身,而存储通过密码生成的散列值。(但密码仍然可能在传输过程中被截获)
69 0
|
6月前
|
SQL 存储 数据库
Flask狼书笔记 | 05_数据库
5 数据库 这一章学习如何在Python中使用DBMS(数据库管理系统),来对数据库进行管理和操作。本书使用SQLite作为示例。 注:按下Ctrl+F5,或Shift+F5可以清除浏览器缓存。 5.1 数据库的分类
56 0
|
6月前
|
存储 移动开发 前端开发
Flask狼书笔记 | 03_模板
3 模板 模板(template):包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。 3.1 模板基本使用
58 0
|
6月前
|
XML 前端开发 JavaScript
Flask狼书笔记 | 01_初识Flask,02_Flask与HTTP(2)
自定义Flask命令: Click官方文档(自定义命令):http://click.pocoo.org/6/
85 0
|
6天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
18 2