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 d56f056ecb39bac2daf46f893f4b553dabb99dd6
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Wed Jan 15 16:53:13 2025 +0100

    JAMES-4103 Bind MessageParser rather than MessageParserImpl
---
 .../mailbox/cassandra/CassandraMailboxManager.java |  4 +-
 .../mailbox/cassandra/CassandraMessageManager.java |  4 +-
 .../model/openjpa/AbstractJPAMailboxMessage.java   |  3 +-
 .../mailbox/jpa/openjpa/OpenJPAMailboxManager.java |  4 +-
 .../mailbox/inmemory/InMemoryMailboxManager.java   |  4 +-
 .../mailbox/inmemory/InMemoryMessageManager.java   |  4 +-
 .../manager/InMemoryIntegrationResources.java      | 10 ++--
 .../apache/james/mailbox/store/MessageStorer.java  | 14 ++---
 .../james/mailbox/store/StoreMailboxManager.java   |  8 +--
 .../store/mail/model/impl/MessageParser.java       | 57 ++++++++++++++++++
 .../store/mail/model/impl/MessageParserImpl.java   | 23 +-------
 .../mail/model/impl/MessageParserImplTest.java     | 68 +++++++++++-----------
 .../modules/mailbox/CassandraMailboxModule.java    |  3 +
 .../james/modules/mailbox/JPAMailboxModule.java    |  3 +
 .../james/modules/mailbox/MemoryMailboxModule.java |  3 +
 15 files changed, 129 insertions(+), 83 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index 0afe54b9b6..fe1dac1827 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -38,7 +38,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
@@ -62,7 +62,7 @@ public class CassandraMailboxManager extends 
StoreMailboxManager {
 
     @Inject
     public CassandraMailboxManager(CassandraMailboxSessionMapperFactory 
mapperFactory, SessionProvider sessionProvider,
-                                   MailboxPathLocker locker, MessageParserImpl 
messageParser,
+                                   MailboxPathLocker locker, MessageParser 
messageParser,
                                    MessageId.Factory messageIdFactory, 
EventBus eventBus,
                                    StoreMailboxAnnotationManager 
annotationManager, StoreRightManager storeRightManager,
                                    QuotaComponents quotaComponents, 
MessageSearchIndex index,
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
index fc5fdf0fb9..73862b6e55 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
@@ -37,7 +37,7 @@ import org.apache.james.mailbox.store.PreDeletionHooks;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 /**
@@ -47,7 +47,7 @@ public class CassandraMessageManager extends 
StoreMessageManager {
 
     CassandraMessageManager(CassandraMailboxSessionMapperFactory 
mapperFactory, MessageSearchIndex index,
                             EventBus eventBus, MailboxPathLocker locker, 
Mailbox mailbox, QuotaManager quotaManager,
-                            QuotaRootResolver quotaRootResolver, 
MessageParserImpl messageParser, MessageId.Factory messageIdFactory,
+                            QuotaRootResolver quotaRootResolver, MessageParser 
messageParser, MessageId.Factory messageIdFactory,
                             BatchSizes batchSizes,
                             StoreRightManager storeRightManager,
                             PreDeletionHooks preDeletionHooks,
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
index e8335f2938..62c94c6238 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
@@ -61,6 +61,7 @@ import 
org.apache.james.mailbox.store.mail.model.DelegatingMailboxMessage;
 import org.apache.james.mailbox.store.mail.model.FlagsFactory;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
 import org.apache.james.mailbox.store.mail.model.impl.Properties;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
@@ -558,7 +559,7 @@ public abstract class AbstractJPAMailboxMessage implements 
MailboxMessage {
     public List<MessageAttachmentMetadata> getAttachments() {
         try {
             AtomicInteger counter = new AtomicInteger(0);
-            MessageParserImpl.ParsingResult parsingResult = new 
MessageParserImpl().retrieveAttachments(getFullContent());
+            MessageParser.ParsingResult parsingResult = new 
MessageParserImpl().retrieveAttachments(getFullContent());
             ImmutableList<MessageAttachmentMetadata> result = parsingResult
                 .getAttachments()
                 .stream()
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index 06145be925..b82d46ba98 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -38,7 +38,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
@@ -55,7 +55,7 @@ public class OpenJPAMailboxManager extends 
StoreMailboxManager {
     @Inject
     public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory,
                                  SessionProvider sessionProvider,
-                                 MessageParserImpl messageParser,
+                                 MessageParser messageParser,
                                  MessageId.Factory messageIdFactory,
                                  EventBus eventBus,
                                  StoreMailboxAnnotationManager 
annotationManager,
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 062766afd7..aa350a8a69 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -38,7 +38,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
@@ -54,7 +54,7 @@ public class InMemoryMailboxManager extends 
StoreMailboxManager {
 
     @Inject
     public InMemoryMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, SessionProvider sessionProvider,
-                                  MailboxPathLocker locker, MessageParserImpl 
messageParser, MessageId.Factory messageIdFactory,
+                                  MailboxPathLocker locker, MessageParser 
messageParser, MessageId.Factory messageIdFactory,
                                   EventBus eventBus,
                                   StoreMailboxAnnotationManager 
annotationManager,
                                   StoreRightManager storeRightManager,
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
index 2de53ef6e0..35dd6b1a60 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
@@ -37,7 +37,7 @@ import org.apache.james.mailbox.store.PreDeletionHooks;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 public class InMemoryMessageManager extends StoreMessageManager {
@@ -48,7 +48,7 @@ public class InMemoryMessageManager extends 
StoreMessageManager {
                                   Mailbox mailbox,
                                   QuotaManager quotaManager,
                                   QuotaRootResolver quotaRootResolver,
-                                  MessageParserImpl messageParser,
+                                  MessageParser messageParser,
                                   MessageId.Factory messageIdFactory,
                                   BatchSizes batchSizes,
                                   StoreRightManager storeRightManager,
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 493bbf815c..6ab2a9df3f 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -63,7 +63,7 @@ import 
org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.NaiveThreadIdGuessingAlgorithm;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
@@ -119,10 +119,10 @@ public class InMemoryIntegrationResources implements 
IntegrationResources<StoreM
         }
 
         interface RequireMessageParser {
-            RequireSearchIndex messageParser(MessageParser messageParser);
+            RequireSearchIndex messageParser(MessageParserImpl messageParser);
 
             default RequireSearchIndex defaultMessageParser() {
-                return messageParser(new MessageParser());
+                return messageParser(new MessageParserImpl());
             }
         }
 
@@ -208,7 +208,7 @@ public class InMemoryIntegrationResources implements 
IntegrationResources<StoreM
         private Optional<Integer> limitAnnotationCount;
         private Optional<Function<BaseQuotaComponentsStage, QuotaManager>> 
quotaManager;
         private Optional<Integer> limitAnnotationSize;
-        private Optional<MessageParser> messageParser;
+        private Optional<MessageParserImpl> messageParser;
         private Optional<UpdatableTickingClock> updatableTickingClock;
         private Optional<Function<MailboxManagerSearchIndexStage, 
MessageSearchIndex>> searchIndexFactory;
         private 
ImmutableSet.Builder<Function<MailboxManagerPreInstanciationStage, 
PreDeletionHook>> preDeletionHooksFactories;
@@ -229,7 +229,7 @@ public class InMemoryIntegrationResources implements 
IntegrationResources<StoreM
         }
 
         @Override
-        public Builder messageParser(MessageParser messageParser) {
+        public Builder messageParser(MessageParserImpl messageParser) {
             this.messageParser = Optional.of(messageParser);
             return this;
         }
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
index 488d3f663a..d516cee44b 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
@@ -42,7 +42,7 @@ import 
org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.MimeMessageId;
 import org.apache.james.mailbox.store.mail.model.Subject;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.utils.MimeMessageHeadersUtil;
 import org.apache.james.mime4j.dom.Message;
@@ -78,13 +78,13 @@ public interface MessageStorer {
         private final MessageId.Factory messageIdFactory;
         private final MessageFactory messageFactory;
         private final AttachmentMapperFactory attachmentMapperFactory;
-        private final MessageParserImpl messageParser;
+        private final MessageParser messageParser;
         private final ThreadIdGuessingAlgorithm threadIdGuessingAlgorithm;
         private final Clock clock;
 
         public WithAttachment(MailboxSessionMapperFactory mapperFactory, 
MessageId.Factory messageIdFactory,
                               MessageFactory messageFactory, 
AttachmentMapperFactory attachmentMapperFactory,
-                              MessageParserImpl messageParser, 
ThreadIdGuessingAlgorithm threadIdGuessingAlgorithm, Clock clock) {
+                              MessageParser messageParser, 
ThreadIdGuessingAlgorithm threadIdGuessingAlgorithm, Clock clock) {
             this.mapperFactory = mapperFactory;
             this.messageIdFactory = messageIdFactory;
             this.messageFactory = messageFactory;
@@ -126,22 +126,22 @@ public interface MessageStorer {
                 parsingResults -> 
Mono.fromRunnable(parsingResults::dispose).subscribeOn(Schedulers.boundedElastic()));
         }
 
-        private MessageParserImpl.ParsingResult extractAttachments(Content 
contentIn, Optional<Message> maybeMessage) {
+        private MessageParser.ParsingResult extractAttachments(Content 
contentIn, Optional<Message> maybeMessage) {
             return maybeMessage.map(message -> {
                 try {
-                    return new 
MessageParserImpl.ParsingResult(messageParser.retrieveAttachments(message), () 
-> {
+                    return new 
MessageParser.ParsingResult(messageParser.retrieveAttachments(message), () -> {
 
                     });
                 } catch (Exception e) {
                     LOGGER.warn("Error while parsing mail's attachments: {}", 
e.getMessage(), e);
-                    return MessageParserImpl.ParsingResult.EMPTY;
+                    return MessageParser.ParsingResult.EMPTY;
                 }
             }).orElseGet(() -> {
                 try (InputStream inputStream = contentIn.getInputStream()) {
                     return messageParser.retrieveAttachments(inputStream);
                 } catch (Exception e) {
                     LOGGER.warn("Error while parsing mail's attachments: {}", 
e.getMessage(), e);
-                    return MessageParserImpl.ParsingResult.EMPTY;
+                    return MessageParser.ParsingResult.EMPTY;
                 }
             });
         }
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 2d0464cb15..4eda433a06 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -81,7 +81,7 @@ import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
@@ -124,7 +124,7 @@ public class StoreMailboxManager implements MailboxManager {
     private final MailboxSessionMapperFactory mailboxSessionMapperFactory;
     private final MailboxAnnotationManager annotationManager;
     private final MailboxPathLocker locker;
-    private final MessageParserImpl messageParser;
+    private final MessageParser messageParser;
     private final Factory messageIdFactory;
     private final SessionProvider sessionProvider;
     private final QuotaManager quotaManager;
@@ -138,7 +138,7 @@ public class StoreMailboxManager implements MailboxManager {
 
     @Inject
     public StoreMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, SessionProvider sessionProvider,
-                               MailboxPathLocker locker, MessageParserImpl 
messageParser,
+                               MailboxPathLocker locker, MessageParser 
messageParser,
                                Factory messageIdFactory, 
MailboxAnnotationManager annotationManager,
                                EventBus eventBus, StoreRightManager 
storeRightManager,
                                QuotaComponents quotaComponents, 
MessageSearchIndex searchIndex, MailboxManagerConfiguration configuration,
@@ -223,7 +223,7 @@ public class StoreMailboxManager implements MailboxManager {
         return storeRightManager;
     }
 
-    protected MessageParserImpl getMessageParser() {
+    protected MessageParser getMessageParser() {
         return messageParser;
     }
 
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
new file mode 100644
index 0000000000..d7e11f6898
--- /dev/null
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
@@ -0,0 +1,57 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailbox.store.mail.model.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.james.mailbox.model.ParsedAttachment;
+import org.apache.james.mime4j.dom.Message;
+
+import com.google.common.collect.ImmutableList;
+
+public interface MessageParser {
+    class ParsingResult {
+        public static final MessageParser.ParsingResult EMPTY = new 
MessageParser.ParsingResult(ImmutableList.of(), () -> {
+
+        });
+
+        private final List<ParsedAttachment> attachments;
+        private final Runnable dispose;
+
+        public ParsingResult(List<ParsedAttachment> attachments, Runnable 
dispose) {
+            this.attachments = attachments;
+            this.dispose = dispose;
+        }
+
+        public List<ParsedAttachment> getAttachments() {
+            return attachments;
+        }
+
+        public void dispose() {
+            dispose.run();
+        }
+    }
+
+    MessageParser.ParsingResult retrieveAttachments(InputStream fullContent) 
throws IOException;
+
+    List<ParsedAttachment> retrieveAttachments(Message message) throws 
IOException;
+}
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java
index 58bf11d69f..2069986e4e 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java
@@ -53,28 +53,7 @@ import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteSource;
 
-public class MessageParserImpl {
-    public static class ParsingResult {
-        public static final ParsingResult EMPTY = new 
ParsingResult(ImmutableList.of(), () -> {
-
-        });
-
-        private final List<ParsedAttachment> attachments;
-        private final Runnable dispose;
-
-        public ParsingResult(List<ParsedAttachment> attachments, Runnable 
dispose) {
-            this.attachments = attachments;
-            this.dispose = dispose;
-        }
-
-        public List<ParsedAttachment> getAttachments() {
-            return attachments;
-        }
-
-        public void dispose() {
-            dispose.run();
-        }
-    }
+public class MessageParserImpl implements MessageParser {
 
     private static final String TEXT_MEDIA_TYPE = "text";
     private static final String CONTENT_TYPE = "Content-Type";
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java
index 977f2cc79d..24004bbc52 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java
@@ -50,28 +50,28 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldBeEmptyWhenNoAttachment() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noAttachment.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noAttachment.eml"));
 
         assertThat(attachments.getAttachments()).isEmpty();
     }
 
     @Test
     void getAttachmentsShouldIgnoreInlineWhenMixedMultipart() throws Exception 
{
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/inlined-mixed.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/inlined-mixed.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(2);
     }
 
     @Test
     void getAttachmentsShouldRetrieveAttachmentsWhenOneAttachment() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void getAttachmentsShouldRetrieveAttachmentNameWhenOne() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         Optional<String> expectedName = Optional.of("exploits_of_a_mom.png");
@@ -80,14 +80,14 @@ class MessageParserImplTest {
 
     @Test
     void 
getAttachmentsShouldRetrieveAttachmentNameWhenOneContainingNonASCIICharacters() 
throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/messageWithNonASCIIFilenameAttachment.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/messageWithNonASCIIFilenameAttachment.eml"));
         assertThat(attachments.getAttachments()).hasSize(1);
         
assertThat(attachments.getAttachments().get(0).getName()).contains("ديناصور.odt");
     }
 
     @Test
     void getAttachmentsShouldRetrieveEmptyNameWhenNone() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutName.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutName.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         
assertThat(attachments.getAttachments().get(0).getName()).isEqualTo(Optional.empty());
@@ -95,7 +95,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldNotFailWhenContentTypeIsNotHere() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutContentType.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutContentType.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         assertThat(attachments.getAttachments().get(0).getContentType())
@@ -104,7 +104,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldNotFailWhenContentTypeIsEmpty() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithEmptyContentType.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithEmptyContentType.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         assertThat(attachments.getAttachments().get(0).getContentType())
@@ -113,7 +113,7 @@ class MessageParserImplTest {
 
     @Test
     void 
getAttachmentsShouldRetrieveTheAttachmentContentTypeWhenOneAttachment() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         assertThat(attachments.getAttachments().get(0).getContentType())
@@ -122,21 +122,21 @@ class MessageParserImplTest {
 
     @Test
     void retrieveAttachmentsShouldNotFailOnMessagesWithManyHeaders() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithManyHeaders.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithManyHeaders.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void retrieveAttachmentsShouldNotFailOnMessagesWithLongHeaders() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithLongHeaders.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithLongHeaders.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void 
getAttachmentsShouldRetrieveTheAttachmentContentTypeWhenOneAttachmentWithSimpleContentType()
 throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithSimpleContentType.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithSimpleContentType.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         assertThat(attachments.getAttachments().get(0).getContentType())
@@ -145,7 +145,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldReturnTheExpectedAttachment() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"));
 
         ParsedAttachment attachment = attachments.getAttachments().get(0);
         assertThat(attachment.getContent().openStream())
@@ -154,14 +154,14 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldRetrieveAttachmentsWhenTwo() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(2);
     }
 
     @Test
     void retrieveAttachmentShouldUseFilenameAsNameWhenNoName() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameOnly.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameOnly.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1)
             .extracting(ParsedAttachment::getName)
@@ -172,7 +172,7 @@ class MessageParserImplTest {
 
     @Test
     void retrieveAttachmentShouldUseNameWhenBothNameAndFilename() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameAndName.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameAndName.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1)
             .extracting(ParsedAttachment::getName)
@@ -183,21 +183,21 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldRetrieveEmbeddedAttachmentsWhenSome() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithInline.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithInline.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void getAttachmentsShouldRetrieveInlineAttachmentsWhenSome() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithAttachment.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithAttachment.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void getAttachmentsShouldRetrieveTheAttachmentCIDWhenOne() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         
assertThat(attachments.getAttachments().get(0).getCid()).isEqualTo(Optional.of(Cid.from("part1.37a15c92.a7c34...@linagora.com")));
@@ -205,7 +205,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldSetInlineWhenOneInlinedAttachment() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
         assertThat(attachments.getAttachments().get(0).isInline()).isTrue();
@@ -213,63 +213,63 @@ class MessageParserImplTest {
 
     @Test
     void getAttachementsShouldRetrieveHtmlAttachementsWhenSome() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneHtmlAttachmentAndSomeTextInlined.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneHtmlAttachmentAndSomeTextInlined.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void 
getAttachementsShouldRetrieveAttachmentsWhenSomeAreInTheMultipartAlternative() 
throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/invitationEmailFromOP.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/invitationEmailFromOP.eml"));
         
         assertThat(attachments.getAttachments()).hasSize(6);
     }
 
     @Test
     void 
getAttachmentsShouldNotConsiderUnknownContentDispositionAsAttachments() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/unknownDisposition.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/unknownDisposition.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(0);
     }
 
     @Test
     void 
getAttachmentsShouldConsiderNoContentDispositionAsAttachmentsWhenCID() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noContentDispositionWithCID.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noContentDispositionWithCID.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void getAttachmentsShouldRetrieveAttachmentsWhenNoCidForInlined() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithNoCid.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithNoCid.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void getAttachmentsShouldRetrieveAttachmentsWhenEmptyCidForInlined() 
throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithEmptyCid.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithEmptyCid.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void getAttachmentsShouldRetrieveAttachmentsWhenBlankCidForInlined() 
throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithBlankCid.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithBlankCid.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
     }
 
     @Test
     void 
getAttachmentsShouldRetrieveAttachmentsWhenOneFailOnWrongContentDisposition() 
throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/multiAttachmentsWithOneWrongContentDisposition.eml"));
+        MessageParser.ParsingResult attachments = 
testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/multiAttachmentsWithOneWrongContentDisposition.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(2);
     }
 
     @Test
     void 
getAttachmentsShouldRetrieveOneAttachmentWhenMessageWithAttachmentContentDisposition()
 throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(
+        MessageParser.ParsingResult attachments = testee.retrieveAttachments(
             
ClassLoader.getSystemResourceAsStream("eml/emailWithOnlyAttachment.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1);
@@ -277,7 +277,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldRetrieveCharset() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(
+        MessageParser.ParsingResult attachments = testee.retrieveAttachments(
             ClassLoader.getSystemResourceAsStream("eml/charset.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(1)
@@ -288,7 +288,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldRetrieveAllPartsCharset() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(
+        MessageParser.ParsingResult attachments = testee.retrieveAttachments(
             ClassLoader.getSystemResourceAsStream("eml/charset2.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(2)
@@ -299,7 +299,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldNotConsiderTextCalendarAsAttachmentsByDefault() 
throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(
+        MessageParser.ParsingResult attachments = testee.retrieveAttachments(
             ClassLoader.getSystemResourceAsStream("eml/calendar.eml"));
 
         assertThat(attachments.getAttachments())
@@ -308,7 +308,7 @@ class MessageParserImplTest {
 
     @Test
     void getAttachmentsShouldConsiderTextCalendarAsAttachments() throws 
Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(
+        MessageParser.ParsingResult attachments = testee.retrieveAttachments(
             ClassLoader.getSystemResourceAsStream("eml/calendar2.eml"));
 
         assertThat(attachments.getAttachments())
@@ -319,7 +319,7 @@ class MessageParserImplTest {
 
     @Test
     void gpgSignatureShouldBeConsideredAsAnAttachment() throws Exception {
-        MessageParserImpl.ParsingResult attachments = 
testee.retrieveAttachments(
+        MessageParser.ParsingResult attachments = testee.retrieveAttachments(
             ClassLoader.getSystemResourceAsStream("eml/signedMessage.eml"));
 
         assertThat(attachments.getAttachments()).hasSize(2)
diff --git 
a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index f0f93b5908..fd6c2b9f1e 100644
--- 
a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ 
b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -123,6 +123,8 @@ import 
org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
 import org.apache.james.mailbox.store.mail.UidProvider;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
 import org.apache.james.mailbox.store.user.SubscriptionMapperFactory;
 import org.apache.james.user.api.DeleteUserDataTaskStep;
 import org.apache.james.user.api.UsernameChangeTaskStep;
@@ -215,6 +217,7 @@ public class CassandraMailboxModule extends AbstractModule {
         bind(SessionProvider.class).to(SessionProviderImpl.class);
         bind(AttachmentContentLoader.class).to(AttachmentManager.class);
         
bind(MailboxCounterCorrector.class).to(CassandraMailboxCounterCorrector.class);
+        bind(MessageParser.class).toInstance(new MessageParserImpl());
 
         
bind(Limit.class).annotatedWith(Names.named(CassandraEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256));
         
bind(Limit.class).annotatedWith(Names.named(CassandraMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256));
diff --git 
a/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
 
b/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
index f9150f564d..0c209c7111 100644
--- 
a/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
+++ 
b/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
@@ -65,6 +65,8 @@ import 
org.apache.james.mailbox.store.mail.NaiveThreadIdGuessingAlgorithm;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
 import org.apache.james.mailbox.store.user.SubscriptionMapperFactory;
 import org.apache.james.modules.data.JPAEntityManagerModule;
 import org.apache.james.user.api.DeleteUserDataTaskStep;
@@ -122,6 +124,7 @@ public class JPAMailboxModule extends AbstractModule {
         
bind(AttachmentIdFactory.class).to(StringBackedAttachmentIdFactory.class);
         
bind(AttachmentContentLoader.class).to(JPAAttachmentContentLoader.class);
         
bind(MailboxCounterCorrector.class).toInstance(MailboxCounterCorrector.DEFAULT);
+        bind(MessageParser.class).toInstance(new MessageParserImpl());
 
         bind(ReIndexer.class).to(ReIndexerImpl.class);
         
diff --git 
a/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
 
b/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
index 5fbb80e4ce..b4ab0044e9 100644
--- 
a/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
+++ 
b/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
@@ -77,6 +77,8 @@ import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.SearchThreadIdGuessingAlgorithm;
 import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm;
 import org.apache.james.mailbox.store.mail.UidProvider;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl;
 import org.apache.james.mailbox.store.user.SubscriptionMapperFactory;
 import org.apache.james.user.api.DeleteUserDataTaskStep;
 import org.apache.james.user.api.UsernameChangeTaskStep;
@@ -132,6 +134,7 @@ public class MemoryMailboxModule extends AbstractModule {
         bind(AttachmentContentLoader.class).to(AttachmentManager.class);
 
         
bind(DeletedMessageMetadataVault.class).to(MemoryDeletedMessageMetadataVault.class);
+        bind(MessageParser.class).toInstance(new MessageParserImpl());
         
bind(MailboxCounterCorrector.class).toInstance(MailboxCounterCorrector.DEFAULT);
 
         bind(InMemoryMailboxSessionMapperFactory.class).in(Scopes.SINGLETON);


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org


Reply via email to