SpringBoot配置邮件发送

获取QQ邮箱授权码

进入到QQ邮箱官网,依次点击设置 -> 账号 -> POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 -> 管理服务 -> 生成授权码

image-20240226170722057

image-20240226170904653

按照提示生成授权码,并复制好授权码

配置

Maven坐标

pom.xmldependencies标签下添加以下坐标:

1
2
3
4
<dependency><!--发送邮件-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置文件

在配置文件application.yml中添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
spring:
# 邮件发送配置
mail:
host: smtp.qq.com # QQ邮件服务器的SMTP地址
port: 465 # 邮件服务器的SMTP端口,465端口通常用于SSL加密的SMTP服务
username: xxxxxxxxxqq.com # 用于发送邮件的邮箱账户用户名
password: xxxxxxxxxxxxx # 申请的16位授权码
properties:
mail.smtp.auth: true # 是否需要SMTP验证,通常设置为true
mail.smtp.starttls.enable: true # 是否启用TLS加密,通常设置为true以提高安全性
mail.smtp.socketFactory.port: 465 # 用于创建SSL套接字的端口,通常与SMTP端口相同
mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory # 用于创建SSL套接字的工厂类
default-encoding: UTF-8 # 邮件内容的默认编码,这里设置为UTF-8以支持中文等非ASCII字符

服务类

服务接口

1
2
3
4
5
6
7
8
9
10
11
12
import org.springframework.stereotype.Service;

@Service
public interface EmailService {
/**
* 发送邮件
* @param to 发送给谁
* @param subject 标题
* @param body 内容
*/
void sendMail(String to, String subject, String body);
}

接口实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailServiceImpl implements EmailService {
@Value("${spring.mail.username}")
private String username;

@Autowired
private JavaMailSender javaMailSender;

public void sendMail(String to, String subject, String body) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(username);
message.setTo(to);
message.setSubject(subject);
message.setText(body);

javaMailSender.send(message);
}
}

测试

编写以下测试代码并运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class EmailServiceImplTest {
@Autowired
private EmailService emailService;

@Test
void sendMail() {
emailService.sendMail("收件人邮箱@example.com", "测试邮件", "你好啊,这是一封测试邮件");
}
}

image-20240226181238365

参考文章

Java实现邮件发送 超详细!!!(以QQ邮箱个人版和企业版为例)