当前位置:网站首页>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 -
边栏推荐
- 永州动力电池实验室建设合理布局方案
- VLAN实验
- 58. 最后一个单词的长度
- 接口自动化框架,lm-easytest内测版发布,赶紧用起来~
- Study Notes - Becoming a Data Analyst in Seven Weeks "Week 2: Business": Business Analysis Metrics
- 时间序列的数据分析(四):STL分解
- CF1677E Tokitsukaze and Beautiful Subsegments
- 【ROS进阶篇】第十一讲 基于Gazebo和Rviz的机器人联合仿真(运动控制与传感器)
- 重保特辑|筑牢第一道防线,云防火墙攻防演练最佳实践
- 地形分析的主要内容(流浪地球的特效水平)
猜你喜欢

LeetCode二叉树系列——107.二叉树的层序遍历II

js人均寿命和GDP散点图统计样式

jsArray array copy method performance test 2207292307
SQL 26 calculation under 25 years of age or older and the number of users

二手手机销量突破3亿部,与降价的iPhone夹击国产手机

Eleven BUUCTF questions (06)

shell脚本流程控制语句

如何判断自己是否适合IT行业?方法很简单

电池包托盘有进水风险,存在安全隐患,紧急召回52928辆唐DM

权威推荐!腾讯安全DDoS边缘安全产品获国际研究机构Omdia认可
随机推荐
NFTScan 与 PANews 联合发布多链 NFT 数据分析报告
【Pytorch】如何在关闭batch-norm的同时保持Dropout的开启
CF1320E Treeland and Viruses
二手手机销量突破3亿部,与降价的iPhone夹击国产手机
ENVI Image Processing (6): NDVI and Vegetation Index
无代码开发平台全部应用设置入门教程
libudev 使用说明书
CF780G Andryusha and Nervous Barriers
OFDM 十六讲 3- OFDM Waveforms
How awesome is the "12306" architecture?
判断链表是否有环
R语言ggplot2可视化时间序列数据(默认时间中断部分前后自动连接起来)、创建时间分组、使用分面图(faceting)可视化时间序列数据
自动化测试的生命周期是什么?
新一代开源免费的终端工具,太酷了
CF338E Optimize!
[ARC092B] Two Sequences
js背景切换时钟js特效代码
近两年激光雷达运动物体分割论文阅读小结
(HR Interview) Most Common Interview Questions and Skilled Answers
SQL 改写系列七:谓词移动