springboot 整合邮箱发送验证码功能

邮箱发送功能方法

  • 1、pom.xml导入
  • 2、yml导入
  • 3、配置工具类
  • 4、service配置
  • 5、serviceImpl配置
  • 6、controller配置

1、pom.xml导入

 		<!-- 邮件服务 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <!-- Thymeleaf 模版,用于发送模版邮件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2、yml导入

spring:
  # 邮箱配置
  mail:
    host: smtp.qq.com  # 发送邮件的服务器地址
    username: 75685172@qq.com # 开启 IMAP/SMTP服务 的qq邮箱的账号
    password: xmwmngreijylbgch  # 开启 IMAP/SMTP服务 获得的授权码,而不是qq邮箱的登录密码
    default-encoding: UTF-8

3、配置工具类

public class ValidateCodeUtils {
    /**
     * 随机生成验证码
     * @param length 长度为4位或者6位
     * @return
     */
    public static Integer generateValidateCode(int length){
        Integer code =null;
        if(length == 4){
            code = new Random().nextInt(9999);//生成随机数,最大为9999
            if(code < 1000){
                code = code + 1000;//保证随机数为4位数字
            }
        }else if(length == 6){
            code = new Random().nextInt(999999);//生成随机数,最大为999999
            if(code < 100000){
                code = code + 100000;//保证随机数为6位数字
            }
        }else{
            throw new RuntimeException("只能生成4位或6位数字验证码");
        }
        return code;
    }

    /**
     * 随机生成指定长度字符串验证码
     * @param length 长度
     * @return
     */
    public static String generateValidateCode4String(int length){
        Random rdm = new Random();
        String hash1 = Integer.toHexString(rdm.nextInt());
        String capstr = hash1.substring(0, length);
        return capstr;
    }
}

4、service配置

    /**
     * 发送邮箱
     * @param to
     * @param subject
     * @param context
     */
    void sendMsg(String to,String subject,String context);

5、serviceImpl配置

    @Value("${spring.mail.username}")
    private String from;   // 邮件发送人

    @Autowired
    private JavaMailSender mailSender;

    @Override
    public void sendMsg(String to, String subject, String context) {
        SimpleMailMessage mailMessage = new SimpleMailMessage();

        mailMessage.setFrom(from);
        mailMessage.setTo(to);
        mailMessage.setSubject(subject);
        mailMessage.setText(context);

        // 真正的发送邮件操作
        mailSender.send(mailMessage);
    }

6、controller配置

        // 获取邮箱账号
        String mail = user.getMail();
		
		// 右键标题
        String subject = "***登录验证码";

        if (StringUtils.isNotEmpty(mail)) {
            String code = ValidateCodeUtils.generateValidateCode(4).toString();
            String context = "欢迎使用 ***,登录验证码为: " + code + ",五分钟内有效,请妥善保管!";
            log.info("code={}", code);

            // 真正地发送邮箱验证码
            userService.sendMsg(mail, subject, context);  //user为service类名,在哪个service里配置的,就导入哪个service类

			// 如果用session保存,就去掉redis的,用redis就去掉session,两种方式,用哪种看项目需求
			
            //  将随机生成的验证码保存到session中
            session.setAttribute(mail, code);

            // 验证码由保存到 缓存到Redis中,并且设置验证码的有效时间为 5分钟
            redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);  

            return R.success("验证码发送成功,请及时查看!");
        }
        return R.error("验证码发送失败,请重新输入!");

你可能感兴趣的:(spring,boot,java,spring)