springboot+JavaMailSender搭建简单的邮件发送系统
在今天的数字化时代,电子邮件依然是沟通与合作的重要工具。对于Java开发者来说,如何在应用程序中高效地发送邮件是一个常见需求。Spring框架中的JavaMailSender接口正是为此而生,它提供了一个简洁而强大的API,让我们能够轻松地在Spring应用中集成邮件发送功能。本文将带你深入了解JavaMailSender,包括其基本概念、配置方法以及实际使用案例。JavaMailSender是S
前言
在今天的数字化时代,电子邮件依然是沟通与合作的重要工具。对于Java开发者来说,如何在应用程序中高效地发送邮件是一个常见需求。Spring框架中的JavaMailSender接口正是为此而生,它提供了一个简洁而强大的API,让我们能够轻松地在Spring应用中集成邮件发送功能。本文将带你深入了解JavaMailSender,包括其基本概念、配置方法以及实际使用案例。
一、JavaMailSender简介
JavaMailSender是Spring框架提供的一个接口,用于发送电子邮件。它封装了JavaMail API的复杂性,让开发者无需直接处理底层的邮件发送逻辑。通过简单的配置和调用,你就可以实现邮件的发送,包括文本邮件、HTML邮件、带附件的邮件等。
二、配置JavaMailSender
要在Spring项目中使用JavaMailSender,首先需要在你的Spring配置文件中进行相应的设置。这通常涉及到两个步骤:添加依赖和配置邮件服务器信息。
添加依赖
如果你使用的是Maven构建工具,你需要在pom.xml文件中添加Spring Mail的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 配置邮件模板用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
配置邮件服务器信息
在Spring Boot项目中,你可以在application.properties或application.yml文件中配置邮件服务器的相关信息,例如SMTP服务器地址、端口、用户名和密码等。
这里使用YAML格式:
spring:
application:
name: my-spring-security
mail:
host: smtp.163.com
username: your-email@example.com
password: your-email-password
default-encoding: UTF-8
port: 465
protocol: smtp
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
ssl:
enable: true
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
mail:
fromMail:
addr: your-email@example.com
三、使用JavaMailSender发送邮件
配置完成后,你可以通过注入JavaMailSender接口来发送邮件。以下是一个简单的示例,展示了如何发送纯文本邮件和HTML邮件。
创建MailService.java
package com.hx.myemail.service;
/**
* 描述
*
* @author hanxu
* @date 2024/12/23
* @since 2024/12/23
*/
public interface MailService {
/**
* 发送简单邮件
* @param to
* @param subject
* @param content
*/
void sendSimpleMail(String to, String subject, String content);
/**
* 发送html邮件
* @param to
* @param subject
* @param content
*/
void sendHtmlMail(String to, String subject, String content);
/**
* 发送带附件的邮件
* @param to
* @param subject
* @param content
* @param filePaths
*/
void sendAttachmentMail(String to, String subject, String content, String[] filePaths);
/**
* 发送带静态资源的邮件
* @param to
* @param subject
* @param content
* @param filePaths
* @param rscId
*/
void sendInlineResourceMail(String to, String subject, String content, String[] filePaths, String rscId);
}
实现类 MailServiceImpl.java
package com.hx.myemail.service.impl;
import com.hx.myemail.service.MailService;
import jakarta.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import java.io.File;
/**
* 描述
*
* @author hanxu
* @date 2024/12/23
* @since 2024/12/23
*/
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender javaMailSender;
@Value("${mail.fromMail.addr}")
private String from;
@Override
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try {
javaMailSender.send(message);
System.out.println(">>>>>邮件发送成功");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void sendHtmlMail(String to, String subject, String content) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
javaMailSender.send(mimeMessage);
System.out.println(">>>>>Html邮件发送成功");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void sendAttachmentMail(String to, String subject, String content, String[] filePaths) {
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
for (String filePath : filePaths) {
FileSystemResource file = new FileSystemResource(new File(filePath));
String filename = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(filename, file);
}
javaMailSender.send(message);
System.out.println(">>>>>待附件的邮件发送成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void sendInlineResourceMail(String to, String subject, String content, String[] filePaths, String rscId) {
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource fileSystemResource = new FileSystemResource(new File(filePaths[0]));
helper.addInline(rscId, fileSystemResource);
javaMailSender.send(message);
System.out.println(">>>>>发送静态资源邮件成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
四、进行测试
使用单元测试类发送邮件
package com.hx.myemail;
import com.hx.myemail.service.MailService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
/**
* 描述
*
* @author hanxu
* @date 2024/12/23
* @since 2024/12/23
*/
@SpringBootTest
public class MailServiceTest {
@Autowired
private MailService mailService;
@Autowired
private TemplateEngine templateEngine;
private String toEmail = "example@163.com";
@Test
void sendHtmlMail() {
String content = "<html><body><h1>hello world</h1> <br/> <h3>这是一封Html邮件!</h3></body></html>";
mailService.sendHtmlMail(toEmail, "测试Html邮件", content);
}
@Test
void sendSimpleMail() {
mailService.sendSimpleMail(toEmail, "测试简单邮件", "这是一封简单邮件!");
}
@Test
void sendAttachmentMail() {
String[] filePaths = {"D:\\cpu30.jar", "D:\\hello.py", "D:\\testManageLog.doc"};
mailService.sendAttachmentMail(toEmail, "测试附件邮件", "这是一封附件邮件!", filePaths);
}
@Test
void sendInlineResourceMail() {
String rscId = "neo006";
String[] imagePath = {"D:\\background\\559ad287880511ebb6edd017c2d2eca2.png"};
String content = "<html><body><h1>hello world</h1> <br/> <img src=\"cid:" + rscId + "\" / > </body></html>";
mailService.sendInlineResourceMail(toEmail, "测试静态资源邮件", content, imagePath, rscId);
}
@Test
void sendTemplateMail() {
Context context = new Context();
context.setVariable("checkCode", "AKJ878");
context.setVariable("signName", "SIGN_NAME");
String emailTemplate = templateEngine.process("mailTemplate", context);
mailService.sendHtmlMail(toEmail, "测试模板邮件", emailTemplate);
}
@Test
void sendTemplateMail2() {
Context context = new Context();
context.setVariable("code", "RRGZXB");
String emailTemplate = templateEngine.process("mailTemplate/codeTemplate", context);
mailService.sendHtmlMail(toEmail, "测试模板邮件2", emailTemplate);
}
}
thymleaf模板的目录结构
mailTemplate.html内容
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
您好,这是验证邮件,请点击下面的链接完成验证,<br/>
<p>【<span th:text="${signName}"></span>】您的验证码为:<span th:text="${checkCode}"></span>,请勿泄漏!如非本人操作,请忽略!</p>
<a href="#" th:href="@{ https://www.baidu.com }">百度</a>
</body>
</html>
codeTemplate.html内容
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
这是验证码的模板邮件:<span th:text="${code}"></span>
</body>
</html>
五、总结
JavaMailSender是Spring框架中处理邮件发送的强大工具,通过简单的配置和API调用,可以轻松实现邮件的发送功能。无论是纯文本邮件、HTML邮件还是带附件的邮件,JavaMailSender都能提供很好的支持。
更多推荐




所有评论(0)