|
@@ -47,9 +47,6 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
private IEmailMessageService emailMessageService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IEmailMessageSendService emailMessageSendService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
private IEmailMessageAttachmentService emailMessageAttachmentService;
|
|
|
|
|
|
@Autowired
|
|
@@ -64,8 +61,8 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
@Autowired
|
|
|
private Executor syncExecutor;
|
|
|
|
|
|
- List<String> syncEmailMessageList = Collections.synchronizedList(new ArrayList<>(100));
|
|
|
- List<String> syncMessageAttachmentList = Collections.synchronizedList(new ArrayList<>(100));
|
|
|
+ public static final List<String> syncMessageContentList = Collections.synchronizedList(new ArrayList<>(100));
|
|
|
+ public static final List<String> syncMessageAttachmentList = Collections.synchronizedList(new ArrayList<>(100));
|
|
|
|
|
|
/**
|
|
|
* 每页获取多少封邮件
|
|
@@ -85,6 +82,7 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
|
|
|
List<String> collect = emailMessageService.list(Wrappers.<EmailMessage>lambdaQuery()
|
|
|
.select(EmailMessage::getEmail, EmailMessage::getMessageId)
|
|
|
+ .eq(EmailMessage::getIsShow, true)
|
|
|
.eq(EmailMessage::getContentSync, false)
|
|
|
.orderByDesc(EmailMessage::getFromDate).last("limit 50"))
|
|
|
.stream()
|
|
@@ -92,18 +90,19 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
for (String item : collect) {
|
|
|
- if (!syncEmailMessageList.contains(item)) {
|
|
|
- syncEmailMessageList.add(item);
|
|
|
+ if (!syncMessageContentList.contains(item)) {
|
|
|
+ syncMessageContentList.add(item);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- while (syncEmailMessageList.size() > 0) {
|
|
|
+ while (syncMessageContentList.size() > 0) {
|
|
|
String remove = null;
|
|
|
|
|
|
try {
|
|
|
synchronized (this) {
|
|
|
+ ThreadUtil.sleep(1000);
|
|
|
log.info("下载正文");
|
|
|
- remove = syncEmailMessageList.remove(0);
|
|
|
+ remove = syncMessageContentList.remove(0);
|
|
|
if (ObjectUtils.isEmpty(remove)) {
|
|
|
continue;
|
|
|
}
|
|
@@ -115,17 +114,19 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
// 正文内容
|
|
|
MessageDetailVo messageDetail = EmailEngineUtil.getMessageDetail(email, messageId);
|
|
|
MessageDetailVo.TextDTO text = messageDetail.getText();
|
|
|
+ String html = "";
|
|
|
if (ObjectUtils.isNotEmpty(text)) {
|
|
|
- EmailMessageContent emailMessageContent = new EmailMessageContent();
|
|
|
- emailMessageContent.setMessageId(messageId);
|
|
|
- emailMessageContent.setHtmlContent(text.getHtml());
|
|
|
- emailMessageContentService.saveOrUpdate(emailMessageContent);
|
|
|
-
|
|
|
- EmailMessage emailMessage = new EmailMessage();
|
|
|
- emailMessage.setMessageId(messageId);
|
|
|
- emailMessage.setContentSync(true);
|
|
|
- emailMessageService.updateById(emailMessage);
|
|
|
+ html = text.getHtml();
|
|
|
}
|
|
|
+ EmailMessageContent emailMessageContent = new EmailMessageContent();
|
|
|
+ emailMessageContent.setMessageId(messageId);
|
|
|
+ emailMessageContent.setHtmlContent(html);
|
|
|
+ emailMessageContentService.saveOrUpdate(emailMessageContent);
|
|
|
+
|
|
|
+ EmailMessage emailMessage = new EmailMessage();
|
|
|
+ emailMessage.setMessageId(messageId);
|
|
|
+ emailMessage.setContentSync(true);
|
|
|
+ emailMessageService.updateById(emailMessage);
|
|
|
log.info("下载正文成功");
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
@@ -159,6 +160,7 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
|
|
|
try {
|
|
|
synchronized (this) {
|
|
|
+ ThreadUtil.sleep(3000);
|
|
|
log.info("下载附件");
|
|
|
remove = syncMessageAttachmentList.remove(0);
|
|
|
if (ObjectUtil.isEmpty(remove)) {
|
|
@@ -349,6 +351,7 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
emailMessage.setSubject(messagesDTO.getSubject());
|
|
|
emailMessage.setFromDate(messagesDTO.getDate());
|
|
|
emailMessage.setContentSync(false);
|
|
|
+ emailMessage.setIsShow(true);
|
|
|
|
|
|
// 发件人
|
|
|
MessageVo.MessagesDTO.ToDTO from = messagesDTO.getFrom();
|
|
@@ -396,14 +399,14 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
*/
|
|
|
private void handleMessageNewEvent(ListenerVo listenerVo) {
|
|
|
// 查询邮箱
|
|
|
- String account = listenerVo.getAccount();
|
|
|
+ String email = listenerVo.getAccount();
|
|
|
|
|
|
EmailInfo emailInfo;
|
|
|
try {
|
|
|
- emailInfo = emailInfoService.getOne(Wrappers.<EmailInfo>lambdaQuery().eq(EmailInfo::getEmail, account));
|
|
|
+ emailInfo = emailInfoService.getOne(Wrappers.<EmailInfo>lambdaQuery().eq(EmailInfo::getEmail, email));
|
|
|
Assert.notNull(emailInfo, "未找到邮箱信息");
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("查找邮箱失败: {}", account, e);
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ log.error("查找邮箱失败: {}", email, e);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -415,21 +418,24 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
|
|
|
emailMessageService.saveOrUpdate(emailMessage);
|
|
|
|
|
|
// 保存邮箱附件
|
|
|
- List<EmailMessageAttachment> emailMessageAttachmentList;
|
|
|
+ List<EmailMessageAttachment> emailMessageAttachmentList = new ArrayList<>();
|
|
|
List<MessageVo.MessagesDTO.AttachmentsDTO> attachments = messagesDTO.getAttachments();
|
|
|
if (attachments != null && attachments.size() > 0) {
|
|
|
emailMessageAttachmentList = attachments.stream()
|
|
|
.map(attachment -> this.createMessageAttachment(emailMessage, attachment))
|
|
|
.collect(Collectors.toList());
|
|
|
emailMessageAttachmentService.saveOrUpdateBatch(emailMessageAttachmentList);
|
|
|
+ }
|
|
|
|
|
|
- for (EmailMessageAttachment attachment : emailMessageAttachmentList) {
|
|
|
- String value = attachment.getAttachmentId() + "," + attachment.getEmail() + "," + attachment.getPath();
|
|
|
- syncMessageAttachmentList.add(0, value);
|
|
|
- }
|
|
|
+ // 添加正文
|
|
|
+ syncMessageContentList.add(0, emailMessage.getEmail() + "," + emailMessage.getMessageId());
|
|
|
+
|
|
|
+ // 添加附件
|
|
|
+ for (EmailMessageAttachment attachment : emailMessageAttachmentList) {
|
|
|
+ String value = attachment.getAttachmentId() + "," + attachment.getEmail() + "," + attachment.getPath();
|
|
|
+ syncMessageAttachmentList.add(0, value);
|
|
|
}
|
|
|
|
|
|
- syncEmailMessageList.add(0, emailMessage.getEmail() + "," + emailMessage.getMessageId());
|
|
|
}
|
|
|
|
|
|
/**
|