Spring整合邮箱验证码发送业务

Spring整合邮箱验证码发送业务

简介

  • 邮件发送的基本过程与概念
    • 邮件服务器 :类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中
    • 电子邮箱 :用户在邮件服务器上申请的一个账户
      • from:xxx@xx.com  ----发件人
      • to:xxx@xx.com   ----收件人
      • subject:hello     ----主题
      • body: 欢迎使用**邮箱发送服务 -----内容体
  • 邮件传输协议
    • SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则
    • POP3协议:全称为 Post Office Protocol,邮局协议。它定义了邮件客户端软件和POP3邮件服务器的通信 规则
    • IMAP协议:全称为 Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议一种扩展,也是定义了邮件客户端软件和IMAP邮件服务器的通信规则

业务逻辑

  • 邮箱接口的封装

邮箱发送会被抽象成为一个接口,或者说是验证码发送接口。

该接口允许任意形式发送验证码,包括邮箱发送和手机发送。

对于邮箱发送而言

  • 1.验证是否为邮箱

使用正则表达式验证

  • 2.发送

    • 验证码防止重复发送业务逻辑

      验证码有两个时间,一个是自身验证的有效时间,一个是防止被重复发送验证码的间隔时间。前面推荐15min过期时间,后面推荐1min过期时间

      防止邮箱重复发送验证码解决方案:

    • 1.在前端进行重复验证码校验

      优点:简单

      缺点:容易被其它人绕过前端,直接访问接口

    • 2.用redis单独记录验证码发送信息

      优点:相对简单

      缺点:发送验证码和记录验证码发送信息不是原子操作,存在事务问题。两条记录消耗redis内存空间。

      可以用消息队列进行可靠性投递解决,也可以使用事务解决(但太重量级了)

    • 3.在value中嵌入时间戳

      较为简单,但对业务有一定的侵入。

准备工作

账号准备和配置

使用

  • 引入maven依赖
 <!--发送邮件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
  • 配置文件
* 配置文件

```
#邮箱服务配置  
  mail:
      host: smtp.126.com #发送邮件服务器
      username: ******@126.com #发送邮件的邮箱地址
      password: **自己授权码** #客户端授权码,不是邮箱密码,网易的是自己设置的
      from: ******@126.com # 发送邮件的地址,和上面username一致

      properties.mail.smtp.starttls.enable: true
      properties.mail.smtp.starttls.required: true
      properties.mail.smtp.ssl.enable: true
      default-encoding: utf-8
```


  • 封装发送邮件接口
@Service
@Slf4j
public class MailServiceImpl implements MailService {

    /**
     * Spring Boot 提供了一个发送邮件的简单抽象,直接注入即可使用
     */
    @Autowired
    private JavaMailSender mailSender;

    /**
     * 配置文件中的发送邮箱
     */
    @Value("${spring.mail.from}")
    private String from;
    
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        //创建SimpleMailMessage对象
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件发送人
        message.setFrom(from);
        //邮件接收人
        message.setTo(to);
        //邮件主题
        message.setSubject(subject);
        //邮件内容
        message.setText(content);
        //发送邮件
        mailSender.send(message);
        log.info("邮件发成功:{}",message.toString());
    }


}

Spring整合邮箱验证码发送业务

上一篇:js 整数排序


下一篇:数据类型补充、包机制、JavaDoc以及交互