This is an automated email from the ASF dual-hosted git repository.

chibenwa pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new f5a09613e5 JAMES-4214 Pass message rather than InputStream so that 
several bod (#3081)
f5a09613e5 is described below

commit f5a09613e5295ad9cb4f0a1e71f5409be924bb2e
Author: Benoit TELLIER <[email protected]>
AuthorDate: Mon Jul 6 14:48:43 2026 +0200

    JAMES-4214 Pass message rather than InputStream so that several bod (#3081)
---
 .../transport/mailets/jsieve/SieveMailAdapter.java | 10 +++---
 .../mailets/delivery/SieveIntegrationTest.java     | 37 +++++++++++++++++++++-
 2 files changed, 42 insertions(+), 5 deletions(-)

diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
index 3e2609632e..e74e4e508d 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.transport.mailets.jsieve;
 
+import java.io.InputStream;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -41,6 +42,7 @@ import org.apache.james.mime4j.dom.address.MailboxList;
 import org.apache.james.mime4j.dom.field.ParseException;
 import org.apache.james.mime4j.field.address.DefaultAddressParser;
 import org.apache.james.mime4j.utils.search.MessageMatcher;
+import org.apache.james.server.core.MimeMessageInputStream;
 import org.apache.jsieve.SieveContext;
 import org.apache.jsieve.exception.InternetAddressException;
 import org.apache.jsieve.exception.SieveException;
@@ -381,13 +383,13 @@ public class SieveMailAdapter implements MailAdapter, 
EnvelopeAccessors, ActionC
 
     @Override
     public boolean isInBodyText(List<String> phrasesCaseInsensitive) throws 
SieveMailException {
-        try {
+        try (InputStream messageStream = new 
MimeMessageInputStream(getMail().getMessage())) {
             return MessageMatcher.builder()
                 .contentTypes(Lists.newArrayList("text/plain"))
                 .includeHeaders(false)
                 .caseInsensitive(false)
                 
.searchContents(ImmutableList.copyOf(phrasesCaseInsensitive)).build()
-                .messageMatches(getMail().getMessage().getInputStream());
+                .messageMatches(messageStream);
         } catch (Exception e) {
             throw new SieveMailException("Error searching in the mail 
content", e);
         }
@@ -409,13 +411,13 @@ public class SieveMailAdapter implements MailAdapter, 
EnvelopeAccessors, ActionC
 
     @Override
     public boolean isInBodyContent(List<String> contentTypes, List<String> 
phrasesCaseInsensitive) throws SieveMailException {
-        try {
+        try (InputStream messageStream = new 
MimeMessageInputStream(getMail().getMessage())) {
             return MessageMatcher.builder()
                 .contentTypes(contentTypes)
                 .includeHeaders(false)
                 .caseInsensitive(false)
                 
.searchContents(ImmutableList.copyOf(phrasesCaseInsensitive)).build()
-                .messageMatches(getMail().getMessage().getInputStream());
+                .messageMatches(messageStream);
         } catch (Exception e) {
             throw new SieveMailException("Error searching in the mail 
content", e);
         }
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
index 2f1c667ddd..3543191ce4 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -894,6 +894,26 @@ class SieveIntegrationTest {
         
assertThatAttribute(mail.getAttribute(ATTRIBUTE_NAME)).isEqualTo(ATTRIBUTE_SELECTED_MAILBOX);
     }
 
+    @Test
+    void bodyTextShouldMatchContentOfSinglePartMessage() throws Exception {
+        
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyTextMatch.script");
+
+        FakeMail mail = createSinglePartTextMail();
+        testee.service(mail);
+
+        
assertThatAttribute(mail.getAttribute(ATTRIBUTE_NAME)).isEqualTo(ATTRIBUTE_SELECTED_MAILBOX);
+    }
+
+    @Test
+    void bodyContentShouldMatchContentOfSinglePartMessage() throws Exception {
+        
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyContentMatch.script");
+
+        FakeMail mail = createSinglePartTextMail();
+        testee.service(mail);
+
+        
assertThatAttribute(mail.getAttribute(ATTRIBUTE_NAME)).isEqualTo(ATTRIBUTE_SELECTED_MAILBOX);
+    }
+
     @Test
     void 
doubleVacationShouldNotBeExecutedAndReceiverShouldHaveANotificationAboutSieveError()
 throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/doubleVacation.script");
@@ -1101,7 +1121,7 @@ class SieveIntegrationTest {
                     .addToRecipient(RECEIVER_DOMAIN_COM)
                     .setMultipartWithBodyParts(
                         MimeMessageBuilder.bodyPartBuilder()
-                            .data("A text to match")
+                            .data("A text to match, followed by some trailing 
content.")
                             .addHeader("Content-Type", "text/plain; 
charset=UTF-8")
                             .filename("file.txt")
                             .disposition(MimeBodyPart.ATTACHMENT)))
@@ -1111,6 +1131,21 @@ class SieveIntegrationTest {
             .build();
     }
 
+    private FakeMail createSinglePartTextMail() throws MessagingException {
+        return FakeMail.builder()
+            .name("name")
+            .mimeMessage(
+                MimeMessageBuilder.mimeMessageBuilder()
+                    .setSubject("Subject")
+                    .setSender("[email protected]")
+                    .addToRecipient(RECEIVER_DOMAIN_COM)
+                    .setText("A text to match, followed by some trailing 
content.", "text/plain; charset=UTF-8"))
+            .state(Mail.DEFAULT)
+            .recipient(RECEIVER_DOMAIN_COM)
+            .sender("[email protected]")
+            .build();
+    }
+
     private static String expressMailboxNameWithSlash(String name) {
         return '/' + name.replace('.', '/');
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to