Browse Source

修改 同步邮件时把正文 附件信息也同步

ControlDream 1 year ago
parent
commit
42ce7a94a0

+ 6 - 0
src/main/java/com/fjhx/email/entity/dto/MailInfo.java

@@ -8,6 +8,7 @@ import java.util.Date;
 @Getter
 @Setter
 public class MailInfo {
+    private Long id;
 
     /**
      * 邮件uid
@@ -54,4 +55,9 @@ public class MailInfo {
      */
     private Integer isAttachments;
 
+    /**
+     * 同步状态 1已同步 0未同步
+     */
+    private Integer syncStatus;
+
 }

+ 8 - 0
src/main/java/com/fjhx/email/service/IMailService.java

@@ -6,8 +6,10 @@ import com.fjhx.email.entity.dto.SetSeenDto;
 import com.fjhx.email.entity.vo.MessageDetailVo;
 import com.fjhx.email.entity.vo.MessageVo;
 import com.fjhx.email.utils.PageWrapper;
+import com.sun.mail.imap.IMAPMessage;
 
 import javax.mail.MessagingException;
+import java.io.IOException;
 import java.util.List;
 
 public interface IMailService {
@@ -41,4 +43,10 @@ public interface IMailService {
      * 取消已读
      */
     void cancelSeen(String host, String user, String password, SetSeenDto dto) throws MessagingException;
+
+    void saveMessageDetail(Long messageId, MessageDetailVo messageDetailVo, Integer type);
+
+    void setAddress(IMAPMessage message, MessageDetailVo messageDetailVo) throws MessagingException;
+
+    void setTextAndAttachment(IMAPMessage message, MessageDetailVo vo) throws MessagingException, IOException;
 }

+ 38 - 4
src/main/java/com/fjhx/email/service/impl/CoreServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.io.IORuntimeException;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.fjhx.email.config.exception.ServiceException;
 import com.fjhx.email.entity.EnterpriseFolder;
 import com.fjhx.email.entity.EnterpriseMessage;
@@ -14,6 +15,7 @@ import com.fjhx.email.entity.dto.MailFolderInfo;
 import com.fjhx.email.entity.dto.MailInfo;
 import com.fjhx.email.entity.dto.MailSyncInfo;
 import com.fjhx.email.entity.dto.MailboxInfo;
+import com.fjhx.email.entity.vo.MessageDetailVo;
 import com.fjhx.email.service.*;
 import com.fjhx.email.utils.HxHttpUtil;
 import com.fjhx.email.utils.email.ImapUtil;
@@ -247,7 +249,7 @@ public class CoreServiceImpl implements ApplicationRunner {
                     }
 
                     // 拉取邮件
-                    List<MailInfo> mailInfoList = getMailInfoList(folder, mailFolder, messages);
+                    List<MailInfo> mailInfoList = getMailInfoList(folder, mailFolder, messages, mailboxInfo);
 
                     if (ObjectUtil.isEmpty(mailInfoList)) {
                         continue;
@@ -287,7 +289,7 @@ public class CoreServiceImpl implements ApplicationRunner {
     /**
      * 拉取邮件
      */
-    private List<MailInfo> getMailInfoList(IMAPFolder folder, MailFolderInfo mailFolder, Message[] messages) throws MessagingException {
+    private List<MailInfo> getMailInfoList(IMAPFolder folder, MailFolderInfo mailFolder, Message[] messages, MailboxInfo mailboxInfo) throws MessagingException {
 
         // 上次同步邮件uid
         Long lastUid = mailFolder.getLastUid();
@@ -332,6 +334,7 @@ public class CoreServiceImpl implements ApplicationRunner {
 
             // 邮件信息
             MailInfo mailInfo = new MailInfo();
+            mailInfo.setId(IdWorker.getId());
             mailInfo.setUid(folder.getUID(message));
             mailInfo.setSubject(message.getSubject());
             mailInfo.setSendDate(message.getSentDate());
@@ -378,12 +381,41 @@ public class CoreServiceImpl implements ApplicationRunner {
             // 添加同步邮件总次数
             mailCount.incrementAndGet();
 
+            //拉取明细
+            syncMessageDetail(mailInfo, mailboxInfo.getType(), message);
+
         }
 
         return mailInfoList;
     }
 
     /**
+     * 同步明细信息
+     */
+    private void syncMessageDetail(MailInfo mailInfo, Integer type, IMAPMessage message) {
+        Long messageId = mailInfo.getId();
+        MessageDetailVo messageDetailVo = new MessageDetailVo();
+        messageDetailVo.setMessageId(messageId);
+
+        if(ObjectUtil.isEmpty(mailInfo.getSyncStatus())){
+            mailInfo.setSyncStatus(0);
+        }
+
+        try {
+            // 赋值邮件 正文、附件
+            mailService.setTextAndAttachment(message, messageDetailVo);
+            // 赋值邮件 收件人、抄送人、密送人、回复人
+            mailService.setAddress(message, messageDetailVo);
+            // 保存数据
+            mailService.saveMessageDetail(messageId, messageDetailVo, type);
+
+            mailInfo.setSyncStatus(1);
+        } catch (Exception e) {
+            log.error("拉取邮件明细出错:",e.getMessage(), e);
+        }
+    }
+
+    /**
      * 判断是否有附件
      *
      * @return
@@ -429,6 +461,7 @@ public class CoreServiceImpl implements ApplicationRunner {
 
                 List<PersonalMessage> personalMessageList = mailInfoList.stream().map(mailInfo -> {
                     PersonalMessage personalMessage = new PersonalMessage();
+                    personalMessage.setId(mailInfo.getId());
                     personalMessage.setUid(mailInfo.getUid());
                     personalMessage.setMailboxId(mailboxInfo.getId());
                     personalMessage.setFolderId(mailFolder.getId());
@@ -438,7 +471,7 @@ public class CoreServiceImpl implements ApplicationRunner {
                     personalMessage.setFromPersonalName(mailInfo.getFromPersonalName());
                     personalMessage.setSendDate(mailInfo.getSendDate());
                     personalMessage.setReceivedDate(mailInfo.getReceivedDate());
-                    personalMessage.setSyncStatus(0);
+                    personalMessage.setSyncStatus(mailInfo.getSyncStatus());
                     personalMessage.setDelFlag(0);
                     personalMessage.setFlags(mailInfo.getFlags());
                     personalMessage.setRecipients(mailInfo.getRecipients());
@@ -459,6 +492,7 @@ public class CoreServiceImpl implements ApplicationRunner {
 
                 List<EnterpriseMessage> enterpriseMessageList = mailInfoList.stream().map(mailInfo -> {
                     EnterpriseMessage enterpriseMessage = new EnterpriseMessage();
+                    enterpriseMessage.setId(mailInfo.getId());
                     enterpriseMessage.setUid(mailInfo.getUid());
                     enterpriseMessage.setMailboxId(mailboxInfo.getId());
                     enterpriseMessage.setFolderId(mailFolder.getId());
@@ -468,7 +502,7 @@ public class CoreServiceImpl implements ApplicationRunner {
                     enterpriseMessage.setFromPersonalName(mailInfo.getFromPersonalName());
                     enterpriseMessage.setSendDate(mailInfo.getSendDate());
                     enterpriseMessage.setReceivedDate(mailInfo.getReceivedDate());
-                    enterpriseMessage.setSyncStatus(0);
+                    enterpriseMessage.setSyncStatus(mailInfo.getSyncStatus());
                     enterpriseMessage.setDelFlag(0);
                     enterpriseMessage.setFlags(mailInfo.getFlags());
                     enterpriseMessage.setRecipients(mailInfo.getRecipients());

+ 6 - 3
src/main/java/com/fjhx/email/service/impl/MailServiceImpl.java

@@ -564,7 +564,8 @@ public class MailServiceImpl implements IMailService {
     /**
      * 保存内容
      */
-    private void saveMessageDetail(Long messageId, MessageDetailVo messageDetailVo, Integer type) {
+    @Override
+    public void saveMessageDetail(Long messageId, MessageDetailVo messageDetailVo, Integer type) {
 
         TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
 
@@ -709,7 +710,8 @@ public class MailServiceImpl implements IMailService {
     /**
      * 获取邮件 收件人、抄送人、密送人、回复人
      */
-    private void setAddress(IMAPMessage message, MessageDetailVo messageDetailVo) throws MessagingException {
+    @Override
+    public void setAddress(IMAPMessage message, MessageDetailVo messageDetailVo) throws MessagingException {
 
         List<MessageAddress> messageAddressList = ImapUtil.getMessageAddressList(message);
 
@@ -730,7 +732,8 @@ public class MailServiceImpl implements IMailService {
     /**
      * 获取邮件正文以及附件
      */
-    private void setTextAndAttachment(IMAPMessage message, MessageDetailVo vo) throws MessagingException, IOException {
+    @Override
+    public void setTextAndAttachment(IMAPMessage message, MessageDetailVo vo) throws MessagingException, IOException {
 
         List<CompletableFuture<Void>> futureList = new ArrayList<>();