
Spring Boot3(三):整合mail
2024/8/23大约 4 分钟
本篇文章主要介绍如何在springboot3中整合mail,列举几个发送邮件的功能。
整合mail
工程代码
引入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>配置文件
邮件配置:
spring:
mail:
# 你的邮箱,发邮件的邮箱
username: 123456789@163.com
# 你的授权码,邮箱里面设置->POP3/SMTP/IMAP
password: -----------------
host: smtp.163.com
# Logger Config
logging:
level:
com.hexadecimal: debug1.uername填写你的发件人邮箱。 2.password设置你的邮箱授权码,路径:设置->POP3/SMTP/IMAP。 3.host填写邮件服务器配置,每个邮箱品牌的配置都不一样,在邮箱设置中可以找到。 4.配置项目的日志级别为debug。
创建邮件模板
在resources/templates目录下创建邮件模板文件mail_template.ftl,内容如下:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="email code">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div style="background-color:#ECECEC; padding: 35px;">
<table>
<tbody>
<tr>
<td style="word-break:break-all">
<div style="width:100%;margin:0 auto;">
<div>
<p>测试模板邮件</p>
<p>{0}</p>
<p>{1}</p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>创建工具类MailUtil
@Component
@Slf4j
public class MailUtil {
@Value(value = "${spring.mail.username}")
private String from;
@Autowired
private JavaMailSender mailSender;
public void sendSampleMail(String to, String subject, String context) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(context);
mailSender.send(message);
}
public void sendAttachmentMail(String to, String subject, String context, String attachmentName, String filePath) throws Exception {
//创建一个复杂的消息邮件
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(context);
//上传文件
helper.addAttachment(attachmentName, new File(filePath));
mailSender.send(mimeMessage);
}
public void sendTemplateMail(String to, String subject, String templatePath, String... arguments) throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(this.buildTemplateContext(templatePath, arguments), true);
mailSender.send(mimeMessage);
}
private String buildTemplateContext(String templatePath, String... arguments) {
//加载邮件html模板
Resource resource = new ClassPathResource(templatePath);
InputStream inputStream = null;
BufferedReader fileReader = null;
StringBuffer buffer = new StringBuffer();
String line = "";
try {
inputStream = resource.getInputStream();
fileReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
while ((line = fileReader.readLine()) != null) {
buffer.append(line);
}
} catch (Exception e) {
log.info("读取模板失败:", e);
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//替换html模板中的参数
return MessageFormat.format(buffer.toString(), arguments);
}1.sendSampleMail方法实现简单发送邮件。 2.sendAttachmentMail方法实现带附件发送邮件。 3.sendTemplateMail方法实现按模板发送邮件。
创建单元测试类MailUtilTest
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailUtilTest {
@Resource
private MailUtil mailUtil;
/**
* 测试简单邮件发送
*/
@Test
public void testSendSampleMail() {
mailUtil.sendSampleMail("676981627@qq.com", "测试发送简单邮件", "hello world.");
System.out.println("******执行发送简单邮件成功******");
}
/**
* 测试带附件邮件发送
*/
@Test
public void testSendAttachmentMail() throws Exception {
mailUtil.sendAttachmentMail("676981627@qq.com", "测试发送附件邮件", "hello world.", "preview.jpg", "/Users/jed/preview-test.jpg");
System.out.println("******执行发送附件邮件成功******");
}
/**
* 测试模板邮件发送
*/
@Test
public void testSendTemplateMail() throws Exception {
mailUtil.sendTemplateMail("676981627@qq.com", "测试发送模板邮件", "templates/mail_template.ftl", "展示效果1", "展示效果2");
System.out.println("******执行发送模板邮件成功******");
}
}总结
本文主要介绍了springboot3如何整合邮件mail,举例展示了它的一些发送邮件的功能,更多功能实现可自行参考spring官网。