فهرست منبع

fix:pdf密码识别

wangzaijun 1 هفته پیش
والد
کامیت
77e4eb5d4a

+ 1 - 1
mo-daq/src/main/java/com/smppw/modaq/application/components/ReportParseUtils.java

@@ -336,7 +336,7 @@ public final class ReportParseUtils {
         }
         Matcher matcher = PatternConsts.PDF_PWD_PATTERN.matcher(text);
         if (matcher.find()) {
-            return matcher.group();
+            return matcher.group(1);
         }
         return null;
     }

+ 4 - 1
mo-daq/src/main/java/com/smppw/modaq/common/conts/PatternConsts.java

@@ -38,7 +38,10 @@ public class PatternConsts {
      */
     public static final Pattern FUND_LEVEL_PATTERN = Pattern.compile("[A-F]级|基金[A-F]");
 
-    public static final Pattern PDF_PWD_PATTERN = Pattern.compile("密码[::][A-Z]{1,10}");
+    /**
+     * 邮件正文中的PDF密码
+     */
+    public static final Pattern PDF_PWD_PATTERN = Pattern.compile("密码[::]([A-Z]{1,10})");
 
     // 正则表达式匹配单行和多行注释
     public static final Pattern JSON_COMMENT_PATTERN = Pattern.compile(

+ 10 - 9
mo-daq/src/main/java/com/smppw/modaq/domain/service/EmailParseService.java

@@ -44,6 +44,7 @@ import jakarta.mail.search.SearchTerm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.MediaType;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StopWatch;
 
@@ -997,11 +998,10 @@ public class EmailParseService {
                 }
 
                 Object messageContent = message.getContent();
-                String content;
+                String[] contents = new String[]{null};
                 if (messageContent instanceof Multipart multipart) {
-                    content = this.reMultipart(emailAddress, emailTitle, emailDate, multipart, dtos);
+                    this.reMultipart(emailAddress, emailTitle, emailDate, multipart, contents, dtos);
                 } else {
-                    content = null;
                     log.warn("{} 邮件{} 获取不了附件", folderName, emailTitle);
                 }
                 if (CollUtil.isEmpty(dtos)) {
@@ -1011,7 +1011,7 @@ public class EmailParseService {
                 dtos.forEach(e -> {
                     e.setEmailType(emailType);
                     e.setSenderEmail(senderEmail);
-                    e.setEmailContent(content);
+                    e.setEmailContent(contents[0]);
                 });
                 emailMessageMap.put(IdUtil.simpleUUID(), dtos);
             } catch (Exception e) {
@@ -1096,9 +1096,9 @@ public class EmailParseService {
         return FileUtil.file(filePath + realName);
     }
 
-    private String reMultipart(String account, String subject, Date emailDate, Multipart multipart,
+    private void reMultipart(String account, String subject, Date emailDate,
+                             Multipart multipart, String[] contents,
                              List<EmailContentInfoDTO> emailContentInfoDTOList) throws Exception {
-        String content = null;
         for (int i = 0; i < multipart.getCount(); i++) {
             Part bodyPart = multipart.getBodyPart(i);
             Object bodyPartContent = bodyPart.getContent();
@@ -1106,16 +1106,17 @@ public class EmailParseService {
                 if (log.isDebugEnabled()) {
                     log.debug("邮件{} 获取的正文不做解析,内容是 {}", subject, bodyPartContent);
                 }
-                content = bodyPartContent.toString();
+                if (StrUtil.startWithIgnoreCase(bodyPart.getContentType(), MediaType.TEXT_PLAIN_VALUE)) {
+                    contents[0] = bodyPartContent.toString();
+                }
                 continue;
             }
             if (bodyPartContent instanceof Multipart mp) {
-                this.reMultipart(account, subject, emailDate, mp, emailContentInfoDTOList);
+                this.reMultipart(account, subject, emailDate, mp, contents, emailContentInfoDTOList);
             } else {
                 this.rePart(account, subject, emailDate, bodyPart, emailContentInfoDTOList);
             }
         }
-        return content;
     }
 
     private String getSenderEmail(Message message) {

+ 2 - 2
mo-daq/src/test/java/com/smppw/modaq/MoDaqApplicationTests.java

@@ -41,8 +41,8 @@ public class MoDaqApplicationTests {
 
     @Test
     public void reportTest() {
-        MailboxInfoDTO emailInfoDTO = this.buildMailbox("wangzaijun@simuwang.com", "WZJ2twy1314");
-        Date startDate = DateUtil.parse("2025-06-19 17:47:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        MailboxInfoDTO emailInfoDTO = this.buildMailbox("*@simuwang.com", "*");
+        Date startDate = DateUtil.parse("2025-06-19 10:30:00", DateConst.YYYY_MM_DD_HH_MM_SS);
         Date endDate = DateUtil.parse("2025-06-19 17:57:00", DateConst.YYYY_MM_DD_HH_MM_SS);
         try {
             List<String> folderNames = ListUtil.list(false);