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]

Reply via email to