Python使用smtplib模块实现邮件验证码功能

下载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': "注册成功"})
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙域、白泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值