SpringBoot实现邮箱发送验证码

一、邮件协议

1)SMTP协议-发送邮件

SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。

2)POP3协议-接收邮件

POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议”。是TCP/IP协议族中的一员。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

二、邮件收发过程

1)首先要准备两个邮件账户A,B,A负责发送,B负责接收。

假设A邮箱为 B邮箱为123@163.com

3)收件人用户B通过登录163邮箱的账号,连接POP3服务器,可以查看用户A发送的邮件。

邮件发送过程图如下:

三、开发过程

1)引入发送邮件的依赖

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

2)修改配置文件application.yml,这里以163邮箱为例

spring:
  mail:
    host: smtp.163.com  	#邮箱服务器地址
    username: xxx@163.com   #邮箱账号
    password: xxx			#邮箱密码
    default-encoding: utf-8	#默认编码
#邮件发件人
mail:
  fromMail:
    addr: xxx@163.com

3)编写MailService类以及其实现类

public interface MailService {
          
   
    /**
     * 发送邮件
     * @param to 邮件收件人
     * @param subject 邮件主题
     * @param verifyCode 邮件验证码
     */
    public void sendMail(String to, String subject, String verifyCode);
}

@Service
public class MailServiceImpl implements MailService {
          
   

    @Autowired
    private JavaMailSender mailSender;

    //邮件发件人
    @Value("${mail.fromMail.addr}")
    private String from;

    @Autowired
    TemplateEngine templateEngine;

    @Override
    public void sendMail(String to, String subject, String verifyCode) {
          
   
        //创建邮件正文
        Context context = new Context();
        context.setVariable("verifyCode", verifyCode);
        //将模块引擎内容解析成html字符串
        String emailContent = templateEngine.process("emailTemplate", context);
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(emailContent);
        try {
          
   
            mailSender.send(message);
            //logger.info("简单邮件已经发送。");
        } catch (Exception e) {
          
   
            //logger.error("发送简单邮件时发生异常!", e);
        }
    }

}

4)创建模板,在resources目录下创建templates文件夹,在templates文件夹下创建emailTemplate.html,邮件发送的模板页面。这里以thymeleaf为例。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
您好,本次验证的验证码为:[[${verifyCode}]]
</body>
</html>

5)测试

@Autowired
private MailService mailService;

@Test
public void sendTemplateMail() {
          
   
    //发送邮件
    mailService.sendMail("xxx@126.com","主题:这是模板邮件","123456");
}
经验分享 程序员 微信小程序 职场和发展