24282 2 anni fa
parent
commit
301f5dc01f

+ 28 - 0
src/main/java/com/fjhx/email/controller/MailController.java

@@ -4,13 +4,17 @@ import cn.hutool.core.io.IORuntimeException;
 import cn.hutool.core.thread.ThreadUtil;
 import com.fjhx.email.config.base.R;
 import com.fjhx.email.config.exception.ServiceException;
+import com.fjhx.email.entity.EnterpriseMailbox;
+import com.fjhx.email.entity.PersonalMailbox;
 import com.fjhx.email.entity.dto.GetMessagePageDto;
 import com.fjhx.email.entity.dto.MailSyncInfo;
 import com.fjhx.email.entity.dto.MailboxInfo;
 import com.fjhx.email.entity.dto.SendDto;
 import com.fjhx.email.entity.vo.MessageDetailVo;
 import com.fjhx.email.entity.vo.MessageVo;
+import com.fjhx.email.service.IEnterpriseMailboxService;
 import com.fjhx.email.service.IMailService;
+import com.fjhx.email.service.IPersonalMailboxService;
 import com.fjhx.email.utils.EmailUtil;
 import com.fjhx.email.utils.HxHttpUtil;
 import com.fjhx.email.utils.PageWrapper;
@@ -31,6 +35,12 @@ public class MailController {
     @Autowired
     private IMailService mailService;
 
+    @Autowired
+    private IEnterpriseMailboxService enterpriseMailboxService;
+
+    @Autowired
+    private IPersonalMailboxService personalMailboxService;
+
     /**
      * 每小时同步一次在线用户
      */
@@ -129,4 +139,22 @@ public class MailController {
         return R.ok();
     }
 
+    /**
+     * 添加企业邮箱
+     */
+    @PostMapping("addEnterpriseMailbox")
+    public R addEnterpriseMailbox(@RequestBody EnterpriseMailbox enterpriseMailbox) {
+        enterpriseMailboxService.add(enterpriseMailbox);
+        return R.ok();
+    }
+
+    /**
+     * 添加企业邮箱
+     */
+    @PostMapping("addPersonalMailbox")
+    public R addPersonalMailbox(@RequestBody PersonalMailbox personalMailbox) {
+        personalMailboxService.add(personalMailbox);
+        return R.ok();
+    }
+
 }

+ 1 - 1
src/main/java/com/fjhx/email/entity/EnterpriseDomain.java

@@ -21,7 +21,7 @@ public class EnterpriseDomain extends BaseEntity {
     /**
      * 域名
      */
-    private String domanName;
+    private String domainName;
 
     /**
      * 类型:1国内 2国外

+ 3 - 4
src/main/java/com/fjhx/email/entity/EnterpriseFolder.java

@@ -2,12 +2,11 @@ package com.fjhx.email.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fjhx.email.config.base.BaseEntity;
-import java.time.LocalDateTime;
-import java.util.Date;
-
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * <p>
  * 企业邮箱文件夹
@@ -24,7 +23,7 @@ public class EnterpriseFolder extends BaseEntity {
     /**
      * 邮箱id
      */
-    private String mailboxId;
+    private Long mailboxId;
 
     /**
      * 文件夹名称

+ 1 - 1
src/main/java/com/fjhx/email/entity/PersonalFolder.java

@@ -23,7 +23,7 @@ public class PersonalFolder extends BaseEntity {
     /**
      * 邮箱id
      */
-    private String mailboxId;
+    private Long mailboxId;
 
     /**
      * 文件夹名称

+ 2 - 0
src/main/java/com/fjhx/email/service/IEnterpriseMailboxService.java

@@ -13,4 +13,6 @@ import com.fjhx.email.config.base.BaseService;
  */
 public interface IEnterpriseMailboxService extends BaseService<EnterpriseMailbox> {
 
+    void add(EnterpriseMailbox enterpriseMailbox);
+
 }

+ 2 - 0
src/main/java/com/fjhx/email/service/IPersonalMailboxService.java

@@ -13,4 +13,6 @@ import com.fjhx.email.config.base.BaseService;
  */
 public interface IPersonalMailboxService extends BaseService<PersonalMailbox> {
 
+    void add(PersonalMailbox personalMailbox);
+
 }

+ 63 - 1
src/main/java/com/fjhx/email/service/impl/EnterpriseMailboxServiceImpl.java

@@ -1,11 +1,25 @@
 package com.fjhx.email.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.email.config.exception.ServiceException;
+import com.fjhx.email.entity.EnterpriseDomain;
+import com.fjhx.email.entity.EnterpriseFolder;
 import com.fjhx.email.entity.EnterpriseMailbox;
+import com.fjhx.email.entity.dto.MailboxInfo;
 import com.fjhx.email.mapper.EnterpriseMailboxMapper;
+import com.fjhx.email.service.IEnterpriseDomainService;
+import com.fjhx.email.service.IEnterpriseFolderService;
 import com.fjhx.email.service.IEnterpriseMailboxService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.email.utils.EmailUtil;
+import com.sun.mail.imap.IMAPStore;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.mail.MessagingException;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 企业邮箱 服务实现类
@@ -17,4 +31,52 @@ import org.springframework.stereotype.Service;
 @Service
 public class EnterpriseMailboxServiceImpl extends ServiceImpl<EnterpriseMailboxMapper, EnterpriseMailbox> implements IEnterpriseMailboxService {
 
+    @Autowired
+    private IEnterpriseFolderService enterpriseFolderService;
+
+    @Autowired
+    private IEnterpriseDomainService enterpriseDomainService;
+
+    @Override
+    public void add(EnterpriseMailbox enterpriseMailbox) {
+        Long enterpriseMailboxId = IdWorker.getId();
+
+        Long domainId = enterpriseMailbox.getDomainId();
+        EnterpriseDomain enterpriseDomain = enterpriseDomainService.getById(domainId);
+
+        if (enterpriseDomain == null) {
+            throw new ServiceException("未找到企业域名");
+        }
+
+        try {
+
+            MailboxInfo mailboxInfo = new MailboxInfo();
+            mailboxInfo.setReceiveHost(enterpriseDomain.getReceiveHost());
+            mailboxInfo.setMailUser(enterpriseMailbox.getMailUserPrefix() + "@" + enterpriseDomain.getDomainName());
+            mailboxInfo.setReceivePort(enterpriseDomain.getReceivePort());
+            mailboxInfo.setMailPassword(enterpriseMailbox.getMailPassword());
+            IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
+
+            List<String> folderNameList = EmailUtil.getFolderNameList(imapStore);
+            List<EnterpriseFolder> personalFolderList = folderNameList.stream().map(item -> {
+                EnterpriseFolder enterpriseFolder = new EnterpriseFolder();
+                enterpriseFolder.setMailboxId(enterpriseMailboxId);
+                enterpriseFolder.setName(item);
+                enterpriseFolder.setSyncStatus(1);
+                return enterpriseFolder;
+            }).collect(Collectors.toList());
+
+            enterpriseFolderService.saveBatch(personalFolderList);
+
+        } catch (MessagingException e) {
+            throw new ServiceException("连接邮箱异常");
+        }
+
+        enterpriseMailbox.setId(enterpriseMailboxId);
+        enterpriseMailbox.setDefaultStatus(0);
+        enterpriseMailbox.setSyncStatus(1);
+        enterpriseMailbox.setStatus(1);
+        this.save(enterpriseMailbox);
+    }
+
 }

+ 52 - 1
src/main/java/com/fjhx/email/service/impl/PersonalMailboxServiceImpl.java

@@ -1,11 +1,23 @@
 package com.fjhx.email.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.email.config.exception.ServiceException;
+import com.fjhx.email.entity.PersonalFolder;
 import com.fjhx.email.entity.PersonalMailbox;
+import com.fjhx.email.entity.dto.MailboxInfo;
 import com.fjhx.email.mapper.PersonalMailboxMapper;
+import com.fjhx.email.service.IPersonalFolderService;
 import com.fjhx.email.service.IPersonalMailboxService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.email.utils.EmailUtil;
+import com.sun.mail.imap.IMAPStore;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.mail.MessagingException;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 个人邮箱 服务实现类
@@ -17,4 +29,43 @@ import org.springframework.stereotype.Service;
 @Service
 public class PersonalMailboxServiceImpl extends ServiceImpl<PersonalMailboxMapper, PersonalMailbox> implements IPersonalMailboxService {
 
+    @Autowired
+    private IPersonalFolderService personalFolderService;
+
+    @Override
+    public void add(PersonalMailbox personalMailbox) {
+        Long personalMailboxId = IdWorker.getId();
+
+        try {
+
+            MailboxInfo mailboxInfo = new MailboxInfo();
+            mailboxInfo.setReceiveHost(personalMailbox.getReceiveHost());
+            mailboxInfo.setReceivePort(personalMailbox.getReceivePort());
+            mailboxInfo.setMailUser(personalMailbox.getMailUser());
+            mailboxInfo.setMailPassword(personalMailbox.getMailPassword());
+            IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
+
+            List<String> folderNameList = EmailUtil.getFolderNameList(imapStore);
+            List<PersonalFolder> personalFolderList = folderNameList.stream().map(item -> {
+                PersonalFolder personalFolder = new PersonalFolder();
+                personalFolder.setMailboxId(personalMailboxId);
+                personalFolder.setName(item);
+                personalFolder.setSyncStatus(1);
+                return personalFolder;
+            }).collect(Collectors.toList());
+
+            personalFolderService.saveBatch(personalFolderList);
+
+        } catch (MessagingException e) {
+            throw new ServiceException("连接邮箱异常");
+        }
+
+        personalMailbox.setId(personalMailboxId);
+        personalMailbox.setStatus(1);
+        personalMailbox.setSyncStatus(1);
+        personalMailbox.setDefaultStatus(0);
+
+        this.save(personalMailbox);
+    }
+
 }

+ 23 - 0
src/main/java/com/fjhx/email/utils/EmailUtil.java

@@ -8,6 +8,7 @@ import com.fjhx.email.entity.dto.ObsFile;
 import com.fjhx.email.entity.dto.SendDto;
 import com.fjhx.email.entity.vo.MessageDetailVo;
 import com.fjhx.email.enums.MailFlagEnum;
+import com.sun.mail.imap.IMAPFolder;
 import com.sun.mail.imap.IMAPStore;
 import com.sun.mail.smtp.SMTPMessage;
 import com.sun.mail.util.MailSSLSocketFactory;
@@ -231,4 +232,26 @@ public class EmailUtil {
         return stringJoiner.toString();
     }
 
+    /**
+     * 获取邮箱文件夹
+     */
+    public static List<String> getFolderNameList(IMAPStore imapStore) throws MessagingException {
+        IMAPFolder folder = (IMAPFolder) imapStore.getDefaultFolder();
+        Folder[] folders = folder.list();
+        List<String> mailFolderList = new ArrayList<>();
+        addMailFolderList(mailFolderList, folders);
+        return mailFolderList;
+    }
+
+    private static void addMailFolderList(List<String> mailFolderList, Folder[] folders) throws MessagingException {
+        for (Folder folder : folders) {
+            int type = folder.getType();
+            if (type == 2) {
+                addMailFolderList(mailFolderList, folder.list());
+            } else if (type == 3) {
+                mailFolderList.add(folder.getFullName());
+            }
+        }
+    }
+
 }