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]