「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」。
在 Spring Boot 项目开发中,或多或少会接触到邮件发送这个功能,若要在 Spring 项目中实现发送邮件,需要封装较为复杂的消息体,但在 Spring Boot 项目中仅需导入第三方依赖以及配置即可完成。
本文以 163 邮箱为例演示邮件发送功能的实现,其他邮箱的配置大同小异。
1. 获取邮箱的授权码
常用的邮件传输协议有 POP3
、SMTP
、IMAP
,这里选择 SMTP
协议进行演示。
首先我们登录自己的邮箱,在设置中找到协议地址:
然后点击开启服务,获得授权码(授权码仅显示一次,务必保管好):
如下是网易邮箱对应的三种协议主机地址:
2. 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3. 配置邮箱信息
⭐注意:如下 password
指向的是刚刚保存的授权码,而非个人邮箱密码。
spring:
mail:
default-encoding: utf-8
# 主机地址
host: smtp.163.com
# 邮箱名
username: xxx@163.com
# 授权码 (非邮箱密码)
password: xxxxxxxxxxxxxxx
4. 发送邮件
4.1 纯文本邮件
如下封装了 SimpleMailMessage
消息内容,注入 JavaMailSender
并调用其 send()
以完成邮件发送功能。其中收件人和抄送人可支持多个同时发送,多个地址间使用 ,
拼接即可:
@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
接口进行发送:
@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()
方法:
@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()
实现发送图片:
@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 环境中快速实现了邮件发送功能,是不是比想象中的还要简单且迅速?!
希望本文对你有所帮助🧠
欢迎在评论区留下你的看法🌊,我们一起讨论与分享🔥