|
@@ -37,9 +37,7 @@ import com.smppw.modaq.infrastructure.util.ArchiveUtil;
|
|
|
import com.smppw.modaq.infrastructure.util.PdfUtil;
|
|
|
import jakarta.mail.*;
|
|
|
import jakarta.mail.internet.MimeUtility;
|
|
|
-import jakarta.mail.search.ComparisonTerm;
|
|
|
-import jakarta.mail.search.ReceivedDateTerm;
|
|
|
-import jakarta.mail.search.SearchTerm;
|
|
|
+import jakarta.mail.search.*;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -701,7 +699,7 @@ public class EmailParseService {
|
|
|
Store store, String folderName) throws MessagingException {
|
|
|
// 默认读取收件箱的邮件
|
|
|
Folder folder = store.getFolder(folderName);
|
|
|
- folder.open(Folder.READ_ONLY);
|
|
|
+ folder.open(Folder.READ_WRITE);
|
|
|
Message[] messages = getEmailMessage(folder, mailboxInfoDTO.getProtocol(), startDate);
|
|
|
if (messages == null || messages.length == 0) {
|
|
|
log.warn("{} 获取不到邮件 -> 邮箱信息:{},开始时间:{},结束时间:{}", folderName, mailboxInfoDTO, startDate, endDate);
|
|
@@ -715,6 +713,10 @@ public class EmailParseService {
|
|
|
Integer emailType;
|
|
|
String senderEmail;
|
|
|
String emailTitle = message.getSubject();
|
|
|
+ if (isMessageRead(message)) {
|
|
|
+ log.warn("{} 邮件{} 已读,不用重新下载解析!", folderName, emailTitle);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
try {
|
|
|
Date emailDate = message.getSentDate();
|
|
|
String emailDateStr = DateUtil.format(emailDate, DateConst.YYYY_MM_DD_HH_MM_SS);
|
|
@@ -765,6 +767,8 @@ public class EmailParseService {
|
|
|
log.error("{} 获取邮箱的邮件{} 报错,堆栈信息:{}", folderName, emailTitle, ExceptionUtil.stacktraceToString(e));
|
|
|
}
|
|
|
}
|
|
|
+ // 设置已读标志
|
|
|
+ folder.setFlags(messages, new Flags(Flags.Flag.SEEN), true);
|
|
|
folder.close(false);
|
|
|
return emailMessageMap;
|
|
|
}
|
|
@@ -883,4 +887,18 @@ public class EmailParseService {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查邮件是否已读
|
|
|
+ * @param message 邮件对象
|
|
|
+ * @return true表示已读,false表示未读
|
|
|
+ * @throws MessagingException 如果访问邮件标志时出错
|
|
|
+ */
|
|
|
+ private boolean isMessageRead(Message message) throws MessagingException {
|
|
|
+ // 获取邮件的所有标志
|
|
|
+ Flags flags = message.getFlags();
|
|
|
+
|
|
|
+ // 检查是否包含 SEEN 标志
|
|
|
+ return flags.contains(Flags.Flag.SEEN);
|
|
|
+ }
|
|
|
}
|