Spring Boot(十):集成邮件发送功能

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」。

在 Spring Boot 项目开发中,或多或少会接触到邮件发送这个功能,若要在 Spring 项目中实现发送邮件,需要封装较为复杂的消息体,但在 Spring Boot 项目中仅需导入第三方依赖以及配置即可完成。

本文以 163 邮箱为例演示邮件发送功能的实现,其他邮箱的配置大同小异。

  1. 获取邮箱的授权码

常用的邮件传输协议有 POP3SMTPIMAP,这里选择 SMTP 协议进行演示。

首先我们登录自己的邮箱,在设置中找到协议地址:

然后点击开启服务,获得授权码(授权码仅显示一次,务必保管好):

如下是网易邮箱对应的三种协议主机地址:

  1. 引入依赖

1
2
3
4
xml复制代码<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
  1. 配置邮箱信息

⭐注意:如下 password 指向的是刚刚保存的授权码,而非个人邮箱密码。

1
2
3
4
5
6
7
8
9
yaml复制代码spring:
mail:
default-encoding: utf-8
# 主机地址
host: smtp.163.com
# 邮箱名
username: xxx@163.com
# 授权码 (非邮箱密码)
password: xxxxxxxxxxxxxxx
  1. 发送邮件

4.1 纯文本邮件

如下封装了 SimpleMailMessage 消息内容,注入 JavaMailSender 并调用其 send() 以完成邮件发送功能。其中收件人和抄送人可支持多个同时发送,多个地址间使用 , 拼接即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
java复制代码@RestController
public class EmailController {

@Autowired
private JavaMailSender javaMailSender;

@RequestMapping("/sendMail")
public void send() {
SimpleMailMessage message = new SimpleMailMessage();
// 发件人
message.setFrom("xxx@163.com");
// 收件人(可实现批量发送)
message.setTo("xxx1@qq.com", "xxx2@qq.com");
// 邮箱标题
message.setSubject("Java发送邮箱Demo");
// 邮箱内容
message.setText("测试 Spring Boot 集成邮箱发送功能的!");
// 抄送人
message.setCc("xxx?@163.com");
// 发送邮件
javaMailSender.send(message);
}
}

4.2 HTML 格式邮件⭐

与发送纯文本不同的是,发送 HTML 格式需要创建一个 MIME 消息,并将其注入到 MimeMessageHelper 对象中,但仍是以 JavaMailSender 接口进行发送:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
java复制代码@RestController
public class EmailController {

@RequestMapping("/sendHtmlMail")
public void sendHtmlMsg() throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper mimeHelper = new MimeMessageHelper(message, true);
// 发件人
mimeHelper.setFrom("xxx@163.com");
// 收件人
mimeHelper.setTo("xxx@qq.com");
// 邮箱标题
mimeHelper.setSubject("Java发送邮箱Demo");
// 邮箱内容
mimeHelper.setText("<h2>MimeMessageHelper测试</h2>", true);

// 仍然使用 JavaMailSender 接口发送邮件
javaMailSender.send(message);
}
}

4.3 携带附件的邮件⭐

相对于发送 HTML 仅多增加了 addAttachment() 方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
java复制代码@RestController
public class EmailController {

@Autowired
private JavaMailSender javaMailSender;

@RequestMapping("/addAttachment")
public void sendMailWithAttachment() throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper mimeWithAttachment = new MimeMessageHelper(message, true);
// 发件人
mimeWithAttachment.setFrom("w577159462@163.com");
// 收件人
mimeWithAttachment.setTo("577159462@qq.com");
// 邮箱标题
mimeWithAttachment.setSubject("发送邮件(带附件)");
// 邮箱内容
mimeWithAttachment.setText("添加附件..");

// 1 附件添加图片
mimeWithAttachment.addAttachment("1.jpg", new File("D:\\Temp\\_mail\\1.jpg"));
// 2. 附件添加word文档
mimeWithAttachment.addAttachment("test.docx", new File("D:\\Temp\\_mail\\test.docx"));

// 仍然使用 JavaMailSender 接口发送邮件
javaMailSender.send(message);
}
}

4.4 内嵌图片邮件

addInline() 实现发送图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
java复制代码@RestController
public class EmailController {

@Autowired
private JavaMailSender javaMailSender;

@RequestMapping("/embeddedPic")
public void mailWithEmbeddedPic() throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper embeddedPic = new MimeMessageHelper(message, true);
// 发件人
embeddedPic.setFrom("xxx@163.com");
// 收件人
embeddedPic.setTo("xxx@qq.com");
// 邮箱标题
embeddedPic.setSubject("发送邮件(内嵌图片)");
// 邮箱内容
embeddedPic.setText("发送内嵌图片..");
// 添加内嵌图片
embeddedPic.addInline("img1.jpg", new FileSystemResource("D:\\Temp\\_mail\\1.jpg"));

// 仍然使用 JavaMailSender 接口发送邮件
javaMailSender.send(message);
}

}

至此,我们就在 Spring Boot 环境中快速实现了邮件发送功能,是不是比想象中的还要简单且迅速?!

希望本文对你有所帮助🧠

欢迎在评论区留下你的看法🌊,我们一起讨论与分享🔥

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%