145 lines
4.2 KiB
Java
145 lines
4.2 KiB
Java
|
package edu.whut.smilepicturebackend.common;
|
|||
|
|
|||
|
import org.springframework.core.io.ClassPathResource;
|
|||
|
import org.springframework.core.io.Resource;
|
|||
|
|
|||
|
import java.io.BufferedReader;
|
|||
|
import java.io.IOException;
|
|||
|
import java.io.InputStream;
|
|||
|
import java.io.InputStreamReader;
|
|||
|
import java.util.ArrayList;
|
|||
|
import java.util.HashMap;
|
|||
|
import java.util.List;
|
|||
|
import java.util.Map;
|
|||
|
|
|||
|
/**
|
|||
|
* 邮箱工具类
|
|||
|
*/
|
|||
|
public class EmailUtils {
|
|||
|
public static void main(String[] args) {
|
|||
|
Map<String, Object> map = new HashMap<>();
|
|||
|
map.put("code", 1111);
|
|||
|
System.out.println(emailContentTemplate("templates/EmailCodeTemplate.html", "BOOT_", "_END", map));
|
|||
|
System.out.println(emailContentTemplate("templates/EmailCodeTemplate.html", map));
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送静态模板邮箱
|
|||
|
*
|
|||
|
* @param path 模板路径,模板需要放在resource下。
|
|||
|
* @return 内容
|
|||
|
*/
|
|||
|
public static String emailContentTemplate(String path) {
|
|||
|
// 读取邮件模板,该模板放在 templates/ 目录下,模板名为:EmailTemplate.html
|
|||
|
Resource resource = new ClassPathResource(path);
|
|||
|
InputStream inputStream = null;
|
|||
|
BufferedReader fileReader = null;
|
|||
|
StringBuilder buffer = new StringBuilder();
|
|||
|
String line = "";
|
|||
|
try {
|
|||
|
inputStream = resource.getInputStream();
|
|||
|
fileReader = new BufferedReader(new InputStreamReader(inputStream));
|
|||
|
while ((line = fileReader.readLine()) != null) {
|
|||
|
buffer.append(line);
|
|||
|
}
|
|||
|
} catch (Exception e) {
|
|||
|
throw new RuntimeException("邮件模板读取失败", e);
|
|||
|
} finally {
|
|||
|
try {
|
|||
|
if (fileReader != null) {
|
|||
|
fileReader.close();
|
|||
|
}
|
|||
|
if (inputStream != null) {
|
|||
|
inputStream.close();
|
|||
|
}
|
|||
|
} catch (IOException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
// 替换html模板中的参数
|
|||
|
return buffer.toString();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送动态模板邮箱
|
|||
|
*
|
|||
|
* @param path 模板路径,模板需要放在resource下。
|
|||
|
* @param paramMap 参数列表,按照Map中的Key进行替换。
|
|||
|
* @return 内容
|
|||
|
*/
|
|||
|
public static String emailContentTemplate(String path, Map<String, Object> paramMap) {
|
|||
|
return emailContentTemplate(path, "BOOT_", "_END", paramMap);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送动态模板邮箱
|
|||
|
*
|
|||
|
* @param path 模板路径,模板需要放在resource下。
|
|||
|
* @param prefix 前缀,需要替换的占位符。
|
|||
|
* @param suffix 后缀,需要替换的占位符。
|
|||
|
* @param paramMap 参数列表,按照Map中的Key进行替换。
|
|||
|
* @return 内容
|
|||
|
*/
|
|||
|
public static String emailContentTemplate(String path, String prefix, String suffix, Map<String, Object> paramMap) {
|
|||
|
String str = emailContentTemplate(path);
|
|||
|
List<String> targetList = getTargetString(str, prefix, suffix);
|
|||
|
if (targetList != null) {
|
|||
|
for (String tl : targetList) {
|
|||
|
Object o = paramMap.get(tl);
|
|||
|
if (o != null) {
|
|||
|
String s = prefix + tl + suffix;
|
|||
|
str = str.replaceAll(s, o.toString());
|
|||
|
} else {
|
|||
|
throw new RuntimeException("邮箱模板中不存在占位字符!");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return str;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取占位符字符
|
|||
|
*
|
|||
|
* @param str 原字符串
|
|||
|
* @param startStr 开始字符串
|
|||
|
* @param endStr 结束字符串
|
|||
|
* @return String[]
|
|||
|
*/
|
|||
|
private static List<String> getTargetString(String str, String startStr, String endStr) {
|
|||
|
// 获取头占位符
|
|||
|
List<Integer> startStrIndex = getTargetIndex(str, 0, startStr);
|
|||
|
// 获取尾占位符
|
|||
|
List<Integer> endStrIndex = getTargetIndex(str, 0, endStr);
|
|||
|
if (!startStrIndex.isEmpty() && !endStrIndex.isEmpty() && startStrIndex.size() != endStrIndex.size()) {
|
|||
|
return null;
|
|||
|
}
|
|||
|
List<String> strList = new ArrayList<>();
|
|||
|
for (int i = 0, num = startStrIndex.size(); i < num; i++) {
|
|||
|
strList.add(str.substring((startStrIndex.get(i) + startStr.length()), (endStrIndex.get(i))));
|
|||
|
}
|
|||
|
return strList;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取占位字符的下标
|
|||
|
*
|
|||
|
* @param string 字符串
|
|||
|
* @param index 下标
|
|||
|
* @param findStr 指定字符串
|
|||
|
* @return List<Integer>
|
|||
|
*/
|
|||
|
private static List<Integer> getTargetIndex(String string, int index, String findStr) {
|
|||
|
List<Integer> list = new ArrayList<>();
|
|||
|
if (index != -1) {
|
|||
|
int num = string.indexOf(findStr, index);
|
|||
|
if (num == -1) {
|
|||
|
return list;
|
|||
|
}
|
|||
|
list.add(num);
|
|||
|
// 递归进行查找
|
|||
|
list.addAll(getTargetIndex(string, string.indexOf(findStr, num + 1), findStr));
|
|||
|
}
|
|||
|
return list;
|
|||
|
}
|
|||
|
}
|