[ 
https://issues.apache.org/jira/browse/JAMES-4214?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benoit Tellier closed JAMES-4214.
---------------------------------
    Resolution: Fixed

Hello

I merged the fix as this is straightforward.

Thanks again for the report

> 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
>            Priority: Critical
>         Attachments: bodyTextMatchBitcoin.script, titi-1.eml
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> 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