|
@@ -84,6 +84,10 @@ public class MailServiceImpl implements IMailService {
|
|
private TransactionDefinition transactionDefinition;
|
|
private TransactionDefinition transactionDefinition;
|
|
@Autowired
|
|
@Autowired
|
|
private PlatformTransactionManager platformTransactionManager;
|
|
private PlatformTransactionManager platformTransactionManager;
|
|
|
|
+ @Autowired
|
|
|
|
+ private IPersonalFolderService personalFolderService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private IEnterpriseFolderService enterpriseFolderService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public List<MailboxInfo> getMailboxInfoListByUserId(List<Long> userIdList) {
|
|
public List<MailboxInfo> getMailboxInfoListByUserId(List<Long> userIdList) {
|
|
@@ -94,22 +98,60 @@ public class MailServiceImpl implements IMailService {
|
|
return mailMapper.getMailboxInfoListByUserId(userIdList, MailSyncInfo.mailType);
|
|
return mailMapper.getMailboxInfoListByUserId(userIdList, MailSyncInfo.mailType);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @SneakyThrows
|
|
@Override
|
|
@Override
|
|
public PageWrapper<MessageVo> getMessagePage(GetMessagePageDto dto) {
|
|
public PageWrapper<MessageVo> getMessagePage(GetMessagePageDto dto) {
|
|
|
|
|
|
|
|
+ PageWrapper<MessageVo> wrapper;
|
|
|
|
+ IMAPFolder folder;
|
|
|
|
+
|
|
if (dto.getType().equals(1)) {
|
|
if (dto.getType().equals(1)) {
|
|
Page<PersonalMessage> page = personalMessageService.page(dto, q -> q
|
|
Page<PersonalMessage> page = personalMessageService.page(dto, q -> q
|
|
.eq(PersonalMessage::getFolderId, dto.getFolderId())
|
|
.eq(PersonalMessage::getFolderId, dto.getFolderId())
|
|
.orderByDesc(PersonalMessage::getSendDate)
|
|
.orderByDesc(PersonalMessage::getSendDate)
|
|
);
|
|
);
|
|
- return new PageWrapper<>(page, MessageVo.class);
|
|
|
|
|
|
+ wrapper = new PageWrapper<>(page, MessageVo.class);
|
|
|
|
+ if (page.getSize() == 0) {
|
|
|
|
+ return wrapper;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ PersonalFolder personalFolder = personalFolderService.getById(dto.getFolderId());
|
|
|
|
+ if (personalFolder == null) {
|
|
|
|
+ throw new ServiceException("文件夹已被删除");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MailboxInfo mailboxInfo = getMailboxInfo(1, personalFolder.getMailboxId());
|
|
|
|
+ IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
|
|
|
|
+ folder = (IMAPFolder) imapStore.getFolder(personalFolder.getName());
|
|
|
|
+ } else {
|
|
|
|
+ Page<EnterpriseMessage> page = enterpriseMessageService.page(dto, q -> q
|
|
|
|
+ .eq(EnterpriseMessage::getFolderId, dto.getFolderId())
|
|
|
|
+ .orderByDesc(EnterpriseMessage::getSendDate)
|
|
|
|
+ );
|
|
|
|
+ wrapper = new PageWrapper<>(page, MessageVo.class);
|
|
|
|
+ if (page.getSize() == 0) {
|
|
|
|
+ return wrapper;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ EnterpriseFolder enterpriseFolder = enterpriseFolderService.getById(dto.getFolderId());
|
|
|
|
+ if (enterpriseFolder == null) {
|
|
|
|
+ throw new ServiceException("文件夹已被删除");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MailboxInfo mailboxInfo = getMailboxInfo(2, enterpriseFolder.getMailboxId());
|
|
|
|
+ IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
|
|
|
|
+ folder = (IMAPFolder) imapStore.getFolder(enterpriseFolder.getName());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ folder.open(Folder.READ_ONLY);
|
|
|
|
+ for (MessageVo messageVo : wrapper.getRows()) {
|
|
|
|
+ Long uid = messageVo.getUid();
|
|
|
|
+ Message message = folder.getMessageByUID(uid);
|
|
|
|
+ String flags = EmailUtil.getFlags(message.getFlags());
|
|
|
|
+ messageVo.setFlags(flags);
|
|
}
|
|
}
|
|
|
|
|
|
- Page<EnterpriseMessage> page = enterpriseMessageService.page(dto, q -> q
|
|
|
|
- .eq(EnterpriseMessage::getFolderId, dto.getFolderId())
|
|
|
|
- .orderByDesc(EnterpriseMessage::getSendDate)
|
|
|
|
- );
|
|
|
|
- return new PageWrapper<>(page, MessageVo.class);
|
|
|
|
|
|
+ return wrapper;
|
|
}
|
|
}
|
|
|
|
|
|
@SneakyThrows
|
|
@SneakyThrows
|
|
@@ -162,7 +204,7 @@ public class MailServiceImpl implements IMailService {
|
|
|
|
|
|
IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
|
|
IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
|
|
IMAPFolder folder = (IMAPFolder) imapStore.getFolder(folderName);
|
|
IMAPFolder folder = (IMAPFolder) imapStore.getFolder(folderName);
|
|
- folder.open(Folder.READ_ONLY);
|
|
|
|
|
|
+ folder.open(Folder.READ_WRITE);
|
|
|
|
|
|
IMAPMessage message = (IMAPMessage) folder.getMessageByUID(uid);
|
|
IMAPMessage message = (IMAPMessage) folder.getMessageByUID(uid);
|
|
|
|
|
|
@@ -170,6 +212,12 @@ public class MailServiceImpl implements IMailService {
|
|
throw new ServiceException("没有找到邮件详情,此邮件可能已被删除");
|
|
throw new ServiceException("没有找到邮件详情,此邮件可能已被删除");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ Flags flags = message.getFlags();
|
|
|
|
+ if (!flags.contains(Flags.Flag.SEEN)) {
|
|
|
|
+ flags.add(Flags.Flag.SEEN);
|
|
|
|
+ }
|
|
|
|
+ message.setFlags(flags, true);
|
|
|
|
+
|
|
List<CompletableFuture<MessageDetailVo.MessageAttachment>> list = new ArrayList<>();
|
|
List<CompletableFuture<MessageDetailVo.MessageAttachment>> list = new ArrayList<>();
|
|
|
|
|
|
CompletableFuture<Void> attachmentFuture = CompletableFuture.runAsync(() -> {
|
|
CompletableFuture<Void> attachmentFuture = CompletableFuture.runAsync(() -> {
|
|
@@ -190,6 +238,9 @@ public class MailServiceImpl implements IMailService {
|
|
|
|
|
|
new Thread(() -> saveMessageDetail(messageId, messageDetailVo, type)).start();
|
|
new Thread(() -> saveMessageDetail(messageId, messageDetailVo, type)).start();
|
|
|
|
|
|
|
|
+ if (folder.isOpen()) {
|
|
|
|
+ folder.close();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
// copy一份数据,防止多线程下把文件路径前缀保存到数据库中
|
|
// copy一份数据,防止多线程下把文件路径前缀保存到数据库中
|
|
@@ -291,7 +342,6 @@ public class MailServiceImpl implements IMailService {
|
|
private MailboxInfo getMailboxInfo(Integer type, Long mailboxId) {
|
|
private MailboxInfo getMailboxInfo(Integer type, Long mailboxId) {
|
|
MailboxInfo mailboxInfo = new MailboxInfo();
|
|
MailboxInfo mailboxInfo = new MailboxInfo();
|
|
|
|
|
|
-
|
|
|
|
if (type.equals(1)) {
|
|
if (type.equals(1)) {
|
|
PersonalMailbox personalMailbox = personalMailboxService.getById(mailboxId);
|
|
PersonalMailbox personalMailbox = personalMailboxService.getById(mailboxId);
|
|
mailboxInfo.setReceiveHost(personalMailbox.getReceiveHost());
|
|
mailboxInfo.setReceiveHost(personalMailbox.getReceiveHost());
|
|
@@ -311,7 +361,6 @@ public class MailServiceImpl implements IMailService {
|
|
return mailboxInfo;
|
|
return mailboxInfo;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
private void setPersonalMessageDetailVo(MessageDetailVo vo, Long messageId) {
|
|
private void setPersonalMessageDetailVo(MessageDetailVo vo, Long messageId) {
|
|
List<PersonalMessageAddress> addressList = personalMessageAddressService.list(
|
|
List<PersonalMessageAddress> addressList = personalMessageAddressService.list(
|
|
q -> q.eq(PersonalMessageAddress::getMessageId, messageId));
|
|
q -> q.eq(PersonalMessageAddress::getMessageId, messageId));
|