From f178e844cec55f802c8f0501b74e7a03256a6be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Spasic=CC=81?= Date: Thu, 29 Aug 2024 22:30:56 +0200 Subject: [PATCH] Add readonly detection on fetching (closes #17) --- src/main/java/jodd/mail/ReceivedEmails.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/jodd/mail/ReceivedEmails.java b/src/main/java/jodd/mail/ReceivedEmails.java index a28fae1..efa3b8d 100644 --- a/src/main/java/jodd/mail/ReceivedEmails.java +++ b/src/main/java/jodd/mail/ReceivedEmails.java @@ -2,6 +2,7 @@ import jakarta.mail.FetchProfile; import jakarta.mail.Flags; +import jakarta.mail.Folder; import jakarta.mail.Message; import jakarta.mail.MessagingException; @@ -40,11 +41,14 @@ public ReceivedEmail[] fetch() { } } + @SuppressWarnings("t") private ReceivedEmail[] _fetch() throws MessagingException { if (messages.length == 0) { return ReceivedEmail.EMPTY_ARRAY; } + final boolean isReadOnly = session.folder.getMode() == Folder.READ_ONLY; + if (envelope) { final FetchProfile fetchProfile = new FetchProfile(); @@ -64,16 +68,22 @@ private ReceivedEmail[] _fetch() throws MessagingException { if (!EmailUtil.isEmptyFlags(flagsToSet)) { emails[i].flags(flagsToSet); - msg.setFlags(flagsToSet, true); + if (!isReadOnly) { + msg.setFlags(flagsToSet, true); + } } if (!EmailUtil.isEmptyFlags(flagsToUnset)) { emails[i].flags().remove(flagsToUnset); - msg.setFlags(flagsToUnset, false); + if (!isReadOnly) { + msg.setFlags(flagsToUnset, false); + } } if (EmailUtil.isEmptyFlags(flagsToSet) && !emails[i].isSeen()) { - msg.setFlag(Flags.Flag.SEEN, false); + if (!isReadOnly) { + msg.setFlag(Flags.Flag.SEEN, false); + } } } @@ -82,7 +92,7 @@ private ReceivedEmail[] _fetch() throws MessagingException { } // if messages were marked to be deleted, we need to expunge the folder - if (!EmailUtil.isEmptyFlags(flagsToSet)) { + if (!EmailUtil.isEmptyFlags(flagsToSet) && !isReadOnly) { if (flagsToSet.contains(Flags.Flag.DELETED)) { session.folder.expunge(); }