145 lines
4.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}