SpringBoot邮箱

  • Maven依赖

    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
  • 项目配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    spring:
    # 邮箱验证配置信息|必填
    mail:
    host: smtp.qq.com # 如果你需要使用非qq邮箱,请自行配置host
    username: # 请自行配置邮箱地址
    password: # 请自行配置邮箱smtp授权码,参考邮箱配置
    port: 587
    default-encoding: UTF-8
    timeout: 10 # 验证码有效时间 单位:分钟
    properties:
    mail:
    smtp:
    socketFactoryClass: javax.net.ssl.SSLSocketFactory
    # 开启debug以后,邮件发送过程的日志会在控制台上打印出来
    debug: true
  • 邮箱配置
    该邮箱作为发送验证码的用途,在这里我建议使用QQ邮箱,因为QQ邮箱的SMTP服务是免费的,而且不需要进行额外的配置。SMTP服务的配置信息可以在QQ邮箱的设置中找到,登陆你的QQ邮箱,点击左上角的设置按钮,选择设置,选择账户,找到开启POP3/SMTP服务,经过一系列的确认后,你将获得一个授权码,这个授权码就是你的邮箱密码password,你可以在application.yml中的邮箱配置信息中配置它。

  • 发送信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    /**
    * 邮箱发送器
    */
    @Resource
    private JavaMailSender javaMailSender;

    /**
    * 发送验证码的邮箱地址
    */
    @Value("${spring.mail.username}")
    private String FROM;

    /**
    * 失效时间
    */
    @Value("${spring.mail.timeout}")
    private int TIME_OUT_MINUTES;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // 发送邮件
    // 构建一个邮件对象
    SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
    // 设置邮件发送者
    simpleMailMessage.setFrom(FROM);
    // 设置邮件接收者
    simpleMailMessage.setTo(email);
    // 设置邮件主题
    simpleMailMessage.setSubject("[xx系统]登陆验证码");
    // 设置邮件内容
    simpleMailMessage.setText("您的验证码为:" + code + ",请在" + TIME_OUT_MINUTES + "分钟内使用!\n【该邮件为系统自动发送,请勿回复】");
    // 将验证码存入redis,设置失效时间TIME_OUT_MINUTES分钟
    redisTemplate.opsForValue().set(email, code, TIME_OUT_MINUTES, java.util.concurrent.TimeUnit.MINUTES);
    // 发送邮件
    try {
    javaMailSender.send(simpleMailMessage);
    } catch (MailException e) {
    e.printStackTrace();
    throw new CustomException("致命错误!");
    }
  • 登录

    1. 用户输入邮箱号,点击获取验证码。
    2. 后端controller层获取邮箱号。
    3. 后端检查Redis是否存在该邮箱的验证码,如果存在则提示用户“请勿重复获取验证码”
    4. 生成6位随机数(密码),设置过期时间,存入Redis。
    5. 调用service层方法去发送邮件携带验证码给该邮箱。
    6. 用户收到邮件,输入验证码。
    7. 后端获取验证码,与Redis中的密码进行对比。
    8. 对比成功进入系统主界面,失败提示用户“验证码错误,请重新输入验证码”。