代码出处:码云地址:https://gitee.com/yb2cc1314/spring-boot-realizes-sending
使用SpringBoot完成邮件发送功能:
MailService接口中定义了三个方法:sendSimpleMail(发送文本邮件)、sendHtmlMail(发送HTML格式邮件)、sendAppendixMail(发送带有附件的邮件)。
1.依赖包pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2.配置文件application.yml:
spring:
mail:
# 配置 SMTP 服务器地址
host: smtp.qq.com
# 发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的
username: #发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的
# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
password: #申请到的授权码
# 邮件接收者
mailRecipient: #邮件接收者邮箱
# 端口号465或587(QQ邮箱发送邮件仅支持587端口协议)
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
# 配置SSL 加密工厂
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
debug: true
3.发送邮件服务接口:MailService
/**
* @description 邮件功能接口
*/
public interface MailService {
/** 1
* @description 发送简单文本邮件
* @param mailRecipient 邮件接收方
* @param subject 邮件主题
* @param messageText HTML格式的邮件文本内容
*/
void sendSimpleMail(String mailRecipient,String subject ,String messageText);
/** 2
* @description 发送HTML格式邮件
* @param mailRecipient 邮件接收方
* @param subject 邮件主题
* @param htmlText HTML格式的邮件文本内容
*/
void sendHtmlMail(String mailRecipient,String subject , String htmlText);
/** 3
* @description 发送包含附件的邮件
* @param mailRecipient 邮件接收方
* @param subject 邮件主题
* @param messageText 邮件文本内容
* @param filePathList 附件(文件路径集合)
*/
void sendAppendixMail(String mailRecipient , String subject , String messageText , List<String> filePathList);
}
4.发送邮件服务实现类:MailServiceImpl
/**
* @description MailService接口实现类
*/
@Slf4j
@Service
public class MailServiceImpl implements MailService {
// JavaMailSender是一个用于发送Java邮件的框架,用于简化基于Java的邮件发送。
// 它封装了JavaMail API,允许开发者使用简单的API来发送和接收电子邮件。
@Autowired
private JavaMailSender javaMailSender;
//邮件发送方邮箱
@Value("${spring.mail.username}")
private String MailSender;
/**
* @description 发送简单文件邮件
* @param mailRecipient 邮件接收方
* @param subject 邮件主题
* @param messageText 邮件文本内容
*/
@Override
public void sendSimpleMail(String mailRecipient, String subject, String messageText) {
//1、创建邮件对象(设置参数后提交)
SimpleMailMessage message = new SimpleMailMessage();
//2、设置主题
message.setSubject(subject);
//3、设置邮件发送者
message.setFrom(MailSender);
//4、设置邮件接受者,多个接受者传参为数组格式
message.setTo(mailRecipient);
//5、设置邮件正文(邮件的正式内容)
message.setText(messageText);
//6、发送邮件
try {
javaMailSender.send(message);
log.info("文本邮件已发送成功");
} catch (MailException e) {
e.printStackTrace();
throw new RuntimeException("邮件发送异常");
}
}
/**
* @description 发送HTML格式文件邮件
* @param mailRecipient 邮件接收方
* @param subject 邮件主题
* @param htmlText HTML格式的邮件内容
*/
@Override
public void sendHtmlMail(String mailRecipient, String subject, String htmlText) {
//1、获取MimeMessage对象,多用途的网际邮件扩充协议
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper;
try {
mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
//2、设置邮件发送者
mimeMessageHelper.setFrom(MailSender);
//3、设置邮件接受方
mimeMessageHelper.setTo(mailRecipient);
//4、设置邮件主题
mimeMessageHelper.setSubject(subject);
//5、设置邮件内容(HTML格式邮件内容),带html格式第二个参数true
mimeMessageHelper.setText(htmlText,true);
//6、发送邮件
javaMailSender.send(mimeMessage);
log.info("html格式的邮件发送成功");
} catch (MessagingException e) {
e.printStackTrace();
throw new RuntimeException("邮件发送异常");
}
}
/**
* 发送带有附件的邮件
* @param mailRecipient 邮件接收方
* @param subject 邮件主题
* @param messageText 邮件文本内容
* @param filePathList 附件(文件路径集合)
*/
@Override
public void sendAppendixMail(String mailRecipient, String subject, String messageText, List<String> filePathList) {
//1、获取MimeMessage对象,多用途的网际邮件扩充协议
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper ;
try {
mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
//2、设置邮件发送方
mimeMessageHelper.setFrom(MailSender);
//3、设置邮件接收方
mimeMessageHelper.setTo(mailRecipient);
//4、设置邮件主题
mimeMessageHelper.setSubject(subject);
//5、设置邮件内容(第二个参数需要为true)
mimeMessageHelper.setText(messageText,true);
//附件内容
for (String filePath : filePathList) {
//FileSystemResource是Spring框架中的一个类,用来以URL或者File方式访问文件系统中的文件
//通过FileSystemResource对象以File方式访问指定文件
// public FileSystemResource(File file): filePath表示要访问的文件路径
FileSystemResource file = new FileSystemResource(new File(filePath));
//从给定的文件路径中提取出文件的文件名
// FileSystemResource file = new FileSystemResource(new File("文件地址"));
// String filename = file.getFilename(); // 获取附件名称
// 例如:如果输入的文件路径“C:\folder\file.txt”,那么它将提取出文件名为“file.txt”。
String fileName = file.getFilename();
log.info("附件名称:"+fileName);
//addAttachment()方法:添加附件到电子邮件中。它接收两个参数,
// 第一个参数:文件的文件名,
// 第二个参数:文件对象
// 结合使用这两个参数,可以将一个或多个文件添加到电子邮件中
mimeMessageHelper.addAttachment(fileName,file);
}
//6、发送文件
javaMailSender.send(mimeMessage);
log.info("带有附件的邮件发送成功");
} catch (MessagingException e) {
e.printStackTrace();
throw new RuntimeException("邮件发送异常");
}
}
}
5.功能测试:
@SpringBootTest
class SpringbootMailApplicationTests {
@Autowired
private MailService mailService;
// 邮件发送者
@Value("${spring.mail.mailRecipient}")
private String mailRecipient;
private String subject = "邮件发送测试";
// 用于简单文本邮件测试
private String messageText = "这是一份测试邮件";
// 用于HTML格式邮件测试
private String htmlMessage ="<div>\n" +
" <p>这是一个HTML格式的邮件</p> <br>" +
" <img src=\"https://w.wallhaven.cc/full/p9/wallhaven-p9o51m.png\" width='500' height='300' /><br>\n" +
" <a href=\"https://www.yb2cc.cn\" title=\"码上就去学习\" target=\"_blank\">点我码上就去学习</a>\n" +
"</div>";
// 用于带有附件的邮件测试(文件路径)
// String filePath = "C:\\Users\\Administrator\\Desktop\\初恋_林志美.mp3";
String filePath = "E:\\idea_space_oneself\\压缩包资料\\spring-boot-realizes-sending-master.zip";
/**
* 测试简单文本邮件发送
*/
@Test
public void test1(){
mailService.sendSimpleMail(mailRecipient,subject,messageText);
}
/**
* 测试HTML格式邮件发送
*/
@Test
public void test2(){
mailService.sendHtmlMail(mailRecipient,subject,htmlMessage);
}
/**
* 测试带有附件邮件发送
*/
@Test
public void test3(){
ArrayList<String> list = new ArrayList<>();
list.add(filePath);
mailService.sendAppendixMail(mailRecipient,subject,messageText,list);
}
}
6.测试效果:
发送文本邮件效果:
发送HTML格式邮件效果:
发送带有附件的邮件效果: