You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mailet-api@james.apache.org by "Benoit Tellier (Jira)" <ma...@james.apache.org> on 2020/04/28 06:10:00 UTC

[jira] [Created] (MAILET-166) AutomaticSentMail detector should not fail for mails of more than one MB

Benoit Tellier created MAILET-166:
-------------------------------------

             Summary: AutomaticSentMail detector should not fail for mails of more than one MB
                 Key: MAILET-166
                 URL: https://issues.apache.org/jira/browse/MAILET-166
             Project: James Mailet
          Issue Type: Improvement
          Components: Base Mailets
    Affects Versions: 3.5.0
            Reporter: Benoit Tellier
             Fix For: 3.6.0


We encountered the following error:


{code:java}
java.io.IOException: Input stream limit exceeded
	at org.apache.james.mime4j.io.LimitedInputStream.enforceLimit(LimitedInputStream.java:39)
	at org.apache.james.mime4j.io.LimitedInputStream.read(LimitedInputStream.java:51)
	at java.io.FilterInputStream.read(FilterInputStream.java:107)
	at org.apache.james.mime4j.stream.MimeEntity.advanceToBoundary(MimeEntity.java:393)
...
Wrapped by: javax.mail.MessagingException: Can not read content
	at org.apache.mailet.base.AutomaticallySentMailDetectorImpl.isMdnSentAutomatically(AutomaticallySentMailDetectorImpl.java:107)
	at org.apache.mailet.base.AutomaticallySentMailDetectorImpl.isAutomaticallySent(AutomaticallySentMailDetectorImpl.java:54)
	at org.apache.james.jmap.mailet.VacationMailet.service(VacationMailet.java:72)
	at org.apache.james.mailetcontainer.impl.camel.CamelProcessor.process(CamelProcessor.java:75)
	at org.apache.james.mailetcontainer.impl.camel.CamelMailetProcessor$MailetContainerRouteBuilder.handleMailet(CamelMailetProcessor.java:176)
	at org.apache.james.mailetcontainer.impl.camel.CamelMailetProcessor$MailetContainerRouteBuilder.lambda$configure$0(CamelMailetProcessor.java:153)
	at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
{code}

Vacation mailet calls AutomaticallySentMailDetector 

AutomaticallySentMailDetectorImpl::isMdnSentAutomatically do calls MDN parsing.

```
    @Override
    public boolean isAutomaticallySent(Mail mail) throws MessagingException {
        return !mail.hasSender() ||
            isMailingList(mail) ||
            isAutoSubmitted(mail) ||
            isMdnSentAutomatically(mail);
    }
```

And...

```
    @Override
    public boolean isMdnSentAutomatically(Mail mail) throws MessagingException {
        ResultCollector resultCollector = new ResultCollector(false);
        MimeStreamParser parser = new MimeStreamParser(MimeConfig.custom()
            .setMaxContentLen(1024 * 1024) // there's no reason for a mdn report to be bigger than 1MiB
            .setMaxHeaderCount(-1)
            .setMaxHeaderLen(-1)
            .setMaxLineLen(-1)
            .setHeadlessParsing(mail.getMessage().getContentType())
            .build());
        parser.setContentHandler(createMdnContentHandler(resultCollector));
        try {
            parser.parse(mail.getMessage().getInputStream());
        } catch (MimeException e) {
            throw new MessagingException("Can not parse Mime", e);
        } catch (IOException e) {
            throw new MessagingException("Can not read content", e);
        }
        return resultCollector.getResult();
    }
```

I see a pretty good reason for an MDN mail to be bigger than 1Mb ;-)

So in short, please:

 - Write an integration test showing that vacation do not work for a mail bigger than one MB
 - Fix it!




--
This message was sent by Atlassian Jira
(v8.3.4#803005)