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发送的邮件。
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");
}