简介
Spring提供的Mail邮件功能是一个强大的模块,它封装了JavaMail API,为开发者在Spring应用程序中集成邮件发送和接收功能提供了极大的便利。
背景
积累知识。
教程
1、pom依赖
<!--邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--代码简化工具-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
2、Yaml配置
spring:
mail:
host: smtp.qq.com/smtp.163.com(邮箱服务器)
username: 发送邮件邮箱
password: 授权码(一般去对应邮箱网站获取)
3、邮件属性类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @Author ClancyLv
* @Date 2024/8/16 10:14
* @Description 属性--邮件
*/
@Data
@Component
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {
/**
* 邮件服务器地址
*/
private String host;
/**
* 邮件服务器用户名
*/
private String username;
/**
* 邮件服务器密码
*/
private String password;
}
4、邮件工具类
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @Author ClancyLv
* @Date 2024/8/16 10:11
* @Description 工具类--邮件发送
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class Mail {
private final MailProperties mailProperties;
private final JavaMailSender javaMailSender;
/**
* 发送简单文本邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param toList 邮件接收者列表
*/
public void sendTextMail(String subject, String text, List<String> toList) {
// 列表转数组
String[] to = toList.toArray(new String[0]);
sendTextMail(subject, text, to);
}
/**
* 发送简单文本邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param to 邮件接收者
*/
@SneakyThrows
public void sendTextMail(String subject, String text, String... to) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
try {
// 邮件发送来源
simpleMailMessage.setFrom(mailProperties.getUsername());
// 邮件发送地址
simpleMailMessage.setTo(to);
// 邮件主题
simpleMailMessage.setSubject(subject);
// 邮件内容
simpleMailMessage.setText(text);
// 发送邮件
javaMailSender.send(simpleMailMessage);
} catch (MailException e) {
log.error("发送简单文本邮件异常:{}", e.getMessage());
e.printStackTrace();
throw new MessagingException("发送简单文本邮件异常:" + e.getMessage());
}
}
/**
* 发送Html邮件
* @param subject 邮件主题
* @param html 邮件内容
* @param toList 邮件接收者列表
*/
public void sendHtmlMail(String subject, String html, List<String> toList) {
// 列表转数组
String[] to = toList.toArray(new String[0]);
sendHtmlMail(subject, html, to);
}
/**
* 发送Html邮件
* @param subject 邮件主题
* @param html 邮件内容
* @param to 邮件接收者
*/
@SneakyThrows
public void sendHtmlMail(String subject, String html, String... to) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
// 邮件发送来源
mimeMessageHelper.setFrom(mailProperties.getUsername());
// 邮件发送地址
mimeMessageHelper.setTo(to);
// 邮件主题
mimeMessageHelper.setSubject(subject);
// 邮件内容
mimeMessageHelper.setText(html, true);
// 发送邮件
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
log.error("发送Html邮件异常:{}", e.getMessage());
e.printStackTrace();
throw new MessagingException("发送Html邮件异常:" + e.getMessage());
}
}
/**
* 发送图片邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param file 图片
* @param toList 邮件接收者列表
*/
public void sendImageMail(String subject, String text, File file, List<String> toList) {
// 列表转数组
String[] to = toList.toArray(new String[0]);
sendImageMail(subject, text, file, to);
}
/**
* 发送图片邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param file 图片
* @param to 邮件接收者
*/
public void sendImageMail(String subject, String text, File file, String... to) {
sendImageMail(subject, text, new ArrayList<File>(){{ add(file); }}, to);
}
/**
* 发送图片邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param files 图片列表
* @param to 邮件接收者
*/
@SneakyThrows
public void sendImageMail(String subject, String text, List<File> files, String... to) {
// 处理图片
StringBuilder content = new StringBuilder(getHtmlHead(text));
for (File file : files) {
// 图片名+图片索引作为图片cid(cid用于标识图片)
content.append("<img src=\"cid:").append(file.getName()).append(files.indexOf(file)).append("\" >");
}
content.append(getHtmlFoot());
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
// 邮件发送来源
mimeMessageHelper.setFrom(mailProperties.getUsername());
// 邮件发送地址
mimeMessageHelper.setTo(to);
// 邮件主题
mimeMessageHelper.setSubject(subject);
// 邮件内容
mimeMessageHelper.setText(content.toString(), true);
for (File file : files) {
// 添加图片
mimeMessageHelper.addInline(file.getName() + files.indexOf(file), file);
}
// 发送邮件
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
log.error("发送图片邮件异常:{}", e.getMessage());
e.printStackTrace();
throw new MessagingException("发送图片邮件异常:" + e.getMessage());
}
}
/**
* 发送附件邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param isHtml true:是 false:否
* @param file 图片
* @param toList 邮件接收者列表
*/
public void sendFileMail(String subject, String text, boolean isHtml, File file, List<String> toList) {
// 列表转数组
String[] to = toList.toArray(new String[0]);
sendFileMail(subject, text, isHtml, file, to);
}
/**
* 发送附件邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param isHtml true:是 false:否
* @param file 图片
* @param to 邮件接收者
*/
public void sendFileMail(String subject, String text, boolean isHtml, File file, String... to) {
sendFileMail(subject, text, isHtml, new ArrayList<File>(){{ add(file); }}, to);
}
/**
* 发送附件邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param isHtml true:是 false:否
* @param files 附件列表
* @param to 邮件接收者
*/
@SneakyThrows
public void sendFileMail(String subject, String text, boolean isHtml, List<File> files, String... to) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
// 邮件发送来源
mimeMessageHelper.setFrom(mailProperties.getUsername());
// 邮件发送地址
mimeMessageHelper.setTo(to);
// 邮件主题
mimeMessageHelper.setSubject(subject);
// 邮件内容
mimeMessageHelper.setText(text, isHtml);
for (File file : files) {
// 添加附件
mimeMessageHelper.addAttachment(file.getName(), file);
}
// 发送邮件
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
log.error("发送附件邮件异常:{}", e.getMessage());
e.printStackTrace();
throw new MessagingException("发送附件邮件异常:" + e.getMessage());
}
}
/**
* 发送图片和附件邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param imageFiles 图片列表
* @param files 附件列表
* @param toList 邮件接收者列表
*/
@SneakyThrows
public void sendImageAndFileMail(String subject, String text, List<File> imageFiles, List<File> files, List<String> toList) {
// 列表转数组
String[] to = toList.toArray(new String[0]);
sendImageAndFileMail(subject, text, imageFiles, files, to);
}
/**
* 发送图片和附件邮件
* @param subject 邮件主题
* @param text 邮件内容
* @param imageFiles 图片列表
* @param files 附件列表
* @param to 邮件接收者
*/
@SneakyThrows
public void sendImageAndFileMail(String subject, String text, List<File> imageFiles, List<File> files, String... to) {
// 处理图片
StringBuilder content = new StringBuilder(getHtmlHead(text));
for (File file : imageFiles) {
// 图片名+图片索引作为图片cid(cid用于标识图片)
content.append("<img src=\"cid:").append(file.getName()).append(files.indexOf(file)).append("\" >");
}
content.append(getHtmlFoot());
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
// 邮件发送来源
mimeMessageHelper.setFrom(mailProperties.getUsername());
// 邮件发送地址
mimeMessageHelper.setTo(to);
// 邮件主题
mimeMessageHelper.setSubject(subject);
// 邮件内容
mimeMessageHelper.setText(content.toString(), true);
for (File file : imageFiles) {
// 添加图片
mimeMessageHelper.addInline(file.getName() + files.indexOf(file), file);
}
for (File file : files) {
// 添加附件
mimeMessageHelper.addAttachment(file.getName(), file);
}
// 发送邮件
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
log.error("发送图片和附件邮件异常:{}", e.getMessage());
e.printStackTrace();
throw new MessagingException("发送图片和附件邮件异常:" + e.getMessage());
}
}
/**
* 获取html头部标签
* @param text 内容
* @return html头部标签
*/
private String getHtmlHead(String text) {
return "<html><body>" + text + "<br>";
}
/**
* 获取html尾部标签
* @return html尾部标签
*/
private String getHtmlFoot() {
return "</body></html>";
}
}