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

news2024/11/27 2:32:03

请添加图片描述

文章目录

  • 6 电子邮件
    • 6.1 使用Flask-Mail发送
    • 6.2 使用事务邮件服务SendGrid
    • 6.3 电子邮件进阶
    • 6.4 小结

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 小结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/978322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Miniconda3环境迁移

问题: conda之前安装的默认路径空间满了没法进行安装,为此将其进行迁移,但是迁移之后报错 bash: /data/anaconda3/bin/conda: /home/anaconda3/bin/python: 坏的解释器: 没有那个文件或目录解决方案: 1、修改~/.bashrc中的环境…

用通俗易懂的方式讲解大模型分布式训练并行技术:数据并行

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

【多尺度双域引导网络:Pan-sharpening】

Multi-Scale Dual-Domain Guidance Network for Pan-sharpening (用于泛锐化的多尺度双域引导网络) 全色锐化的目标是在纹理丰富的全色图像的指导下,通过超分辨低空间分辨率多光谱图像(LRMS)的对应物产生高空间分辨率…

Dedecms最新版--0day分享分析(二)

前言 接上一篇的Tricks,既然利用远程文件下载方式成为了实现RCE的最好方法,毕竟在执行的时候没有恶意shell文件,恶意木马被存放于远端服务器,那么下文的day就是对远程恶意文件的利用。 环境 下载最新版本: https://…

前端项目启动时报错:Use // eslint-disable-next-line to ignore the next line

前端项目启动时报错:Use // eslint-disable-next-line to ignore the next line 首先说一下这个问题产生的原因: 项目创建时设置了使用 eslint 进行代码规范检查。 解决办法: 找到webpack.base.conf.js文件,并且将下满这行代码…

在 linux 虚拟机上安装配置 hive

目录 一 下载hive 安装包 二 解压 hive 并配置环境变量 三 配置hive 的配置文件 四 更新 guava 五 hive初始化 六 开启远程连接 七 使用datagrip 连接 hive 一 下载hive 安装包 百度网盘资源如下: 链接: https://pan.baidu.com/s/18jF-Qri0hc52_rtL61O0YQ?…

常见的CSS兼容问题和解决方案

今天就来聊聊在为了您更好的体验,本文章聊聊如何仅支持谷歌浏览器访问查看页 前端开发经常需要检查浏览器的兼容性,这里推荐(Can I Use)这个查询网站。它是一个针对前端开发人员定制的一个查询CSS、JS、HTML5、SVG在主流浏览器中特性和兼容性的网站&…

RabbtiMQ的安装与使用

一、安装Erlang与Rabbitmq 安装教程本教程是在centos8下试验的,其实linux系统的都差不多RabbitMQ官方:Messaging that just works — RabbitMQRabbitMQ是开源AMQP实现,服务器端用Erlang语言编写,Python、Ruby、 NET、Java、JMS、c…

axios返回几种数据格式? 其中Blob返回时的size是什么意思?

axios返回几种数据格式? 其中Blob返回时的size是什么意思? 1、字符串(String):服务器可以返回纯文本或HTML内容,Axios会将其作为字符串返回。 2、JSON(JavaScript Object Notation)&#xff…

C语言入门 Day_14 for循环

前言 我们定义了一个数组以后,要使用(读取或者修改)数组元素的话,可以一个一个的读取,就前两课学的那样,代码类似这个结构。 int number_list[5]{1,2,3,4,5}; printf("%d\n",number_list[0]); …

【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】HAL移植

一、环境介绍 RK3588主板搭载Android12操作系统,内核是Linux5.10,使用ST的六轴传感器LSM6DSR芯片。 二、芯片介绍 LSM6DSR是一款加速度和角速度(陀螺仪)六轴传感器,还内置了一个温度传感器。该芯片可以选择I2C,SPI通讯,还有可编程终端,可以后置摄像头等设备,功能是很…

第二章 Linux多进程开发 2.24-2.31 信号集及相关函数 共享内存 守护进程

有时间需要重新回顾 2.24 信号集及相关函数 1.用户通过键盘 Ctrl C, 产生2号信号SIGINT (信号被创建) 2.信号产生但是没有被处理 (未决) - 在内核中将所有的没有被处理的信号存储在一个集合中 (未决信号集) - SIGINT信号状态被…

第 3 章 栈和队列 (利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径))

1. 背景说明 广度优先通俗的解释的是将当前所有能走的步骤全部走完并保存在队列中,又称为层序遍历,此外,该方法类似于多条路线并发前进, 哪一条先到就取哪条路线作为结果并终止查询,因此能够得到最短路径,…

【JavaEE】_HTML

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签:h1~h6 2.3 段落标签:p 2.4 换行标签:br 2.5 格式化标签 2.6 图片标签:img 2.7 超链接标签:a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

镜像的基本命令(docker)

文章目录 前言一、docker命令介绍1、帮助命令2、显示镜像3、搜索镜像4、下载镜像5、删除镜像 总结 前言 本文主要介绍docker中与镜像相关的一些命令,是对狂神课程的一些总结,作为一个手册帮助博主和使用docker的同学们来查找和回忆。 实验环境&#xf…

【Java 基础篇】深入理解 Java 中的抽象类:提高代码可维护性与扩展性

抽象类(Abstract Class)是 Java 面向对象编程中的一个重要概念。它允许我们定义一组抽象方法,这些方法可以被子类(类)实现。抽象类通常用于定义一些通用的方法和属性,但不能被实例化。本篇博客将深入探讨 J…

Java反序列化漏洞复现(weblogic和s2)

文章目录 weblogic启动环境漏洞扫描漏洞复现 S2-045启动环境漏洞复现 前提条件: 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub weblogic 启动环境 到下面路径下…

Mac13.4 (22F66)钥匙串无法导出.p12证书解决方案

最近更新了Mac 13.4系统之后,开发苹果APP项目时突然发现无法导出.p12证书 这情况解决方案如下方案 在钥匙串访问的上方,有一栏类型筛选,默认选中的是 “所有项目”,将选项切换至“证书” 切换到“证书”后,右键点击需要…

Ae 效果:CC Vector Blur

模糊和锐化/CC Vector Blur Blur & Sharpen/CC Vector Blur CC Vector Blur(CC 向量模糊)使用源图像(图层自身或指定的向量映射图层)的亮度差异或其他选择的属性(如红通道、绿通道、蓝通道等)来生成一个…

kafka学习-概念与简单实战

目录 1、核心概念 消息和批次 Topic和Partition Replicas Offset broker和集群 生产者和消费者 2、开发实战 2.1、消息发送 介绍 代码实现 2.2、消息消费 介绍 代码实现 2.3、SpringBoot Kafka pom application.yaml KafkaConfig producer consumer 1、核心…