Ver código fonte

fix:邮件解析-过滤掉不支持解析的文件

mozuwen 7 meses atrás
pai
commit
d7430ea570

+ 16 - 5
service-base/src/main/java/com/simuwang/base/common/util/EmailUtil.java

@@ -70,6 +70,9 @@ public class EmailUtil {
             } else if ("BASE64DecoderStream".equals(contentClass)) {
                 if (StrUtil.isNotBlank(part.getFileName())) {
                     String fileName = MimeUtility.decodeText(part.getFileName());
+                    if (!isSupportedFileType(fileName)) {
+                        continue;
+                    }
                     emailContentInfoDTO.setFileName(fileName);
 
                     String realPath = filePath + emailDate + fileName;
@@ -111,6 +114,13 @@ public class EmailUtil {
         return emailContentInfoDTOList;
     }
 
+    private static boolean isSupportedFileType(String fileName) {
+        if (StrUtil.isBlank(fileName)) {
+            return false;
+        }
+        return ExcelUtil.isZip(fileName) || ExcelUtil.isExcel(fileName) || ExcelUtil.isPdf(fileName) || ExcelUtil.isHTML(fileName);
+    }
+
     /**
      * 根据日期过滤邮件
      *
@@ -246,7 +256,8 @@ public class EmailUtil {
         }
         return props;
     }
-    public static  void senEmail(MailboxInfoDTO mailboxInfoDTO, String emails, File file, JavaMailSender javaMailSender) throws Exception {
+
+    public static void senEmail(MailboxInfoDTO mailboxInfoDTO, String emails, File file, JavaMailSender javaMailSender) throws Exception {
         logger.info("send email begin .........");
         // 根据Session 构建邮件信息
         MimeMessage message = javaMailSender.createMimeMessage();
@@ -254,8 +265,8 @@ public class EmailUtil {
         Address from = new InternetAddress(mailboxInfoDTO.getAccount());
         String[] emailArr = emails.split(";");
         Address[] toArr = new Address[emailArr.length];
-        for(int idx=0;idx<emailArr.length;idx++){
-            if(StringUtils.isNotEmpty(emailArr[idx])){
+        for (int idx = 0; idx < emailArr.length; idx++) {
+            if (StringUtils.isNotEmpty(emailArr[idx])) {
                 Address to = new InternetAddress(emailArr[idx]);
                 toArr[idx] = to;
             }
@@ -270,10 +281,10 @@ public class EmailUtil {
         BodyPart bodyPart = new MimeBodyPart();
         logger.info("组装 htmlText.........");
         // 邮件内容
-        String htmlText ="<p>您好,附件为产品的数据未发送到最新,麻烦尽快发送缺失的数据。若是产品清算或者有其他原因不再发送数据,还请将产品的清算日期或者不再发送数据的原因发送给我们,非常感谢~\n</p>";
+        String htmlText = "<p>您好,附件为产品的数据未发送到最新,麻烦尽快发送缺失的数据。若是产品清算或者有其他原因不再发送数据,还请将产品的清算日期或者不再发送数据的原因发送给我们,非常感谢~\n</p>";
         bodyPart.setContent(htmlText, "text/html;charset=utf-8");
         //设置附件
-        BodyPart filePart=new MimeBodyPart();
+        BodyPart filePart = new MimeBodyPart();
         filePart.setFileName(file.getName());
         filePart.setDataHandler(
                 new DataHandler(

+ 9 - 8
service-base/src/main/java/com/simuwang/base/common/util/ExcelUtil.java

@@ -6,7 +6,6 @@ import cn.hutool.core.util.StrUtil;
 import com.simuwang.base.common.conts.DateConst;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
@@ -18,7 +17,6 @@ import java.text.NumberFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
 
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveInputStream;
@@ -29,18 +27,21 @@ public class ExcelUtil {
 
     private static final Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
 
-    public static boolean isExcel(String name) {
-        return name.endsWith("xls") || name.endsWith("xlsx");
+    public static boolean isExcel(String fileName) {
+        return StrUtil.isNotBlank(fileName) && (fileName.endsWith("xls") || fileName.endsWith("xlsx"));
     }
 
-    public static boolean isPdf(String name) {
-        return name.endsWith("pdf") || name.endsWith("PDF");
+    public static boolean isPdf(String fileName) {
+        return StrUtil.isNotBlank(fileName) && (fileName.endsWith("pdf") || fileName.endsWith("PDF"));
     }
 
-    public static boolean isZip(String filePath) {
-        return filePath.endsWith("zip") || filePath.endsWith("ZIP");
+    public static boolean isZip(String fileName) {
+        return StrUtil.isNotBlank(fileName) && (fileName.endsWith("zip") || fileName.endsWith("ZIP"));
     }
 
+    public static boolean isHTML(String fileName) {
+        return StrUtil.isNotBlank(fileName) && fileName.endsWith("html");
+    }
     public static Sheet getSheet(File file, int sheetIndex) {
         if (file == null || !file.exists()) {
             return null;