Procházet zdrojové kódy

fix: 发件人获取失败问题修复

chenjianhua před 6 měsíci
rodič
revize
f858dd691a

+ 34 - 20
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -844,7 +844,7 @@ public class EmailParseService {
                 if (isNotParseConditionSatisfied) {
                     continue;
                 }
-                senderEmail = getSenderEmail(message.getFrom());
+                senderEmail = getSenderEmail(message);
                 emailType = EmailUtil.getEmailTypeBySubject(message.getSubject(), emailTypeMap);
                 String emailDateStr = DateUtil.format(emailDate, DateConst.YYYY_MM_DD_HH_MM_SS);
                 if (emailType == null) {
@@ -898,27 +898,41 @@ public class EmailParseService {
         return emailMessageMap;
     }
 
-    private String getSenderEmail(Address[] senderAddress) {
-        if (senderAddress == null || senderAddress.length == 0) {
-            log.info("发件人获取失败=============================");
-            return null;
-        }
-        // 此时的address是含有编码(MIME编码方式)后的文本和实际的邮件地址
-        String address = "";
-        for(Address from : senderAddress){
-            if(StringUtil.isNotEmpty(from.toString())){
-                address = from.toString();
-                break;
+    private String getSenderEmail(MimeMessage message) {
+        Address[] senderAddress = null;
+        try {
+            senderAddress = message.getFrom();
+            if (senderAddress == null || senderAddress.length == 0) {
+                log.info("发件人获取失败=============================");
+                return null;
             }
+            // 此时的address是含有编码(MIME编码方式)后的文本和实际的邮件地址
+            String address = "";
+            for(Address from : senderAddress){
+                if(StringUtil.isNotEmpty(from.toString())){
+                    address = from.toString();
+                    break;
+                }
+            }
+            log.info("发件人地址:"+address+"========================senderAddress size:"+senderAddress.length);
+            // 正则表达式匹配邮件地址
+            Pattern pattern = Pattern.compile("<(\\S+)>");
+            Matcher matcher = pattern.matcher(address);
+            if (matcher.find()) {
+                return matcher.group(1);
+            }
+            //说明匹配不到,直接获取sender
+            Address sender = message.getSender();
+            String senderEmail = sender.toString();
+            log.info("senderEmail:"+senderEmail+"====================");
+            if(senderEmail.contains("<") && senderEmail.contains(">") && senderEmail.indexOf("<") < senderEmail.indexOf(">")){
+                senderEmail = senderEmail.substring(senderEmail.indexOf("<")+1,senderEmail.length()-1);
+            }
+            return senderEmail;
+        } catch (MessagingException e) {
+            log.error(e.getMessage(),e);
         }
-        log.info("发件人地址:"+address+"========================senderAddress size:"+senderAddress.length);
-        // 正则表达式匹配邮件地址
-        Pattern pattern = Pattern.compile("<(\\S+)>");
-        Matcher matcher = pattern.matcher(address);
-        if (matcher.find()) {
-            return matcher.group(1);
-        }
-        return address;
+        return null;
     }
 
     public List<NameValueVO> searchEmailCount(DataboardQuery databoardQuery) {