|
@@ -1,4 +1,4 @@
|
|
|
-package com.chelvc.framework.common.util;
|
|
|
+package com.chelvc.framework.email.context;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
@@ -6,6 +6,7 @@ import java.io.InputStream;
|
|
|
import java.io.OutputStream;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.net.URL;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
|
import java.util.regex.Matcher;
|
|
@@ -20,34 +21,43 @@ import javax.mail.internet.MimeMultipart;
|
|
|
import javax.mail.internet.MimeUtility;
|
|
|
import javax.mail.util.ByteArrayDataSource;
|
|
|
|
|
|
+import ch.qos.logback.core.util.ContentTypeUtil;
|
|
|
+import com.chelvc.framework.common.util.StringUtils;
|
|
|
+import com.chelvc.framework.email.Body;
|
|
|
import lombok.NonNull;
|
|
|
|
|
|
/**
|
|
|
* 邮件工具类
|
|
|
*
|
|
|
* @author Woody
|
|
|
- * @date 2024/1/30
|
|
|
+ * @date 2024/4/3
|
|
|
*/
|
|
|
-public final class EmailUtils {
|
|
|
+public final class EmailContextHolder {
|
|
|
static {
|
|
|
FileTypeMap.setDefaultFileTypeMap(FileTypeMap.getDefaultFileTypeMap());
|
|
|
}
|
|
|
|
|
|
- private EmailUtils() {
|
|
|
+ private EmailContextHolder() {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 将文本转换成邮件内容体
|
|
|
+ * 将内容转换成邮件内容体
|
|
|
*
|
|
|
- * @param text 文本内容
|
|
|
+ * @param body 邮件体
|
|
|
* @return 邮件内容体
|
|
|
*/
|
|
|
- public static Multipart text2part(@NonNull String text) {
|
|
|
+ public static Multipart part(@NonNull Body body) {
|
|
|
// 构建邮件内容部分
|
|
|
+ String type = body.getType();
|
|
|
+ String text = body.getContent();
|
|
|
MimeMultipart part = new MimeMultipart();
|
|
|
MimeBodyPart content = new MimeBodyPart();
|
|
|
try {
|
|
|
- content.setContent(text, "text/html;charset=UTF-8");
|
|
|
+ if (ContentTypeUtil.isTextual(type)) {
|
|
|
+ content.setText(text, StandardCharsets.UTF_8.name(), ContentTypeUtil.getSubType(type));
|
|
|
+ } else {
|
|
|
+ content.setContent(text, type);
|
|
|
+ }
|
|
|
part.addBodyPart(content);
|
|
|
if (StringUtils.isEmpty(text)) {
|
|
|
return part;
|
|
@@ -106,23 +116,23 @@ public final class EmailUtils {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 将文件转换成邮件混合部分
|
|
|
+ * 将文件转换成邮件附件部分
|
|
|
*
|
|
|
* @param file 文件对象
|
|
|
* @return 邮件混合部分
|
|
|
*/
|
|
|
- public static MimeBodyPart file2mixed(@NonNull File file) {
|
|
|
- return file2mixed(file, file.getName());
|
|
|
+ public static MimeBodyPart part(@NonNull File file) {
|
|
|
+ return part(file, file.getName());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 将文件转换成邮件混合部分
|
|
|
+ * 将文件转换成邮件附件部分
|
|
|
*
|
|
|
* @param file 文件对象
|
|
|
* @param comment 文件说明
|
|
|
* @return 邮件混合部分
|
|
|
*/
|
|
|
- public static MimeBodyPart file2mixed(@NonNull File file, @NonNull String comment) {
|
|
|
+ public static MimeBodyPart part(@NonNull File file, @NonNull String comment) {
|
|
|
MimeBodyPart body = new MimeBodyPart();
|
|
|
try {
|
|
|
body.setDataHandler(new DataHandler(new FileDataSource(file)));
|
|
@@ -134,29 +144,28 @@ public final class EmailUtils {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 将文件转换成邮件混合部分
|
|
|
+ * 将文件转换成邮件附件部分
|
|
|
*
|
|
|
* @param files 文件对象数组
|
|
|
* @return 邮件混合部分数组
|
|
|
*/
|
|
|
- public static MimeBodyPart[] file2mixed(@NonNull File... files) {
|
|
|
+ public static MimeBodyPart[] part(@NonNull File... files) {
|
|
|
MimeBodyPart[] mixes = new MimeBodyPart[files.length];
|
|
|
for (int i = 0; i < files.length; i++) {
|
|
|
- mixes[i] = file2mixed(files[i]);
|
|
|
+ mixes[i] = part(files[i]);
|
|
|
}
|
|
|
return mixes;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 将文件流转换成邮件混合部分
|
|
|
+ * 将文件流转换成邮件附件部分
|
|
|
*
|
|
|
* @param stream 文件流对象
|
|
|
* @param type 文件类型
|
|
|
* @param comment 文件说明
|
|
|
* @return 邮件混合部分
|
|
|
*/
|
|
|
- public static MimeBodyPart stream2mixed(@NonNull InputStream stream, @NonNull String type,
|
|
|
- @NonNull String comment) {
|
|
|
+ public static MimeBodyPart part(@NonNull InputStream stream, @NonNull String type, @NonNull String comment) {
|
|
|
MimeBodyPart body = new MimeBodyPart();
|
|
|
try {
|
|
|
DataSource dataSource = new ByteArrayDataSource(stream, type);
|
|
@@ -172,23 +181,23 @@ public final class EmailUtils {
|
|
|
/**
|
|
|
* 设置邮件混合文件数据源
|
|
|
*
|
|
|
- * @param text 邮件正文
|
|
|
+ * @param body 邮件体
|
|
|
* @param files 文件对象集合
|
|
|
* @return 邮件消息体对象
|
|
|
*/
|
|
|
- public static Multipart mixed(@NonNull String text, @NonNull File... files) {
|
|
|
- return mixed(text, file2mixed(files));
|
|
|
+ public static Multipart mixed(@NonNull Body body, @NonNull File... files) {
|
|
|
+ return mixed(body, part(files));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置邮件混合文件数据源
|
|
|
*
|
|
|
- * @param text 邮件正文
|
|
|
+ * @param body 邮件体
|
|
|
* @param mixes 混合对象数组
|
|
|
* @return 邮件消息体对象
|
|
|
*/
|
|
|
- public static Multipart mixed(@NonNull String text, @NonNull MimeBodyPart... mixes) {
|
|
|
- Multipart part = text2part(text);
|
|
|
+ public static Multipart mixed(@NonNull Body body, @NonNull MimeBodyPart... mixes) {
|
|
|
+ Multipart part = part(body);
|
|
|
if (mixes.length == 0) {
|
|
|
return part;
|
|
|
}
|