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");
}
