From cb6efdef55c77da2bcc8dbd99a74e7e49c5ec067 Mon Sep 17 00:00:00 2001
From: lin <sbla5888@163.com>
Date: Tue, 05 Mar 2024 18:06:34 +0800
Subject: [PATCH] 邮件收件+bug修复+流程优化

---
 src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java |   97 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 95 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java b/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
index 1bf4c3f..bec5ba0 100644
--- a/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
+++ b/src/main/java/org/springblade/modules/email/service/impl/EmailAccountServiceImpl.java
@@ -1,15 +1,19 @@
 package org.springblade.modules.email.service.impl;
 
+import com.sun.mail.imap.IMAPFolder;
+import com.sun.mail.imap.IMAPStore;
 import com.xxl.job.core.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.common.utils.ParseMail;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.modules.email.config.MailProperties;
 import org.springblade.modules.email.config.MailSenderConfig;
 import org.springblade.modules.email.entity.EmailAccount;
 import org.springblade.modules.email.service.IEmailAccountService;
 import org.springblade.modules.messageRecord.entity.MessageUser;
+import org.springblade.modules.messageRecord.vo.MessageRecordVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.JavaMailSenderImpl;
@@ -17,9 +21,18 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import javax.mail.MessagingException;
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeUtility;
+import javax.mail.search.FlagTerm;
 import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -79,6 +92,86 @@
 		emailAccount.setSubject(title);
 		emailAccount.setContent(content);
 
-		return  senderEmail(emailAccount);
+		return senderEmail(emailAccount);
+	}
+
+
+	@Override
+	public List<MessageRecordVO> getUnreadList() throws MessagingException {
+		Folder folder = null;
+		Store store = senderConfig.getReceive();
+		List<MessageRecordVO> MessageRecordVOList = new ArrayList<>();
+		try {
+			// 获得收件箱
+			folder = store.getFolder("INBOX");
+			// 以读写模式打开收件箱
+			folder.open(Folder.READ_WRITE);
+			//false 表示未读
+			FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
+			//获得收件箱的邮件列表
+			Message[] messages = folder.search(flagTerm);
+			// 打印不同状态的邮件数量
+			System.out.println("收件箱中共" + messages.length + "封邮件!");
+			System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!");
+			System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!");
+			System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!");
+
+			System.out.println("------------------------开始解析邮件----------------------------------");
+//			ParseMail.getMailTextContent(messages.)
+			StringBuffer content = new StringBuffer(30);
+
+//			for (int i = 0; i < messages.length; i++) {
+//				System.out.println("消息:"+messages[i].getSubject());
+//				String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString());
+//				InternetAddress internetAddress = new InternetAddress(from);
+//				System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
+//			}
+			for (Message message : messages) {
+
+				ParseMail.getMailTextContent(message, content);
+
+				MessageRecordVO messageRecordVO = new MessageRecordVO();
+				String from = MimeUtility.decodeText(message.getFrom()[0].toString());
+				InternetAddress ia = new InternetAddress(from);
+
+				System.out.println("发件人:" + ia.getPersonal() + '(' + ia.getAddress() + ')');
+				System.out.println("主题:" + message.getSubject());
+				System.out.println("主题fa:" + message.getFlags());
+				if (message.getSentDate() != null) {
+					System.out.println("邮件发送时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(message.getSentDate()));
+				}
+				System.out.println("-------------------------------------------\n");
+//				message.setFlag(Flags.Flag.SEEN, true);
+				messageRecordVO.setTitle(message.getSubject());
+				if (message.getSentDate() != null) {
+					messageRecordVO.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(message.getSentDate()));
+				}
+				messageRecordVO.setUserName(ia.getPersonal() + '(' + ia.getAddress() + ')');
+				messageRecordVO.setContent(String.valueOf(content));
+				MessageRecordVOList.add(messageRecordVO);
+			}
+			return MessageRecordVOList;
+
+		} catch (NoSuchProviderException e) {
+			e.printStackTrace();
+		} catch (MessagingException e) {
+			e.printStackTrace();
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				if (folder != null) {
+					folder.close(false);
+				}
+				if (store != null) {
+					store.close();
+				}
+			} catch (MessagingException e) {
+				e.printStackTrace();
+			}
+		}
+		return null;
 	}
 }

--
Gitblit v1.9.3