当前位置:   article > 正文

使用Python3通过Flask-Mail模块实现异步邮件发送及验证激活_python 邮件确认链接

python 邮件确认链接

邮箱基础知识

Flask-Mail官方文档

如何判断用户输入的邮箱格式是否正确?

通过正则表达式判断邮箱格式是否正确,转义字符,用户名@服务器域名,用户名只能以数字或字母开头和结尾。

  1. regexp = '^[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]{2,4}){1,}$'
  2. pat = re.compile(regexp)
  3. isok = pat.match(reg_mail)

Python里正则表达式需转换为模式对象,使用re模块的compile()方法。


邮件发送实现

使用Flask-Mail发送邮件

Python学习之Flask-Mail异步邮件发送

主要有邮箱的配置(包括服务器、端口、使用的TLS或SSL加密、用户名、授权码等),异步函数里的app.app_context()获取当前应用的上下文,邮件发送函数send()的实现,多线程的使用。

  1. # 异步发送邮件
  2. def send_async_email(app, msg):
  3. with app.app_context():
  4. mail.send(msg)
  5. # 视图函数名称不能设置为mail,否则会报错
  6. def send_mail(to, subject, template, **kwargs):
  7. # 创建信息实例,recipients是个列表,包含所有收件人,Hello是邮箱的主题
  8. msg = Message(subject, recipients=[to])
  9. # 邮件发送给目标,可以有文本,两种方式呈现,你能看见怎样的取决于你的客户端
  10. # msg.body = render_template(template + '.txt', **kwargs)
  11. msg.html = render_template(template + '.html', **kwargs)
  12. # 使用多线程,在实际开发中,若是不使用异步、多线程等方式,网页会卡住
  13. thr = Thread(target=send_async_email, args=[app, msg])
  14. thr.start()
  15. return thr

验证激活实现

使用Flask实现邮箱验证激活和用户管理功能

flask注册之后邮箱确认功能的实现

1、添加用户类的相关字;

2、用户类里添加生成账户激活的token(标识)和验证账户激活的token两个方法;

  1. def generate_activate_token(self, expiration=3600):
  2. # 这个函数需要两个参数,一个密匙,从配置文件获取,一个时间,这里1小时
  3. s = Serializer(current_app.config['SECRET_KEY'], expiration)
  4. # 为ID生成一个加密签名,然后再对数据和签名进行序列化,生成令牌版字符串(就是一长串乱七八糟的东西),然后返回
  5. return s.dumps({'id': self.id})
  6. # 账户激活(静态方法),所有用户共用此方法?
  7. @staticmethod
  8. def check_activate_token(token):
  9. # 传入和刚才一样的密匙,解码要用
  10. s = Serializer(current_app.config['SECRET_KEY'])
  11. try:
  12. data = s.loads(token) # 解码
  13. except:
  14. return False
  15. u = User.query.get(data['id'])
  16. if not u:
  17. # 用户已被删除
  18. return False
  19. if not u.status:
  20. u.status = True
  21. db.session.add(u)
  22. db.session.commit()
  23. return True

3、视图模块里注册函数调用token生成函数以及发送邮件;

4、视图模块里调用token验证函数实现激活判断函数,通过装饰器链接url并由email.html文件调用。

  1. @app.route('/activate/<token>/')
  2. def activate(token):
  3. if User.check_activate_token(token):
  4. flash('激活成功')
  5. return redirect('/regloginpage/')
  6. else:
  7. flash('激活失败')
  8. return redirect('/')
 <p>请点击右边的激活按钮激活你的账号:<a href="{{ url_for('activate', token=token, _external=True) }}">激活</a></p>

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/857209
推荐阅读
相关标签
  

闽ICP备14008679号