vincent royer created JAMES-4214:
------------------------------------

             Summary: Sieve MessageMatcher failed for simple Mime message
                 Key: JAMES-4214
                 URL: https://issues.apache.org/jira/browse/JAMES-4214
             Project: James Server
          Issue Type: Bug
          Components: Matchers/Mailets (bundled), sieve
    Affects Versions: 3.9.0
         Environment: apache james 3.9.0
            Reporter: vincent royer
         Attachments: bodyTextMatchBitcoin.script, titi-1.eml

When processing a simple text mail with the following SIEVE filter, it does not 
match the content because the inputstream is already closed when searching for 
the keyword in the message body. With a multi-part message, there is no issue 
and the SIEVE filter match the keyword. Please find the raw mail tit.eml in 
attachment to reproduce the issue.
{quote}require "fileinto";
require "body";

if body :content "text/plain" :contains "bitcoin" {
    fileinto "INBOX.select";
} else {
    fileinto "INBOX.not.selected";
}
{quote}
 

The issue is not located in mime4j, the following unit test works well in 
org.apache.james.mime4j.utils.search.MessageMatcherTest
{quote}{{@Test}}
{{public void isFoundInShouldBeAbleToLocateTextFragments2() throws Exception {}}
{{        MessageMatcher messageMatcher = MessageMatcher.builder()}}
{{                .searchContents(Lists.<CharSequence>newArrayList("bitcoin"))}}
{{                .caseInsensitive(false)}}
{{                .includeHeaders(false)}}
{{                .contentTypes(ImmutableList.of("text/plain"))}}
{{                .build();}}
{{        
assertThat(messageMatcher.messageMatches(getResourceStream("titi.eml"))).isTrue();}}{quote}
{quote}{{}}}{quote}
The issue really happens when reading a single-part text/plain message from a 
mailet, it seems the underlying input stream does not reset the read bytes, so 
the isFound() does not read anything at all.

 

You can add the following test in the SieveIntegrationTest class, it does not 
work.

{{@Test}}
{{void bodyTextShouldMatchContentWithBitcoin() throws Exception {}}
{{    
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyTextMatchBitcoin.script");}}{{
    }}

{{FakeMail mail = FakeMail.builder()}}
{{            .name("name")}}
{{            .mimeMessage(MimeMessageUtil.mimeMessageFromStream(}}
{{                    ClassLoader.getSystemResourceAsStream("eml/titi.eml")))}}
{{            .state(Mail.DEFAULT)}}
{{            .recipient(RECEIVER_DOMAIN_COM)}}
{{            .sender("[email protected]")}}
{{            .build();}}
{{    testee.service(mail);}}{{    
assertThatAttribute(mail.getAttribute(ATTRIBUTE_NAME)).isEqualTo(ATTRIBUTE_SELECTED_MAILBOX);}}
{{}}}

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to