Flask mail的使用教程,包括发送HTML,附件等等。Flask mail一般是用来做注册时候的邮箱验证,或者改密码的时候的验证,还有就是一些预定信息的通知,或者是tax的一些内容。当然网上的教程很多,但是大部分都不够全面,有的是基础,有的是加深,所以我打算在这里做一个关于flask mail尽量全面的教程。
安装 Flask Mail
如果大家没有使用过flask mail,需要先用pip3安装一下
1 | pip3 install flask_mail |
Flask Mail 的配置
配置 | 默认值 | 功能 |
---|---|---|
MAIL_SERVER | localhost | 邮件服务器 |
MAIL_PORT | 25 | 邮件端口(一般是465) |
MAIL_USE_TLS | False | 是否使用TLS协议(一般不使用) |
MAIL_USE_SSL | False | 是否使用SSL协议(大多数使用) |
MAIL_DEBUG | app.debug | 是否为DEBUG模式,打印调试消息(一般默认开启) |
MAIL_USERNAME | None | 用户名 |
MAIL_PASSWORD | None | 密码 or 授权码 |
MAIL_DEFAULT_SENDER | None | 默认发送者 |
MAIL_MAX_EMAILS | None | 一次连接中的发送邮件的上限 |
MAIL_ASCII_ATTACHMENTS | False | 如果 MAIL_ASCII_ATTACHMENTS 设置成 True 的话,文件名将会转换成 ASCII 的。一般用于添加附件。 |
大部分情况下我们只需要设置MAIL_USE_TLS
, MAIL_USE_SSL
, MAIL_USERNAME
, MAIL_PASSWORD
, MAIL_DEFAULT_SENDER
这些就可以了
使用Flask Mail
1 | from flask import Flask |
怎么使用HTML模板
大部分时候不管发送邮件验证还是什么,HTML的模板都是不变的,只是改变了里面的内容,所以我们先说一下怎么使用HTML模板来发送,最主要的一个function就是render_template
这个函数,因为flask使用的是Jinja2的模板,render_template
函数可以把Jinja2的模板转义成string的格式。所以我们用的return render_template
就是把HTML转成string,然后发回给浏览器。
我们用Jinja2在templates的文件夹下定义一个HTML文件叫hello.html
, 这样我们就可以传进来参数,来修改username。具体的使用方法下面两种发送方式里面都有例子。
1 | <h1>Hello {{ username }}</h1> |
不使用异步发送
Flask mail可以是用异步发送,可以不适用,首先讲一下不使用异步发送的做法。也可以用render_template
的方法来修改msg.html
的值
1 | # recipients是list,可以添加多个收件人 |
如果配置什么都没有错误的话可以直接发送出去了。
使用异步发送
从电子邮件发送开始,直到电子邮件交付后,给浏览器发回其响应,在整个过程中,Web服务器会一直阻塞。如果我们试图发送电子邮件到一个服务器是缓慢的,所以使用多线程异步发送电子邮件可以避免处理请求过程中不必要的延迟,将发送电子邮件的函数使用Thread来运行。
1 | from threading import Thread |
关于Flask Mail发送附件
当flask mail需要发送附件的时候,如果MAIL_ASCII_ATTACHMENTS 设置成True 的话,文件名将会转换成ASCII 的。 当文件名是以UTF-8 编码的时候,使用邮件转发的时候会修改邮件内容并且混淆Content-Disposition 描述,这个时候MAIL_ASCII_ATTACHMENTS 配置项是十分有用的。转换成ASCII 的基本方式就是对non-ASCII 字符的去除。任何一个unicode 字符能够被NFKD 分解成一个或者多个ASCII 字符。
发送照片:
1 | with app.open_resource("image.png") as fp: |
发送PDF:
1 | with app.open_resource('xx.pdf') as fp: |
注:如果想在HTML里面使用css,需要自己在<style></style>
里面写css,不可以直接用bootstrap这些框架。
demo 文件提供下载。
关于怎么使用Gmail
- 首先开启安全性较低的应用的访问权限 URL
- 启用IMAP URL:
关于怎么使用QQ邮箱
- 首先开启IMAP/SMTP服务。在邮箱”设置->账户“ 里面设置。
- 需要生成授权码,也在同一个页面