spring boot 实现发送邮箱验证码

首先设置一下发件人邮箱,以QQ邮箱为例:
在这里插入图片描述
找到帐户,开启POP3/SMTP服务
spring boot 实现发送邮箱验证码_第1张图片
然后会提醒你怎么去实现,验证完后,会给你一个授权码,记住这个授权码,后端spring boot 会用到

下面回到IDEA,写代码实现发送验证码。
1.引入依赖:

<!-- 邮箱验证码依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2.配置配置文件yml

#邮箱验证码配置
  mail:
    #smtp服务主机  qq邮箱则为smtp.qq.com;163邮箱是smtp.163.com
    host: smtp.qq.com
    #服务协议
    protocol: smtp
    # 编码集
    default-encoding: UTF-8
    #发送邮件的账户
    username: xxxxxx@xx.com
    #授权码
    password: xxxxxxxxxxx
    test-connection: true
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

注意:要放在spring下;host一定要引入;密码就是你的授权码

3.创建一个发送邮箱验证码实体类ToEmail:

import java.io.Serializable;

/**
 * TODO 邮箱验证码实体类
 *
 * @author DB
 * 
CreateDate 2021/9/13 0:33 */
@Data @AllArgsConstructor @NoArgsConstructor public class ToEmail implements Serializable { // 邮件接收方 private String[] tos; // 邮件主题 private String subject; // 邮件内容 private String content; }

4.创建一个生成 6 位随机码的工具类VerCodeGenerateUtil:

/**
 * TODO
 *
 * @author DB
 * 
CreateDate 2021/9/13 2:07 */
import java.security.SecureRandom; import java.util.Random; /** * @Classname VerCodeGenerateUtil * @Description 生成验证码工具类 * @Date 2021/9/7 14:23 * @Created by DB */ public class VerCodeGenerateUtil { //验证码包含的字段,可自己设置 private static final String SYMBOLS = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"; private static final Random RANDOM = new SecureRandom(); // 生成 6 位数的随机数字 public static String generateVerCode() { // 如果是六位,就生成大小为 6 的数组 char[] numbers = new char[6]; for (int i = 0; i < numbers.length; i++) { numbers[i] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length())); } return new String(numbers); } }

5.写到EmailController测试一下:

import com.qcby.db.common.contest.QcbyContext;
import com.qcby.db.common.web.ResultJson;
import com.qcby.db.entity.ToEmail;
import com.qcby.db.entity.User;
import com.qcby.db.service.LoginService;
import com.qcby.db.util.VerCodeGenerateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;


/**
 * TODO 邮箱验证码
 *
 * @author DB
 * 
CreateDate 2021/9/13 0:35 */
@RestController @RequestMapping("email") public class EmailController { // 引入邮件接口 @Autowired private JavaMailSender mailSender; @Autowired private LoginService loginService; // 获得发件人信息 @Value("${spring.mail.username}") private String from; @RequestMapping("sendEmail") public ResultJson commonEmail(ToEmail toEmail, HttpServletRequest request) { // 创建邮件消息 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(from); message.setTo(toEmail.getTos()); message.setSubject("您本次的验证码是"); String verCode = VerCodeGenerateUtil.generateVerCode(); message.setText("尊敬的xxx,您好:\n" + "\n本次请求的邮件验证码为:" + verCode + ",本验证码 5 分钟内效,请及时输入。(请勿泄露此验证码)\n" + "\n如非本人操作,请忽略该邮件。\n(这是一封通过自动发送的邮件,请不要直接回复)"); mailSender.send(message); User user = QcbyContext.getUser(request.getHeader("token")); user.setVerCode(verCode); return ResultJson.ok("发送成功"); } }

6.使用Postman测试一下:
spring boot 实现发送邮箱验证码_第2张图片
spring boot 实现发送邮箱验证码_第3张图片
实现!!!
参考:SpringBoot 整合 Email 实现发送验证码–努力努力再努力——thx

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