下载smtplib
pip install smtplib
获取授权码(本人使用qq邮箱)
qq邮箱-->设置-->账户
开启 IMAP/SMTP服务 并且 生成授权码
代码思路
用户进入注册界面,会针对这个界面生成一个随机的uuid,发送验证码时把这个uuid作为key,六位数字的验证码作为value存入Redis中,当发送注册请求时,再次发送uuid,我们再根据uuid去Redis查询对应value,如果value为None,说明key无效(验证码过期),如果value与code不同,说明验证码输入错误
代码实现
发送邮件
import smtplib
import re
from email.mime.text import MIMEText
from email.utils import formataddr
MY_USER = '你的邮箱账号'
MY_PWD = '你的授权码'
# 生成随机数的方法
def randon_code(num):
code = ''
for i in range(num):
code = code + str(randint(0, 9))
return code
# 发送邮件
@admin.route('/sendemail/<path:email>/<path:uuid>', methods=['GET'])
def send_email(email, uuid):
# 生成六位数的随机验证码
code = randon_code(6)
# 验证码存入redis
redis_conn.set(uuid, str(code))
# 设置有效期
redis_conn.expire(uuid,180)
# 邮件正文
message = '尊敬的用户您好! 感谢您使用流坑。 尊敬的: ' + email + ', 您的校验验证码为: ' + code + ',有效期2分钟,请不要把验证码信息泄露给其他人, 如非本人请勿操作'
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = formataddr(["数字流坑后统端管理系", MY_USER])
msg['To'] = formataddr(["FK", email])
msg['Subject'] = "数字流坑后端管理系统"
try:
# 获取邮件服务对象
server = smtplib.SMTP_SSL("smtp.qq.com", 465)
# 登录
server.login(MY_USER, MY_PWD)
# 指定发送人和接收人
server.sendmail(MY_USER, [email, ], msg.as_string())
server.quit()
except:
return jsonify({"code": 400, "msg": "验证码发失败"})
return jsonify({"code": 200, "msg": "验证码发送成功"})
验证邮箱验证码
# 注册用户
@admin.route('/register', methods=['POST', 'GET'])
def register():
# 获取请求参数
name = request.json.get('name')
password = request.json.get('pwd')
email = request.json.get('email')
uuid = request.json.get('uuid')
code = request.json.get('code')
if not all([name, password, email, code, uuid]):
return jsonify({'code': 0, 'msg': "参数不完整"})
# 创建管理员对象
cursor = tiDB_conn.cursor()
sql = "insert into admin(name, password, email) values ('{}','{}','{}')".format(name,password,email)
try:
# 执行insert语句
cursor.execute(sql)
tiDB_conn.commit()
except Exception as e:
# 发生异常回滚
current_app.logger.debug(e)
tiDB_conn.rollback()
return jsonify({'code': 0, 'msg': "注册失败"})
# 6.响应结果
return jsonify({'code': 200, 'msg': "注册成功"})