SpringBoot实现邮箱发送验证码

一、邮件协议

1)SMTP协议-发送邮件

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

STMP服务器则是遵循STMP协议的发送邮件服务器,用来发送或中转发送的电子邮件。默认端口号为25。

2)POP3协议-接收邮件

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

POP3服务器则是遵循POP3协议的发送邮件服务器,用来接收或中转发送的电子邮件。默认端口号为110。

二、邮件收发过程

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

假设A邮箱为 [email protected] B邮箱为[email protected]

2)用户A发送邮件给用户B,通过客户端软件登录QQ邮箱的账号,连接QQ邮箱的服务器,QQ邮箱会根据用户A发送的邮件进行解析,也就是根据收件地址判断是否是自己管辖的账户,如果收件地址也是QQ邮箱,那么会直接存放到自己的存储空间。这里我们假设收件地址不是QQ邮箱,而是163邮箱,那么QQ邮箱就会将连接163的SMTP服务器,把邮件通过SMTP服务器转发到163邮箱的SMTP服务器,转发使用的协议也是SMTP。

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

邮件发送过程图如下:
SpringBoot实现邮箱发送验证码_第1张图片

三、开发过程

1)引入发送邮件的依赖

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-mailartifactId>
        dependency>

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

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

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为例。


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

5)测试

@Autowired
private MailService mailService;

@Test
public void sendTemplateMail() {
    //发送邮件
    mailService.sendMail("[email protected]","主题:这是模板邮件","123456");
}

你可能感兴趣的:(Springboot)