From c1a44827973f1d0ff1f5a5e800cb17f64be2deaa Mon Sep 17 00:00:00 2001 From: wind Date: Tue, 19 Sep 2023 16:04:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E5=9C=A8=E5=A4=8D=E6=9D=82=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E4=B8=8B=E6=97=A0=E6=B3=95=E8=AF=86=E5=88=AB=E4=B8=BB=E4=BD=93?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/core/service/MonitorService.java | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MonitorService.java b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MonitorService.java index 84ed91a3..50ee3487 100644 --- a/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MonitorService.java +++ b/sms4j-Email-plugin/sms4j-Email-core/src/main/java/org/dromara/email/core/service/MonitorService.java @@ -5,13 +5,19 @@ import org.dromara.email.comm.config.MailImapConfig; import org.dromara.email.comm.entity.MonitorMessage; import org.dromara.email.comm.errors.MailException; +import javax.mail.BodyPart; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; +import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Store; import javax.mail.search.FlagTerm; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.Properties; import java.util.Timer; import java.util.TimerTask; @@ -47,7 +53,7 @@ public class MonitorService{ private void startListening() { try { Folder inbox = store.getFolder("Inbox"); - inbox.open(Folder.READ_ONLY); + inbox.open(Folder.READ_WRITE); Message[] messages = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false)); for (Message message : messages) { MonitorMessage monitorMessage = new MonitorMessage(); @@ -57,9 +63,25 @@ public class MonitorService{ monitorMessage.setTitle(message.getSubject()); // 获取邮件的内容 if (message.isMimeType("text/plain")) { - monitorMessage.setText(message.getContent().toString()); + Object content = message.getContent(); + if (content == null){ + StringBuilder stringBuilder = getStringBuilder(message); + content = stringBuilder.toString(); + } + monitorMessage.setText(content.toString()); } else if (message.isMimeType("multipart/*")) { Multipart mp = (Multipart) message.getContent(); + for (int i = 0; i < mp.getCount();i++){ + BodyPart bodyPart = mp.getBodyPart(i); + String contentType = bodyPart.getContentType().toLowerCase(); + if (contentType.startsWith("text/plain")) { + // 纯文本内容 + monitorMessage.setText(bodyPart.getContent().toString()); + } else if (contentType.startsWith("text/html")) { + // HTML内容 + monitorMessage.setText(bodyPart.getContent().toString()); + } + } monitorMessage.setBody(mp); } monitorMessage.setMessageIndex(message.getMessageNumber()); @@ -75,6 +97,20 @@ public class MonitorService{ } } + private static StringBuilder getStringBuilder(Message message) throws IOException, MessagingException { + InputStream inputStream = message.getInputStream(); + + // 解析输入流以获取内容 + StringBuilder stringBuilder = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine()) != null) { + stringBuilder.append(line); + } + } + return stringBuilder; + } + public MonitorService start(){ Timer timer = new Timer(); this.timer = timer;