今天写项目的时候用到了邮件发送,顺便在这里总结一下实现方式,本文演示的是使用Spring Boot的JavaMailSender实现邮件发送,功能的实现非常简单。
一、准备工作
1. 引入发送邮件依赖(pom.xml)
邮件功能由 Spring 官方提供的 spring-boot-starter-mail 起步依赖实现。在 pom.xml 的 <dependencies> 中加入:
<!-- spring官方提供的JavaMailSender发送邮件依赖(spring-boot-starter-mail)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
版本号不用写,由 spring-boot-starter-parent 统一管理。导入后项目就能自动装配 JavaMailSender。
2. 获取邮箱授权码
用SMTP发邮件不能直接用邮箱登录密码,而要用邮箱服务的授权码(独立密码)。以 QQ 邮箱为例:
- 登录 QQ 邮箱网页版 →设置→账户;
- 找到POP3/IMAP/SMTP服务→ 开启SMTP 服务;
- 开启时会要求生成一个授权码(16 位字符串),这就是下面 yml 里
password要填的值。
3. 配置邮箱信息(application.yml)
在 spring 节点下新增 mail 配置块:
spring:
mail:
host: smtp.qq.com
port: 465
username: 你的QQ邮箱@qq.com
password: 你的邮箱授权码
default-encoding: UTF-8
properties:
mail:
smtp:
auth: true
ssl:
enable: true
二、发送邮件DEMO
可以在测试类里编写Demo来演示发送邮件功能,这里分别演示纯文本邮件和HTML/附件邮件。
1. 注入与纯文本邮件(SimpleMailMessage)
@SpringBootTest
class DemoApplicationTests {
// 自动注入Spring容器中由 spring-boot-starter-mail 自动装配好的 JavaMailSender
@Autowired
private JavaMailSender mailSender;
/**
* DEMO1:发送一封最简单的纯文本邮件
* SimpleMailMessage:Spring 提供的简单邮件对象,只能发纯文本,不能带附件/HTML
*/
@Test
void sendSimpleMail() {
// 1.创建一封简单的邮件消息对象(new一个空对象)
SimpleMailMessage message = new SimpleMailMessage();
// 2.设置发件人(要和 yml 里配置的 username 一致)
message.setFrom("你的QQ邮箱@qq.com");
// 3.设置收件人(可以写多个,逗号隔开)
message.setTo("收件人邮箱@xx.com");
// 4.设置邮件主题
message.setSubject("这是一封测试邮件");
// 5.设置邮件正文(纯文本)
message.setText("你好,这是使用 Spring Boot JavaMailSender 发送的第一封邮件!");
// 6.调用 send 方法真正发出
mailSender.send(message);
// 注意:测试方法跑完如果没抛异常,就说明发送成功
}
}
2. HTML 带附件邮件(MimeMessageHelper)
SimpleMailMessage 能力有限,只能纯文本、不能带附件和 HTML。要发富文本邮件,改用 MimeMessage + MimeMessageHelper:
/**
* DEMO2:发送支持附件、内联图片的复杂邮件
* MimeMessageHelper:底层 mail 对象,可发 HTML、带附件
*/
@Test
void sendMimeMail() throws MessagingException {
// 1.创建底层 MimeMessage(封装真正的SMTP报文)
MimeMessage mimeMessage = mailSender.createMimeMessage();
// 2.用 MimeMessageHelper 来填充内容,true 表示允许携带附件/多部分
// 这里不指定编码,会读取 yml 里配置的 default-encoding: UTF-8
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
// 3.分别设置发件人、收件人、主题
helper.setFrom("你的QQ邮箱@qq.com");
helper.setTo("收件人邮箱@xx.com");
helper.setSubject("带附件的测试邮件");
// 4.支持 HTML 正文(第二个参数传 true 表示按HTML解析)
helper.setText("<h1>你好</h1><p style='color:red'>这是一封 <b>HTML</b> 邮件</p>", true);
// 5.添加附件(传入本地文件路径,第二个参数是邮件里显示的文件名)
helper.addAttachment("demo.txt", new java.io.File("D:\\Desktop\\demo.txt"));
// 6.真正发送
mailSender.send(mimeMessage);
}
自行总结整理,如有错误欢迎留言讨论。
THE END

暂无评论内容