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)