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]