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