邮箱验证码功能开发

该文章用于记录怎么进行邮箱验证码开发。

总所周知,我们在某些网站进行注册的适合总是会遇到什么填写邮箱,邮箱接收验证码,验证通过后才可以继续注册,那么这个功能是怎么实现的呢?

一,准备工作

1.1 邮箱设置

要进行邮箱验证码验证,首先我们得要有一个邮箱。同时我们要在邮箱里面打开对应服务,我以QQ邮箱为例:
先点击设置
在这里插入图片描述
在设置中点击账号:
在这里插入图片描述
往下滑,在这里,点击开启服务:
在这里插入图片描述
然后就是按指示进行操作,最后就好了,可以得到授权码:
在这里插入图片描述

1.2 后端环境配置:

至于数据库什么的配置那就不详细赘述了,你的后端里面要有redis,这很关键。
在对应模块的pom.xml文件里导入如下依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

然后,到application.yml配置文件中进行配置:

spring:
  mail:
    # 发送者邮箱
    username: 你的邮箱
    #申请到的授权码
    password: 你的授权码
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    # 端口号465或587
    port: 465
    protocol: smtps
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
          #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
          debug: true
          ssl: true

二,代码实现步骤

2.1 随机验证码生成工具:

CodeGeneratorUtil.java:


import java.util.UUID;

/**
 * @author Administrator
 * @date 2024/7/13 15:47
 * @description CodeGeneratorUtil
 */
public class CodeGeneratorUtil {
    /**
     * 生成指定长度的验证码
     * @param length 长度
     * @return
     */
    public static String generateCode(int length){
        return UUID.randomUUID().toString().substring(0, length);
    }
    
}

2.2 验证码发送工具:

MailMsg.java:


import lombok.Value;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.time.Duration;

/**
 * @author Administrator
 * @date 2024/7/13 15:36
 * @description MailMsg
 */
@Component
public class MailMsg {
    @Resource
    private JavaMailSenderImpl mailSender;
    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    public boolean mail(String email) throws MessagingException {

        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //生成随机验证码
        String code = CodeGeneratorUtil.generateCode(6);
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        //设置一个html邮件信息
        helper.setText("<p style='color: blue'>你的验证码为:\n" + code + "\n(有效期为五分钟)</p>", true);
        //设置邮件主题名
        helper.setSubject("验证码");
        //发给谁-》邮箱地址
        helper.setTo(email);
        //谁发的-》发送人邮箱
        helper.setFrom(你的邮箱);
        //将邮箱验证码以邮件地址为key存入redis,5分钟过期
        redisTemplate.opsForValue().set(email, code, Duration.ofMinutes(5));
        mailSender.send(mimeMessage);
        return true;
    }
}

这里就不得不提到redis的优点–过期删除策略了。在redis中,我们可以给一个字段设置过期时间,到时间就会自动删除字段,这个用来存验证码就太合适不过了。
大概是这样设置:
redisTemplate.opsForValue().set(key,value,time)
第一个参数是键,第二个参数是值,第三个参数是时间。

2.3 验证码发送接口:

在你的某个controller里面写这个就行了。

	@ApiOperation(value = "发送邮箱验证码")
    @GetMapping(value = "/sendEmail/{email}")
    public Result<Object> sendCode(@PathVariable String email) throws MessagingException {
        log.info("邮箱码:{}",email);
        //从redis中取出验证码信息
        String code = redisTemplate.opsForValue().get(email);
        if (!StringUtils.isEmpty(code)) {
            return Result.error(email + ":" + code + "已存在,还未过期");
        }
        boolean b = mailMsg.mail(email);
        if (b) {
            return Result.success(" 验证码已发送至邮箱,请注意查收!");
        }
        return Result.error("邮箱不正确或为空!");
    }

2.4 注册功能

这里就属于是抛砖引玉,大伙们还有什么更好的想法和扩展呢?

@PostMapping("/register")
    @ApiOperation("注册接口")
    public Result register(@RequestBody RegisterDTO registerDTO){
        log.info("用户注册:{}", registerDTO);
        String code = registerDTO.getCode();
        log.info("前端输入的验证码{}", code);
        String eml = registerDTO.getEmail();
        log.info("前端的对象为{},邮箱=》{}",registerDTO,eml);
        String s = redisTemplate.opsForValue().get(eml);
        log.info("从redis中获取code->{}",s);
        if (Objects.equals(s, code)) {
            log.info("验证码正确{}", code);
            userService.register(registerDTO);
            return Result.success(MessageConstant.Register_SUCCESS);
        }else{
            return Result.error("验证码错误");
        }
    }

验证码功能大概就是这样了。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 实现邮箱验证功能的步骤如下: 1. 安装Flask-Mail库 Flask-Mail是一个Flask扩展,用于发送电子邮件。您可以使用以下命令安装它: ``` pip install Flask-Mail ``` 2. 配置Flask-Mail 在Flask应用程序中,您需要配置Flask-Mail以使用您的SMTP服务器。例如,以下是一个示例配置: ``` app.config['MAIL_SERVER']='smtp.gmail.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USERNAME'] = 'your-email@gmail.com' app.config['MAIL_PASSWORD'] = 'your-email-password' app.config['MAIL_USE_TLS'] = False app.config['MAIL_USE_SSL'] = True ``` 3. 创建发送邮件的函数 您需要创建一个函数来发送包含验证码的电子邮件。以下是一个示例函数: ``` from flask_mail import Message, Mail import random mail = Mail(app) def send_email(email): code = random.randint(100000, 999999) message = Message('Your verification code', recipients=[email]) message.body = 'Your verification code is: ' + str(code) mail.send(message) return code ``` 4. 在路由中调用发送邮件的函数 在您的路由中,调用发送邮件的函数。例如: ``` @app.route('/send_email', methods=['POST']) def send_verification_code(): email = request.form.get('email') code = send_email(email) return jsonify({'code': code}) ``` 5. 在前端页面中获取验证码并验证 在您的前端页面中,向用户显示一个输入框,让他们输入他们收到的验证码。当用户点击“验证”按钮时,您可以使用JavaScript从服务器获取验证码并验证它。例如: ``` function verify_code() { var code = document.getElementById('code_input').value; var email = document.getElementById('email_input').value; fetch('/verify_code', { method: 'POST', body: JSON.stringify({'email': email, 'code': code}), headers: { 'Content-Type': 'application/json' } }).then(response => { if (response.ok) { alert('Verification successful!'); } else { alert('Verification failed!'); } }); } ``` 6. 在路由中验证验证码 在您的路由中,验证收到的验证码是否与发送的验证码匹配。例如: ``` @app.route('/verify_code', methods=['POST']) def verify_code(): email = request.json.get('email') code = request.json.get('code') if code == session.get('code'): return jsonify({'success': True}) else: return jsonify({'success': False}) ``` 注意:在这个示例中,验证码被存储在会话中,但是在实际应用程序中,您可能需要将验证码存储在数据库或其他持久存储中。 ### 回答2: Flask是一个基于Python的Web开发框架,可以方便地实现各种功能,包括邮箱验证功能。 要实现邮箱验证功能,首先需要安装Flask和相关的扩展包。可以使用pip命令来安装Flask,如下所示: ``` pip install flask ``` 接下来,需要配置Flask应用程序。在Flask应用程序的配置文件中,可以指定邮箱服务器的信息,包括SMTP服务器地址、端口号、发件人邮箱账号和密码等。例如: ``` app.config['MAIL_SERVER'] = 'smtp.example.com' app.config['MAIL_PORT'] = 587 app.config['MAIL_USERNAME'] = 'your_email@example.com' app.config['MAIL_PASSWORD'] = 'your_email_password' ``` 然后,需要编写一个视图函数来处理发送验证码的逻辑。可以使用Flask-Mail扩展包来发送邮件。首先需要导入相关的模块和类: ``` from flask_mail import Mail, Message ``` 然后可以在视图函数中调用相关的函数来发送邮件。例如: ``` @app.route('/send_verification_code', methods=['POST']) def send_verification_code(): email = request.form['email'] verification_code = generate_verification_code() mail = Mail(app) msg = Message('验证码', sender=app.config['MAIL_USERNAME'], recipients=[email]) msg.body = '您的验证码是:{}'.format(verification_code) mail.send(msg) return '验证码已发送' ``` 以上代码中的`generate_verification_code`函数用于生成随机的验证码。发送验证码的逻辑适用于POST请求,可以根据需要进行修改。 最后,在Flask应用程序中运行以下命令启动应用程序: ``` if __name__ == '__main__': app.run() ``` 这样就可以通过访问相应的URL来发送邮箱验证码了。 需要注意的是,在使用Flask实现邮箱验证功能时,需要确保邮箱服务器的配置信息正确,并且保护好发送验证码的接口,以防止恶意使用。 ### 回答3: Flask是一个轻量级的Python Web框架,可以用于快速开发Web应用。要在Flask中实现邮箱验证功能,可以按照以下步骤进行: 1. 导入相关的模块和库。在Flask中,可以使用Flask-Mail模块来发送邮件,使用random模块生成验证码,使用session来存储验证码等数据。 2. 配置邮件服务器。首先需要在Flask的配置文件中配置邮件服务器的信息,包括SMTP服务器地址、端口号、发件人邮箱地址和密码等。可以根据自己的邮件服务器来配置相应的信息。 3. 生成验证码。在用户请求发送验证码的时候,可以使用random模块生成一个6位数字的验证码,并将其存储到session中。 4. 发送邮件。使用Flask-Mail模块中的Mail对象和Message对象来发送邮件,设置邮件的发送方、接收方、主题和正文等。 5. 验证验证码。用户在输入验证码之后,可以通过比对输入的验证码和session中存储的验证码是否一致来进行校验,并给出相应的提示信息。 6. 完善前端页面。在Flask中,可以使用模板引擎来渲染前端页面,并在页面中添加所需的输入框、按钮和提示信息等元素,实现更友好的用户界面。 通过以上步骤,就可以在Flask中实现邮箱验证功能。在这个过程中,需要注意保护用户的隐私信息和验证码的安全性,避免被恶意利用。同时,还可以根据具体的需求进行功能的扩展和优化,提升用户体验和系统的安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

泉绮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值