This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit af547499537ed3089d2e990e1b4a3abab7fb22e0 Author: Benoit Tellier <[email protected]> AuthorDate: Mon May 11 13:51:18 2020 +0700 JAMES-3178 AutomaticSentMail detector should bypass javax.mail parsing We rely on `mime4j` for mail content parsing, we should bypass the implicit parsing and sanitizing performed in `MimeMessage::getInputStream`. As the JavaX.mail javadoc says: ``` Return a decoded input stream for this Message's "content". ``` To do so, we can use MimeMessageInputStream in james-server-core, wich also implies relocating `AutomaticallySentMailDetectorImpl`. Note that javax parsing is less robust than mime4j one, leading to the following exception: ``` 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:77) [...] Caused by: java.io.IOException: Unknown encoding: 8bitMIME-version at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:116) at javax.activation.DataHandler.getInputStream(DataHandler.java:238) at javax.mail.internet.MimeMessage.getInputStream(MimeMessage.java:1395) at org.apache.james.server.core.MimeMessageCopyOnWriteProxy.getInputStream(MimeMessageCopyOnWriteProxy.java:265) at org.apache.mailet.base.AutomaticallySentMailDetectorImpl.isMdnSentAutomatically(AutomaticallySentMailDetectorImpl.java:103) ... 92 common frames omitted Caused by: javax.mail.MessagingException: Unknown encoding: 8bitMIME-version at javax.mail.internet.MimeUtility.decode(MimeUtility.java:405) at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:109) ``` --- .../org/apache/james/modules/server/CamelMailetContainerModule.java | 5 +++++ .../src/main/java/org/apache/james/jmap/draft/JMAPCommonModule.java | 4 ---- .../james/mailetcontainer}/AutomaticallySentMailDetectorImpl.java | 6 ++++-- .../mailetcontainer}/AutomaticallySentMailDetectorImplTest.java | 3 ++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java index f9f4412..532c1cd 100644 --- a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java +++ b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java @@ -32,6 +32,7 @@ import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.commons.configuration2.ex.ConfigurationRuntimeException; import org.apache.commons.configuration2.tree.ImmutableNode; import org.apache.james.lifecycle.api.Startable; +import org.apache.james.mailetcontainer.AutomaticallySentMailDetectorImpl; import org.apache.james.mailetcontainer.api.MailProcessor; import org.apache.james.mailetcontainer.api.MailetLoader; import org.apache.james.mailetcontainer.api.MatcherLoader; @@ -54,6 +55,7 @@ import org.apache.james.utils.SpoolerProbe; import org.apache.mailet.Mailet; import org.apache.mailet.MailetContext; import org.apache.mailet.Matcher; +import org.apache.mailet.base.AutomaticallySentMailDetector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,6 +90,9 @@ public class CamelMailetContainerModule extends AbstractModule { bind(JamesMailetContext.class).in(Scopes.SINGLETON); bind(MailetContext.class).to(JamesMailetContext.class); + bind(AutomaticallySentMailDetectorImpl.class).in(Scopes.SINGLETON); + bind(AutomaticallySentMailDetector.class).to(AutomaticallySentMailDetectorImpl.class); + bind(MailetLoader.class).to(GuiceMailetLoader.class); bind(MatcherLoader.class).to(GuiceMatcherLoader.class); diff --git a/server/container/guice/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/JMAPCommonModule.java b/server/container/guice/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/JMAPCommonModule.java index fdc42cc..242ae57 100644 --- a/server/container/guice/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/JMAPCommonModule.java +++ b/server/container/guice/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/JMAPCommonModule.java @@ -51,8 +51,6 @@ import org.apache.james.util.date.ZonedDateTimeProvider; import org.apache.james.util.mime.MessageContentExtractor; import org.apache.james.utils.InitializationOperation; import org.apache.james.utils.InitilizationOperationBuilder; -import org.apache.mailet.base.AutomaticallySentMailDetector; -import org.apache.mailet.base.AutomaticallySentMailDetectorImpl; import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; @@ -73,7 +71,6 @@ public class JMAPCommonModule extends AbstractModule { bind(SignedTokenManager.class).in(Scopes.SINGLETON); bind(AccessTokenManagerImpl.class).in(Scopes.SINGLETON); bind(MailSpool.class).in(Scopes.SINGLETON); - bind(AutomaticallySentMailDetectorImpl.class).in(Scopes.SINGLETON); bind(MailboxFactory.class).in(Scopes.SINGLETON); bind(MessageFullViewFactory.class).in(Scopes.SINGLETON); @@ -88,7 +85,6 @@ public class JMAPCommonModule extends AbstractModule { bind(ZonedDateTimeProvider.class).to(DefaultZonedDateTimeProvider.class); bind(SimpleTokenManager.class).to(SignedTokenManager.class); bind(SimpleTokenFactory.class).to(SignedTokenFactory.class); - bind(AutomaticallySentMailDetector.class).to(AutomaticallySentMailDetectorImpl.class); bindConstant().annotatedWith(Names.named(AccessTokenRepository.TOKEN_EXPIRATION_IN_MS)).to(DEFAULT_TOKEN_EXPIRATION_IN_MS); bind(AccessTokenManager.class).to(AccessTokenManagerImpl.class); diff --git a/mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImpl.java similarity index 95% rename from mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java rename to server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImpl.java index 8953599..40e1cfa 100644 --- a/mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetectorImpl.java +++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImpl.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.mailet.base; +package org.apache.james.mailetcontainer; import java.io.IOException; import java.io.InputStream; @@ -33,7 +33,9 @@ import org.apache.james.mime4j.parser.AbstractContentHandler; import org.apache.james.mime4j.parser.MimeStreamParser; import org.apache.james.mime4j.stream.BodyDescriptor; import org.apache.james.mime4j.stream.MimeConfig; +import org.apache.james.server.core.MimeMessageInputStream; import org.apache.mailet.Mail; +import org.apache.mailet.base.AutomaticallySentMailDetector; public class AutomaticallySentMailDetectorImpl implements AutomaticallySentMailDetector { @@ -100,7 +102,7 @@ public class AutomaticallySentMailDetectorImpl implements AutomaticallySentMailD .build()); parser.setContentHandler(createMdnContentHandler(resultCollector)); try { - parser.parse(mail.getMessage().getInputStream()); + parser.parse(new MimeMessageInputStream(mail.getMessage())); } catch (MimeException e) { throw new MessagingException("Can not parse Mime", e); } catch (IOException e) { diff --git a/mailet/base/src/test/java/org/apache/mailet/base/AutomaticallySentMailDetectorImplTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImplTest.java similarity index 99% rename from mailet/base/src/test/java/org/apache/mailet/base/AutomaticallySentMailDetectorImplTest.java rename to server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImplTest.java index d65422b..b827b57 100644 --- a/mailet/base/src/test/java/org/apache/mailet/base/AutomaticallySentMailDetectorImplTest.java +++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImplTest.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.mailet.base; +package org.apache.james.mailetcontainer; import static org.assertj.core.api.Assertions.assertThat; @@ -34,6 +34,7 @@ import javax.mail.util.ByteArrayDataSource; import org.apache.james.core.builder.MimeMessageBuilder; import org.apache.james.util.MimeMessageUtil; +import org.apache.mailet.base.MailAddressFixture; import org.apache.mailet.base.test.FakeMail; import org.junit.Test; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
