SpringBoot 2.x 集成QQ邮箱发送邮件
邮件发送的基本过程与概念 (摘自小滴课堂大课)
邮件服务器
类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中
电子邮箱 :用户在邮件服务器上申请的一个账户
* from:[xxx@xx.com](mailto:xxx@xx.com) ----发件人
* to:[xxx@xx.com](mailto:xxx@xx.com) ----收件人
* subject:hello ----主题
* body: 欢迎来到小滴课堂 -----内容体
邮件传输协议
SMTP协议
全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则
POP3协议
全称为 Post Office Protocol,邮局协议。它定义了邮件客户端软件和POP3邮件服务器的通信 规则
IMAP协议
全称为 Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议一种扩展,也是定义了邮件客户端软件和IMAP邮件服务器的通信规则
集成流程
配置邮箱服务器(发送端使用QQ邮箱)
QQ邮箱地址 https://mail.qq.com
开启POP3/SMTP服务
开启后,保存客户端授权码,后面配置文件需要用到
配置项目依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
新增项目配置
# 邮箱配置
mail:
host: smtp.qq.com #发送邮件服务器
username: 123456@qq.com #QQ邮箱
password: xxxxxxxxxxxxxxxx #客户端授权码
protocol: smtp #发送邮件协议
properties.mail.smtp.auth: true
properties.mail.smtp.port: 465 #端口号465或587
properties.mail.display.sendmail: Javen #可以任意
properties.mail.display.sendname: Spring Boot Guide Email #可以任意
properties.mail.smtp.starttls.enable: true
properties.mail.smtp.starttls.required: true
properties.mail.smtp.ssl.enable: true
default-encoding: utf-8
from: 123456@qq.com #与上面的username保持一致
用户微服务 service封装
service
public interface MailService {
/**
* 发送邮件
* @param to
* @param subject
* @param content
*/
void sendMail(String to, String subject, String content);
}
serviceImpl
@Service
@Slf4j
public class MailServiceImpl implements MailService {
/*
* springboot 提供的一个发送邮件的简单抽象, 直接注入即可
*/
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.from}")
private String from;
/**
* 发送邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
@Override
public void sendMail(String to, String subject, String content) {
// 创建一个邮箱消息对象
SimpleMailMessage message = new SimpleMailMessage();
// 配置邮件发送人
message.setFrom(from);
// 邮件的收件人
message.setTo(to);
// 邮件的主题
message.setSubject(subject);
// 邮件的内容
message.setText(content);
// 发送邮件
mailSender.send(message);
log.info("邮件发送成功:{}", message.toString());
}
}
单元测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = UserApplication.class)
@Slf4j
public class MailTest {
@Autowired
private MailService mailService;
@Test
public void testSendMail(){
mailService.sendMail("123456@qq.com", "邮件发送测试", "testtesttest123");
}
}
吾生也有涯,而知也无涯。