1、導入依賴
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.4</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
2、編寫配置文件
目錄結構

新建文件 mail.setting
# 郵件服務器的SMTP地址
host = smtp.qq.com
# 郵件服務器的SMTP的端口
port = 465
# 發件人(必須正確,否則發送失敗)
from = 239XXXX9@qq.com
# 用戶名(注意:如果使用foxmail郵箱,此處user為qq號)
user = 239XXXX9
# 密碼(拿到的授權碼)
pass = caeXXXXjff
# 使用STARTTLS安全鏈接
startttlsEnable = true
# 使用SSL安全連接
sslEnable = true
# 指定實現javax.net.SocketFactory接口的類的名稱,這個類將被用於創建SMTP的套接字
socketFactoryClass = javax.net.ssl.SSLSocketFactory
# 如果設置為true,未能創建一個套接字使用指定的套接字工廠類將導致使用java.net.Socket創建的套接字類, 默認值為true
socketFactoryFallback = true
# 指定的端口連接到在使用指定的套接字工廠。如果沒有設置,將使用默認端口456
socketFactoryPort = 465
# SMTP超時時長,單位毫秒,缺省值不超時
timeout = 0
# Socket連接超時值,單位毫秒,缺省值不超時
connectionTimeout = 0
新建模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="info-top" style="padding: 15px 25px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background: burlywood;
color: crimson;
line-height: 10px;">
<div style="font-size: 18px" ><b>{0}</b></div>
</div>
<div class="info-wrap" style="border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
border:1px solid #ddd;
overflow: hidden;
padding: 15px 15px 20px;">
<div class="tips" style="padding:15px;">
<p style=" list-style: 160%; margin: 10px 0;"><h3>Hi</h3>以下信息請您仔細閱讀:</p>
<p style=" list-style: 160%; margin: 10px 0;"> {1}</p>
</div>
</div>
</body>
</html>
代碼實現
package com.domain.util;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.ArrayList;
/**
* 郵件工具類
*
* @author z
* @date 2022-02-07 14:23
*/
@Slf4j
public class MailUtils {
/**
* 讀取替換html文件模板中的信息
* @param title 正文標題
* @param contentText 正文信息
* @return 替換后文件模板中的信息
*/
public static String scopeTemplate(String title ,String contentText){
String filename="templates.html";
InputStream inputStream=ClassLoader.getSystemResourceAsStream(filename);
BufferedReader fileReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
String line="";
try{
while((line = fileReader.readLine())!= null){
buffer.append(line);
}
}catch(IOException e){
log.info("read template:{}",e);
}finally{
if(inputStream != null){
try{
inputStream.close();
}catch (Exception e){
log.info("{}",e);
}
}
if (fileReader != null){
try{
fileReader.close();
}catch(Exception e){
log.info("{}",e);
}
}
}
return MessageFormat.format(buffer.toString(),title,contentText);
}
/**
* 發送郵件
* @param to 發送郵件地址
* @param subject 發送郵件標題
* @param contentTitle 正文標題
* @param contentText 正文信息
* @return 發送是否成功
*/
public static boolean sendMail(String to,String subject,String contentTitle,String contentText){
String sendInfo=MailUtil.send(to,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
/**
* 批量發送郵件
* @param tos 發送郵件地址列表
* @param subject 發送郵件標題
* @param contentTitle 正文標題
* @param contentText 正文信息
* @return 發送是否成功
*/
public static boolean sendMailList(ArrayList<String> tos, String subject, String contentTitle, String contentText){
String sendInfo=MailUtil.send(tos,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
/**
* 自定義郵件服務器發送郵件
* @param account 郵件服務器信息
* @param to 發送郵件地址
* @param subject 發送郵件標題
* @param contentTitle 正文標題
* @param contentText 正文信息
* @return 發送是否成功
*/
public static boolean customSendMail(MailAccount account,String to, String subject, String contentTitle, String contentText){
String sendInfo=MailUtil.send(account,to,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
/**
* 自定義郵件服務器批量發送郵件
* @param account 郵件服務器信息
* @param tos 發送郵件地址列表
* @param subject 發送郵件標題
* @param contentTitle 正文標題
* @param contentText 正文信息
* @return 發送是否成功
*/
public static boolean customSendMailList(MailAccount account, ArrayList<String> tos, String subject, String contentTitle, String contentText){
String sendInfo=MailUtil.send(account,tos,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
}
