邮箱基础知识
Flask-Mail官方文档,
如何判断用户输入的邮箱格式是否正确?:
通过正则表达式判断邮箱格式是否正确,转义字符,用户名@服务器域名,用户名只能以数字或字母开头和结尾。
regexp = '^[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]{2,4}){1,}$'
pat = re.compile(regexp)
isok = pat.match(reg_mail)
Python里正则表达式需转换为模式对象,使用re模块的compile()方法。
邮件发送实现
使用Flask-Mail发送邮件,
Python学习之Flask-Mail异步邮件发送:
主要有邮箱的配置(包括服务器、端口、使用的TLS或SSL加密、用户名、授权码等),异步函数里的app.app_context()获取当前应用的上下文,邮件发送函数send()的实现,多线程的使用。
# 异步发送邮件
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
# 视图函数名称不能设置为mail,否则会报错
def send_mail(to, subject, template, **kwargs):
# 创建信息实例,recipients是个列表,包含所有收件人,Hello是邮箱的主题
msg = Message(subject, recipients=[to])
# 邮件发送给目标,可以有文本,两种方式呈现,你能看见怎样的取决于你的客户端
# msg.body = render_template(template + '.txt', **kwargs)
msg.html = render_template(template + '.html', **kwargs)
# 使用多线程,在实际开发中,若是不使用异步、多线程等方式,网页会卡住
thr = Thread(target=send_async_email, args=[app, msg])
thr.start()
return thr
验证激活实现
使用Flask实现邮箱验证激活和用户管理功能,
flask注册之后邮箱确认功能的实现:
1、添加用户类的相关字;
2、用户类里添加生成账户激活的token(标识)和验证账户激活的token两个方法;
def generate_activate_token(self, expiration=3600):
# 这个函数需要两个参数,一个密匙,从配置文件获取,一个时间,这里1小时
s = Serializer(current_app.config['SECRET_KEY'], expiration)
# 为ID生成一个加密签名,然后再对数据和签名进行序列化,生成令牌版字符串(就是一长串乱七八糟的东西),然后返回
return s.dumps({'id': self.id})
# 账户激活(静态方法),所有用户共用此方法?
@staticmethod
def check_activate_token(token):
# 传入和刚才一样的密匙,解码要用
s = Serializer(current_app.config['SECRET_KEY'])
try:
data = s.loads(token) # 解码
except:
return False
u = User.query.get(data['id'])
if not u:
# 用户已被删除
return False
if not u.status:
u.status = True
db.session.add(u)
db.session.commit()
return True
3、视图模块里注册函数调用token生成函数以及发送邮件;
4、视图模块里调用token验证函数实现激活判断函数,通过装饰器链接url并由email.html文件调用。
@app.route('/activate/<token>/')
def activate(token):
if User.check_activate_token(token):
flash('激活成功')
return redirect('/regloginpage/')
else:
flash('激活失败')
return redirect('/')
<p>请点击右边的激活按钮激活你的账号:<a href="{{ url_for('activate', token=token, _external=True) }}">激活</a></p>
|