|
@@ -1,18 +1,17 @@
|
|
|
package com.fjhx.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
import cn.hutool.core.thread.ThreadUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.fjhx.config.TaskPoolConfig;
|
|
|
import com.fjhx.constants.SendConstants;
|
|
|
-import com.fjhx.entity.EmailInfo;
|
|
|
-import com.fjhx.entity.EmailMailbox;
|
|
|
-import com.fjhx.entity.EmailMessage;
|
|
|
-import com.fjhx.entity.EmailMessageSend;
|
|
|
+import com.fjhx.entity.*;
|
|
|
import com.fjhx.service.*;
|
|
|
import com.fjhx.utils.EmailEngineUtil;
|
|
|
+import com.fjhx.utils.RetryUtil;
|
|
|
import com.fjhx.vo.BindingVo;
|
|
|
import com.fjhx.vo.EmailMailboxVo;
|
|
|
import com.fjhx.vo.MessageDetailVo;
|
|
@@ -42,6 +41,9 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
@Autowired
|
|
|
private IEmailMessageSendService emailMessageSendService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IEmailMessageAttachmentService emailMessageAttachmentService;
|
|
|
+
|
|
|
@Qualifier(TaskPoolConfig.taskExecutor)
|
|
|
@Autowired
|
|
|
private Executor executor;
|
|
@@ -106,16 +108,26 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
executor.execute(() -> {
|
|
|
ThreadUtil.sleep(5000);
|
|
|
|
|
|
+ // 记录上次消息id,防止循环查询分页过程中接收到了新邮件,出现邮件重复问题
|
|
|
+ List<String> lastMessageId = new ArrayList<>();
|
|
|
+
|
|
|
for (EmailMailbox emailMailbox : emailMailboxList) {
|
|
|
- EmailEngineUtil.getMessageList(
|
|
|
+ EmailEngineUtil.handleMessageList(
|
|
|
email,
|
|
|
emailMailbox.getPath(),
|
|
|
messageList -> {
|
|
|
List<EmailMessage> emailMessageList = new ArrayList<>();
|
|
|
List<EmailMessageSend> emailMessageSendList = new ArrayList<>();
|
|
|
+ List<EmailMessageAttachment> emailMessageAttachmentList = new ArrayList<>();
|
|
|
+
|
|
|
for (MessageVo.MessagesDTO messagesDTO : messageList) {
|
|
|
+ if (lastMessageId.contains(messagesDTO.getId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
MessageDetailVo messageDetail = EmailEngineUtil.getMessageDetail(email, messagesDTO.getId());
|
|
|
|
|
|
+ // 基本信息
|
|
|
EmailMessage emailMessage = new EmailMessage();
|
|
|
long id = IdWorker.getId();
|
|
|
emailMessage.setId(id);
|
|
@@ -127,17 +139,20 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
emailMessage.setSubject(messagesDTO.getSubject());
|
|
|
emailMessage.setFromDate(messagesDTO.getDate());
|
|
|
|
|
|
+ // 发件人
|
|
|
MessageVo.MessagesDTO.ToDTO from = messagesDTO.getFrom();
|
|
|
if (ObjectUtils.isNotEmpty(from)) {
|
|
|
emailMessage.setFromName(from.getName());
|
|
|
emailMessage.setFromAddress(from.getAddress());
|
|
|
}
|
|
|
|
|
|
+ // 正文内容
|
|
|
MessageDetailVo.TextDTO text = messageDetail.getText();
|
|
|
if (ObjectUtils.isNotEmpty(text)) {
|
|
|
emailMessage.setHtmlContent(text.getHtml());
|
|
|
}
|
|
|
|
|
|
+ // 收件人
|
|
|
List<MessageVo.MessagesDTO.ToDTO> to = messagesDTO.getTo();
|
|
|
if (ObjectUtils.isNotEmpty(to)) {
|
|
|
for (MessageVo.MessagesDTO.ToDTO toDTO : to) {
|
|
@@ -151,6 +166,7 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 抄送人
|
|
|
List<MessageVo.MessagesDTO.ToDTO> cc = messagesDTO.getCc();
|
|
|
if (ObjectUtils.isNotEmpty(cc)) {
|
|
|
for (MessageVo.MessagesDTO.ToDTO toDTO : cc) {
|
|
@@ -164,6 +180,7 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 密送人
|
|
|
List<MessageVo.MessagesDTO.ToDTO> bcc = messagesDTO.getBcc();
|
|
|
if (ObjectUtils.isNotEmpty(bcc)) {
|
|
|
for (MessageVo.MessagesDTO.ToDTO toDTO : cc) {
|
|
@@ -177,11 +194,43 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ List<MessageVo.MessagesDTO.AttachmentsDTO> attachments = messagesDTO.getAttachments();
|
|
|
+ if (ObjectUtils.isNotEmpty(attachments)) {
|
|
|
+ for (MessageVo.MessagesDTO.AttachmentsDTO attachment : attachments) {
|
|
|
+ String attachmentId = attachment.getId();
|
|
|
+
|
|
|
+ String newFileName = attachmentId + "." + FileUtil.getSuffix(attachment.getFilename());
|
|
|
+
|
|
|
+ // 异常重试
|
|
|
+ boolean execute = RetryUtil.execute(() -> EmailEngineUtil.downloadAttachment(email, attachmentId, newFileName));
|
|
|
+
|
|
|
+ // TODO 下载失败加入日志
|
|
|
+ if (execute) {
|
|
|
+ EmailMessageAttachment emailMessageAttachment = new EmailMessageAttachment();
|
|
|
+ emailMessageAttachment.setEmailMessageId(id);
|
|
|
+ emailMessageAttachment.setMessageId(messagesDTO.getId());
|
|
|
+ emailMessageAttachment.setName(attachment.getFilename());
|
|
|
+ emailMessageAttachment.setPath(email + "\\" + newFileName);
|
|
|
+ emailMessageAttachment.setAttachmentId(attachmentId);
|
|
|
+ emailMessageAttachment.setSize(attachment.getEncodedSize());
|
|
|
+ emailMessageAttachmentList.add(emailMessageAttachment);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
emailMessageList.add(emailMessage);
|
|
|
}
|
|
|
|
|
|
emailMessageService.saveBatch(emailMessageList);
|
|
|
emailMessageSendService.saveBatch(emailMessageSendList);
|
|
|
+ emailMessageAttachmentService.saveBatch(emailMessageAttachmentList);
|
|
|
+
|
|
|
+ lastMessageId.clear();
|
|
|
+ for (EmailMessage emailMessage : emailMessageList) {
|
|
|
+ lastMessageId.add(emailMessage.getMessageId());
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
);
|
|
|
}
|