当前位置:网站首页>Flask框架——Flask-Mail邮件
Flask框架——Flask-Mail邮件
2022-07-30 13:40:00 【白巧克力LIN】
目录
上篇文章我们学习了Flask框架——Flask-WTF表单:文件上传、验证码,这篇文章我们学习Flask框架——Flask-Mail邮件。
Web应用程序经常需要向用户、客户端、管理员、运维人员等相关人员发送邮件。在Flask框架中提供了Flask-Mail邮件库来管理电子邮件的收发。
安装Flask-Mail
执行如下代码安装Flask-Mail:
pip install flask-mail
安装后,可以执行如下代码查看Flask-Mail的信息:
pip show flask-mail
信息如下所示:
Name: Flask-Mail
Version: 0.9.1
Summary: Flask extension for sending email
Home-page: https://github.com/rduplain/flask-mail
Author: Dan Jacob
Author-email: [email protected]
License: BSD
Location: c:\users\lin\desktop\flask-mail邮件\venv\lib\site-packages
Requires: blinker, Flask
Required-by:
配置Flask-Mail
在使用Flask-Mail之前,需要进行配置。
创建Flask项目,其代码如下所示:
from flask import Flask
from flask_mail import Mail
app =Flask(__name__)
app.config['MAIL_SERVER']='smtp.qq.com' #邮件服务器的名称/IP地址
app.config['MAIL_PORT'] = 465 #所用服务器的端口号
app.config['MAIL_USERNAME'] = '[email protected]' #发件人的用户名
app.config['MAIL_PASSWORD'] = '*******' #发件人的POP3/IMAP/SMTP服务的SSL连接客户端授权码
app.config['MAIL_USE_TLS'] = False #禁用传输安全层加密
app.config['MAIL_USE_SSL'] = True #启用安全套接字层加密
mail = Mail(app) #创建邮件类对象
if __name__ == '__main__':
app.run(debug = True)
这里我们是使用QQ邮箱作为发件邮箱。
QQ邮箱相关服务器信息:
服务器名称 | 服务器地址 | SSL协议端口号 | 非SSL协议端口号 |
---|---|---|---|
IMAP | imap.qq.com | 993 | 143 |
SMTP | smtp.qq.com | 465/587 | 25 |
POP3 | pop.qq.com | 995 | 110 |
SSL连接客户端授权码可以按如下图获取:
下拉,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启POP3、IMAP/SMTP服务,发送短信,
发送短信就会获取到客户端授权码了。
除了刚才我们在Flask程序中配置的参数,还可以添加以下参数:
MAIL_DEBUG:支持自定义调试,默认是Flask应用程序的调试状态;
MAIL_DEFAULT_SENDER:设置默认发件人;
MAIL_MAX_EMAILS:设置要发送的最大邮件;
MAIL_SUPPRESS_SEND: 如果app.testing设置为true,则发送被抑制;
MAIL_ASCII_ATTACHMENTS: 如果设置为true,则将附加的文件名转换为ASCII。
使用Flask-Mail
这里我们通过网页的形式来发送邮件。
在上面的Flask程序中,我们编写视图函数,如下所示:
@app.route('/write')
def write_mail():
return render_template('write.html')
这里我们首先创建一个write_mail视图函数,其作用是渲染write.html模板文件,write.html文件,代码如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{
{ url_for('send_mail') }}" method="post">
<p>收件人是:<input type="text" name="username"></p>
<p>邮箱主题为:<input type="text" name="theme"></p>
<p>邮箱内容为:<input type="text" name="content"></p>
<p><input type="submit" value="发送"></p>
</form>
</body>
</html>
这里我们使用了url_for()方法调用视图函数send_mail(),当点击发送时,就会调用send_mail()视图函数,并把文本中输入的数据传递到请求中。
send_mail视图函数代码如下所示:
@app.route('/send' ,methods=['GET','POST'])
def send_mail():
username=request.form.get('username') #获取请求中的username参数
theme=request.form.get('theme') #获取请求中的theme参数
content=request.form.get('content') #获取请求中的content
msg = Message(theme, sender='[email protected]', recipients=[username],body=content) #使用Messgae方法
mail.send(msg) #使用Mail类中的send()方法
return '邮件发送成功'
获取请求中的参数,再使用Message()实例封装邮件,其语法结构为:
其中:第一个参数为邮件主题,第二个sender参数为发件人,第三个recipients参数为收件人,其参数值为一个列表,所以可以同时传入多个收件人,第四个参数为邮件内容。
最后使用Mail类中的send()方法发送邮件,
在Mail类中有以下方法:
方法 | 描述 |
---|---|
send() | 发送Message类对象的内容 |
connect() | 与邮件主机打开连接 |
send_message() | 发送消息对象 |
好了,代码已经写好了,启动Flask程序,访问http://127.0.0.1:5000/write,正确输入内容,如下图所示:
点击发送后,就会跳转到http://127.0.0.1:5000/send网页中,如下图所示:
好了,关于Flask框架——Flask-Mail邮件就学到这里,感谢观看,下篇文章我们继续学习Flask框架——Flask-SQLite数据库。
公众号:白巧克力LIN
该公众号发布Python、数据库、Linux、Flask、自动化测试、Git等相关文章!
- END -
边栏推荐
猜你喜欢
How awesome is the "12306" architecture?
TaskDispatcher source code parsing
为什么做软件测试一定要学自动化?谈谈我眼中自动化测试的价值
No-code development platform application visible permission setting introductory tutorial
以unity3d为例解读:游戏数据加密
SQL 26 calculation under 25 years of age or older and the number of users
Apache Log4j2漏洞
shell script flow control statement
LeetCode二叉树系列——107.二叉树的层序遍历II
jsArray array copy method performance test 2207300040
随机推荐
Synology system installation related file sharing
“12306” 的架构到底有多牛逼
无代码开发平台全部应用设置入门教程
LeetCode二叉树系列——107.二叉树的层序遍历II
一本通循环结构的程序设计第一章题解(1)
[ARC092D] Two Faced Edges
“封号斗罗” 程序员修炼之道:通向务实的最高境界
人社部公布“数据库运行管理员”成新职业,OceanBase参与制定职业标准
pytorch学习记录(六):循环神经网络 RNN & LSTM
打破原则引入SQL,MongoDB到底想要干啥???
TaskDispatcher source code parsing
LeetCode二叉树系列——145.二叉树的后序遍历
R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化箱图、width参数自定义箱图中箱体的宽度
Jenkins自动化部署项目
时间序列的数据分析(四):STL分解
eclipse连接SQL server数据库「建议收藏」
LoRaWAN网关源码分析(V1.0.2)
UPC2022暑期个人训练赛第19场(B,P)
电池包托盘有进水风险,存在安全隐患,紧急召回52928辆唐DM
[ARC092B] Two Sequences