跟着学习(新版):https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-x-email-support
回顾上一章:https://blog.csdn.net/weixin_41263513/article/details/85057156
本章内容
- Flask-Mail简单介绍
- 发送电子邮件
- 重置密码的准备工作
- 密码重置令牌
- 发送密码重置的邮件
- 重置用户密码
- 异步发送电子邮箱
- 发送qq邮箱
很多类型的应用都需要在特定事件发生时通知用户,而常用的通信方法是电子邮箱。在本章中,我将为忘记密码的用户添加密码重置功能。 当用户请求重置密码时,应用程序将发送包含特制链接的电子邮件。 然后,用户需要单击该链接以访问用于设置新密码的表单。
Flask-Mail简单介绍
发送电子邮箱而言,flask有一个名为Flask-Mail的流行扩展,可以使任务变得非常简单,记得用pip install一下
而密码重置链接中将包含安全令牌,为了生成令牌,我将使用JSON Web令牌,他也有一个流行的python包,这个需要pip install pyjwt
Flask-Mail扩展使从app.config对象配置的
文件:/app/–init–.py
# ...
from flask_mail import Mail
app = Flask(__name__)
# ...
mail = Mail(app)
如果您希望发送真实的电子邮件,则需要使用真实的电子邮件服务器。 如果您有一个,那么您只需要为它设置MAIL_SERVER,MAIL_PORT,MAIL_USE_TLS,MAIL_USERNAME和MAIL_PASSWORD环境变量
发送电子邮件
我们先写一个发送发送地安仔邮箱的辅助函数
文件:/app/email.py
from flask_mail import Message
from app import mail
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender=sender, recipients=recipients)
msg.body = text_body
msg.html = html_body
mail.send(msg)
sender:发送人
recipients:收件人
发送电子邮件内容只需要会用就可以,之后我会教大家怎么设置这些参数
重置密码的准备工作
正如我上面提到的,我希望用户可以选择重置密码。 为此,我将在登录页面中添加一个链接:
文件:/app/templates/login.html
<p>
Forgot Your Password?
<a href="{
{ url_for('reset_password_request') }}">Click to Reset It</a>
</p>
当用户单击该链接时,将出现一个新的Web表单,该表单请求用户的电子邮件地址作为启动密码重置过程的方法。 以下是表单类:
文件:/app/forms.py
class ResetPasswordRequestForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
submit = SubmitField('Request Password Reset')
以下是相应的HTML模板
文件:/app/templates/reset_password_request.html
{% extends "base.html" %}
{% block content %}
<h1>Reset Password</h1>
<form action="" method="post"&g