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 935e1f5750841148ded392b9057917df5588926c
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Fri Jan 17 15:22:37 2020 +0700

    JAMES-2997 step #10 Mailbox backend is responsible of creating 
messageAttachments
    
    We should avoid to compute them in parallel in JMAP and rather rely on
    mailboxManager append result, which can be enriched to convey attachments.
---
 .../listeners/SetCustomFlagOnBigMessagesTest.java  | 12 ++---
 .../org/apache/james/mailbox/MessageManager.java   | 40 +++++++++++++-
 .../mailbox/MailboxManagerStressContract.java      |  2 +-
 .../apache/james/mailbox/MailboxManagerTest.java   | 52 ++++++++++--------
 .../mailbox/manager/ManagerTestProvisionner.java   |  4 +-
 .../ElasticSearchIntegrationTest.java              | 16 +++---
 .../search/ElasticSearchSearcherTest.java          |  3 +-
 .../james/vault/DeletedMessageVaultHookTest.java   |  3 +-
 .../james/mailbox/store/StoreMessageManager.java   | 20 ++++---
 .../store/AbstractCombinationManagerTest.java      | 62 +++++++++++-----------
 .../store/AbstractMessageIdManagerStorageTest.java |  1 +
 .../search/AbstractMessageSearchIndexTest.java     | 52 +++++++++---------
 .../tools/indexer/MessageIdReIndexerImplTest.java  |  2 +-
 .../mailbox/tools/indexer/ReIndexerImplTest.java   | 12 ++---
 .../james/imap/processor/AppendProcessor.java      |  3 +-
 .../org/apache/james/modules/MailboxProbeImpl.java |  4 +-
 .../mailets/delivery/MailboxAppender.java          |  8 +--
 .../mailets/delivery/LocalDeliveryTest.java        |  8 ++-
 .../james/jmap/draft/methods/MessageAppender.java  | 38 ++++++-------
 .../james/jmap/draft/methods/SendMDNProcessor.java | 24 +--------
 .../org/apache/james/jmap/draft/model/JmapMDN.java |  3 +-
 .../MessageFastViewProjectionItemFactoryTest.java  |  2 +-
 .../jmap/draft/methods/GetMessagesMethodTest.java  | 52 +++++++++---------
 .../methods/SetMessagesUpdateProcessorTest.java    |  4 +-
 .../message/view/MessageFastViewFactoryTest.java   |  8 +--
 .../message/view/MessageFullViewFactoryTest.java   |  2 +-
 .../message/view/MessageHeaderViewFactoryTest.java |  2 +-
 .../view/MessageMetadataViewFactoryTest.java       |  2 +-
 .../jmap/draft/send/PostDequeueDecoratorTest.java  | 16 +++---
 ...mputeMessageFastViewProjectionListenerTest.java | 12 ++---
 ...llFastViewProjectionItemsRequestToTaskTest.java |  4 +-
 ...erFastViewProjectionItemsRequestToTaskTest.java |  4 +-
 .../webadmin/vault/routes/RestoreService.java      |  2 +-
 .../james/webadmin/routes/MailboxesRoutesTest.java | 16 +++---
 .../james/webadmin/routes/MessageRoutesTest.java   |  4 +-
 .../webadmin/routes/UserMailboxesRoutesTest.java   |  4 +-
 .../james/webadmin/service/ExportServiceTest.java  |  3 +-
 .../service/MailboxesExportRequestToTaskTest.java  |  4 +-
 38 files changed, 273 insertions(+), 237 deletions(-)

diff --git 
a/examples/custom-listeners/src/test/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessagesTest.java
 
b/examples/custom-listeners/src/test/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessagesTest.java
index e3340d5..d198a94 100644
--- 
a/examples/custom-listeners/src/test/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessagesTest.java
+++ 
b/examples/custom-listeners/src/test/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessagesTest.java
@@ -81,7 +81,7 @@ class SetCustomFlagOnBigMessagesTest {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(smallMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         assertThat(getMessageFlags(composedId.getUid()))
             .allSatisfy(flags -> 
assertThat(flags.contains(BIG_MESSAGE)).isFalse());
@@ -97,7 +97,7 @@ class SetCustomFlagOnBigMessagesTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(appendMessageFlag)
                 .build(smallMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         assertThat(getMessageFlags(composedId.getUid()))
             .allSatisfy(flags -> {
@@ -111,7 +111,7 @@ class SetCustomFlagOnBigMessagesTest {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(bigMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         assertThat(getMessageFlags(composedId.getUid()))
             .allSatisfy(flags -> 
assertThat(flags.contains(BIG_MESSAGE)).isTrue());
@@ -122,7 +122,7 @@ class SetCustomFlagOnBigMessagesTest {
         ComposedMessageId composedIdOfSmallMessage = 
inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(smallMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         MessageResult addedMessage = inboxMessageManager
             .getMessages(MessageRange.one(composedIdOfSmallMessage.getUid()), 
FetchGroup.MINIMAL, mailboxSession)
@@ -154,7 +154,7 @@ class SetCustomFlagOnBigMessagesTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(appendMessageFlag)
                 .build(bigMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         assertThat(getMessageFlags(composedId.getUid()))
             .allSatisfy(flags -> {
@@ -173,7 +173,7 @@ class SetCustomFlagOnBigMessagesTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(appendMessageFlag)
                 .build(bigMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         assertThat(getMessageFlags(composedId.getUid()))
             .allSatisfy(flags -> 
assertThat(flags.contains(BIG_MESSAGE)).isTrue());
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
index 52c0f6e..2c67375 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
@@ -28,6 +28,7 @@ import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Stream;
 
@@ -44,6 +45,7 @@ import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxCounters;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.MessageResultIterator;
@@ -138,6 +140,40 @@ public interface MessageManager {
      */
     Map<MessageUid, Flags> setFlags(Flags flags, FlagsUpdateMode 
flagsUpdateMode, MessageRange set, MailboxSession mailboxSession) throws 
MailboxException;
 
+    class AppendResult {
+        private final ComposedMessageId ids;
+        private final List<MessageAttachment> messageAttachments;
+
+        public AppendResult(ComposedMessageId ids, List<MessageAttachment> 
messageAttachments) {
+            this.ids = ids;
+            this.messageAttachments = messageAttachments;
+        }
+
+        public ComposedMessageId getIds() {
+            return ids;
+        }
+
+        public List<MessageAttachment> getMessageAttachments() {
+            return messageAttachments;
+        }
+
+        @Override
+        public final boolean equals(Object o) {
+            if (o instanceof AppendResult) {
+                AppendResult that = (AppendResult) o;
+
+                return Objects.equals(this.ids, that.ids)
+                    && Objects.equals(this.messageAttachments, 
that.messageAttachments);
+            }
+            return false;
+        }
+
+        @Override
+        public final int hashCode() {
+            return Objects.hash(ids, messageAttachments);
+        }
+    }
+
     /**
      * Appends a message to this mailbox. This method must return a higher UID
      * as the last call in every case which also needs to be unique for the
@@ -157,7 +193,7 @@ public interface MessageManager {
      * @throws MailboxException
      *             when message cannot be appended
      */
-    ComposedMessageId appendMessage(InputStream msgIn, Date internalDate, 
MailboxSession mailboxSession, boolean isRecent, Flags flags) throws 
MailboxException;
+    AppendResult appendMessage(InputStream msgIn, Date internalDate, 
MailboxSession mailboxSession, boolean isRecent, Flags flags) throws 
MailboxException;
 
     class AppendCommand {
 
@@ -265,7 +301,7 @@ public interface MessageManager {
         }
     }
 
-    ComposedMessageId appendMessage(AppendCommand appendCommand, 
MailboxSession session) throws MailboxException;
+    AppendResult appendMessage(AppendCommand appendCommand, MailboxSession 
session) throws MailboxException;
 
     /**
      * Gets messages in the given range. The messages may get fetched under
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressContract.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressContract.java
index 3bf6d8f..4821757 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressContract.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressContract.java
@@ -93,7 +93,7 @@ public interface MailboxManagerStressContract<T extends 
MailboxManager> {
                         MessageManager.AppendCommand
                             .from(Message.Builder.of()
                                 .setSubject("test")
-                                .setBody("testmail", StandardCharsets.UTF_8)), 
mailboxSession);
+                                .setBody("testmail", StandardCharsets.UTF_8)), 
mailboxSession).getIds();
 
                     System.out.println("Append message with uid=" + 
messageId.getUid());
                     if (uids.put(messageId.getUid(), new Object()) != null) {
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index f51c124..7382127 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -824,7 +824,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
 
         @Test
         void deleteMessageShouldFireExpungedEvent() throws Exception {
-            ComposedMessageId messageId = 
inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message),
 session);
+            ComposedMessageId messageId = 
inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message),
 session).getIds();
             inboxManager.setFlags(new Flags(Flags.Flag.DELETED), 
MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session);
 
             retrieveEventBus(mailboxManager).register(listener, new 
MailboxIdRegistrationKey(inboxId));
@@ -913,7 +913,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             
assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID));
 
             Optional<MailboxId> targetMailboxId = 
mailboxManager.createMailbox(newPath, session);
-            ComposedMessageId messageId = 
inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+            ComposedMessageId messageId = 
inboxManager.appendMessage(AppendCommand.builder().build(message), 
session).getIds();
 
             retrieveEventBus(mailboxManager).register(listener, new 
MailboxIdRegistrationKey(targetMailboxId.get()));
             mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, 
session);
@@ -946,7 +946,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             
assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID));
 
             Optional<MailboxId> targetMailboxId = 
mailboxManager.createMailbox(newPath, session);
-            ComposedMessageId messageId = 
inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+            ComposedMessageId messageId = 
inboxManager.appendMessage(AppendCommand.builder().build(message), 
session).getIds();
 
             retrieveEventBus(mailboxManager).register(listener, new 
MailboxIdRegistrationKey(targetMailboxId.get()));
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, 
session);
@@ -964,7 +964,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             
assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID));
 
             mailboxManager.createMailbox(newPath, session);
-            ComposedMessageId messageId = 
inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+            ComposedMessageId messageId = 
inboxManager.appendMessage(AppendCommand.builder().build(message), 
session).getIds();
 
             retrieveEventBus(mailboxManager).register(listener, new 
MailboxIdRegistrationKey(inboxId));
             mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, 
session);
@@ -1194,7 +1194,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             MessageManager cacahueteMessageManager = 
mailboxManager.getMailbox(cacahueteMailboxId, session);
             MessageId cacahueteMessageId = cacahueteMessageManager
                 .appendMessage(AppendCommand.from(message), session)
-                .getMessageId();
+                .getIds().getMessageId();
 
             MailboxPath pirouetteFilder = MailboxPath.forUser(USER_1, 
"PIROUETTE");
             MailboxId pirouetteMailboxId = 
mailboxManager.createMailbox(pirouetteFilder, session).get();
@@ -1202,7 +1202,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
 
             MessageId pirouetteMessageId = pirouetteMessageManager
                 .appendMessage(AppendCommand.from(message), session)
-                .getMessageId();
+                .getIds().getMessageId();
 
             MultimailboxesSearchQuery multiMailboxesQuery = 
MultimailboxesSearchQuery
                 .from(new SearchQuery())
@@ -1226,7 +1226,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
 
             MessageId messageId = delegatedMessageManager
                 .appendMessage(AppendCommand.from(message), 
sessionFromDelegater)
-                .getMessageId();
+                .getIds().getMessageId();
 
             mailboxManager.setRights(delegatedMailboxPath,
                 MailboxACL.EMPTY.apply(MailboxACL.command()
@@ -1376,7 +1376,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
 
             MessageId messageId = searchedMessageManager
                 .appendMessage(AppendCommand.from(message), session)
-                .getMessageId();
+                .getIds().getMessageId();
 
             MultimailboxesSearchQuery multiMailboxesQuery = 
MultimailboxesSearchQuery
                 .from(new SearchQuery())
@@ -1842,9 +1842,11 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
 
             MessageId messageId1 = inboxMessageManager
                 .appendMessage(AppendCommand.from(message), session)
+                .getIds()
                 .getMessageId();
             MessageId messageId2 = inboxMessageManager
                 .appendMessage(AppendCommand.from(message), session)
+                .getIds()
                 .getMessageId();
 
             mailboxManager.moveMessages(MessageRange.all(), inbox, 
otherMailbox, session);
@@ -1883,9 +1885,11 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             MessageManager inboxMessageManager = 
mailboxManager.getMailbox(inbox, session);
 
             ComposedMessageId composedMessageId1 = inboxMessageManager
-                .appendMessage(AppendCommand.from(message), session);
+                .appendMessage(AppendCommand.from(message), session)
+                .getIds();
             MessageId messageId2 = inboxMessageManager
                 .appendMessage(AppendCommand.from(message), session)
+                .getIds()
                 .getMessageId();
 
             
mailboxManager.moveMessages(MessageRange.one(composedMessageId1.getUid()), 
inbox, otherMailbox, session);
@@ -1975,9 +1979,11 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
 
             MessageId messageId1 = inboxMessageManager
                 .appendMessage(AppendCommand.from(message), session)
+                .getIds()
                 .getMessageId();
             MessageId messageId2 = inboxMessageManager
                 .appendMessage(AppendCommand.from(message), session)
+                .getIds()
                 .getMessageId();
 
             mailboxManager.copyMessages(MessageRange.all(), inbox, 
otherMailbox, session);
@@ -2015,9 +2021,11 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             MessageManager inboxMessageManager = 
mailboxManager.getMailbox(inbox, session);
 
             ComposedMessageId composedMessageId1 = inboxMessageManager
-                .appendMessage(AppendCommand.from(message), session);
+                .appendMessage(AppendCommand.from(message), session)
+                .getIds();
             MessageId messageId2 = inboxMessageManager
                 .appendMessage(AppendCommand.from(message), session)
+                .getIds()
                 .getMessageId();
 
             MessageId messageId1 = composedMessageId1.getMessageId();
@@ -2205,7 +2213,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             void expungeShouldCallAllPreDeletionHooks() throws Exception {
                 ComposedMessageId composeId = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
                 inboxManager.expunge(MessageRange.one(composeId.getUid()), 
session);
 
                 ArgumentCaptor<PreDeletionHook.DeleteOperation> 
preDeleteCaptor1 = 
ArgumentCaptor.forClass(PreDeletionHook.DeleteOperation.class);
@@ -2226,7 +2234,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             void deleteMailboxShouldCallAllPreDeletionHooks() throws Exception 
{
                 ComposedMessageId composeId = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
                 mailboxManager.deleteMailbox(inbox, session);
 
                 ArgumentCaptor<PreDeletionHook.DeleteOperation> 
preDeleteCaptor1 = 
ArgumentCaptor.forClass(PreDeletionHook.DeleteOperation.class);
@@ -2247,7 +2255,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             void deleteMailboxByIdShouldCallAllPreDeletionHooks() throws 
Exception {
                 ComposedMessageId composeId = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
                 mailboxManager.deleteMailbox(inboxId, session);
 
                 ArgumentCaptor<PreDeletionHook.DeleteOperation> 
preDeleteCaptor1 = 
ArgumentCaptor.forClass(PreDeletionHook.DeleteOperation.class);
@@ -2268,10 +2276,10 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             void 
expungeShouldCallAllPreDeletionHooksOnEachMessageDeletionCall() throws 
Exception {
                 ComposedMessageId composeId1 = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
                 ComposedMessageId composeId2 = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
 
                 inboxManager.expunge(MessageRange.one(composeId1.getUid()), 
session);
                 inboxManager.expunge(MessageRange.one(composeId2.getUid()), 
session);
@@ -2294,7 +2302,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             void 
expungeShouldCallAllPreDeletionHooksOnlyOnMessagesMarkedAsDeleted() throws 
Exception {
                 ComposedMessageId composeId1 = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
                 inboxManager.appendMessage(AppendCommand.builder()
                     .build(message), session);
 
@@ -2329,10 +2337,10 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
             void 
expungeShouldCallAllPreDeletionHooksOnEachMessageDeletionOnDifferentMailboxes() 
throws Exception {
                 ComposedMessageId composeId1 = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
                 ComposedMessageId composeId2 = 
anotherMailboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
 
                 inboxManager.expunge(MessageRange.one(composeId1.getUid()), 
session);
                 
anotherMailboxManager.expunge(MessageRange.one(composeId2.getUid()), session);
@@ -2362,7 +2370,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
 
                 ComposedMessageId composeId1 = 
inboxManager.appendMessage(AppendCommand.builder()
                     .withFlags(new Flags(Flags.Flag.DELETED))
-                    .build(message), session);
+                    .build(message), session).getIds();
                 assertThatThrownBy(() -> 
inboxManager.expunge(MessageRange.one(composeId1.getUid()), session))
                     .isInstanceOf(RuntimeException.class);
 
@@ -2389,7 +2397,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
                         return Mono.empty();
                     });
 
-                ComposedMessageId composeId1 = 
inboxManager.appendMessage(AppendCommand.builder().build(message), session);
+                ComposedMessageId composeId1 = 
inboxManager.appendMessage(AppendCommand.builder().build(message), 
session).getIds();
                 inboxManager.setFlags(new Flags(Flags.Flag.DELETED), 
MessageManager.FlagsUpdateMode.ADD,
                     MessageRange.one(composeId1.getUid()), session);
                 inboxManager.expunge(MessageRange.all(), session);
@@ -2420,7 +2428,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
         void getMessagesShouldIncludeHasAttachmentInformation() throws 
Exception {
             ComposedMessageId composeId = 
inboxManager.appendMessage(AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.DELETED))
-                
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("eml/twoAttachmentsApi.eml")),
 session);
+                
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("eml/twoAttachmentsApi.eml")),
 session).getIds();
 
             MessageResultIterator messages = 
inboxManager.getMessages(MessageRange.one(composeId.getUid()), 
FetchGroup.MINIMAL, session);
 
@@ -2434,7 +2442,7 @@ public abstract class MailboxManagerTest<T extends 
MailboxManager> {
         void getMessagesShouldNotIncludeAttachmentInformationWhenNone() throws 
Exception {
             ComposedMessageId composeId = 
inboxManager.appendMessage(AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.DELETED))
-                .build(message), session);
+                .build(message), session).getIds();
 
             MessageResultIterator messages = 
inboxManager.getMessages(MessageRange.one(composeId.getUid()), 
FetchGroup.MINIMAL, session);
 
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestProvisionner.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestProvisionner.java
index 555cdb7..309d48b 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestProvisionner.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestProvisionner.java
@@ -99,7 +99,9 @@ public class ManagerTestProvisionner {
 
     public MessageUid appendMessage(MessageManager messageManager, 
MailboxSession session, Flags flags) throws MailboxException, 
UnsupportedEncodingException {
         return messageManager.appendMessage(new 
ByteArrayInputStream(MockMail.MAIL_TEXT_PLAIN.getBytes(StandardCharsets.UTF_8)),
-            Calendar.getInstance().getTime(), session, true, flags).getUid();
+            Calendar.getInstance().getTime(), session, true, flags)
+            .getIds()
+            .getUid();
     }
 
 }
\ No newline at end of file
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 1813ef3..51983b3 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -131,7 +131,7 @@ class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
             Message.Builder.of()
                 .setTo(recipient)
                 .setBody(Strings.repeat("0à2345678é", 3200), 
StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
@@ -150,7 +150,7 @@ class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
             Message.Builder.of()
                 .setTo(recipient)
                 .setBody(Strings.repeat("0123456789", 3300), 
StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
@@ -169,7 +169,7 @@ class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
             Message.Builder.of()
                 .setTo(recipient)
                 .setBody(Strings.repeat("0123456789 ", 5000), 
StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
@@ -188,7 +188,7 @@ class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
             Message.Builder.of()
                 .setTo(recipient)
                 .setBody(Strings.repeat("0123456789 ", 5000) + " matchMe", 
StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
@@ -208,7 +208,7 @@ class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
             Message.Builder.of()
                 .setTo(recipient)
                 .setBody(reasonableLongTerm, StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
@@ -225,14 +225,14 @@ class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
         ComposedMessageId customDateHeaderMessageId = 
messageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoader.getSystemResourceAsStream("eml/mailCustomDateHeader.eml")),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
         ComposedMessageId customStringHeaderMessageId = 
messageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoader.getSystemResourceAsStream("eml/mailCustomStringHeader.eml")),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
@@ -256,7 +256,7 @@ class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
         ComposedMessageId customStringHeaderMessageId = 
messageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoader.getSystemResourceAsStream("eml/mailCustomStringHeader.eml")),
-            session);
+            session).getIds();
 
         elasticSearch.awaitForElasticSearch();
 
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcherTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcherTest.java
index fcaa97b..444628f 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcherTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcherTest.java
@@ -167,6 +167,7 @@ class ElasticSearchSearcherTest {
             Message.Builder.of()
                 .setTo(recipient)
                 .setBody("Hello", StandardCharsets.UTF_8)),
-            session);
+            session)
+            .getIds();
     }
 }
\ No newline at end of file
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
index 8c5cfc8..4f0bfc5 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
@@ -102,7 +102,8 @@ class DeletedMessageVaultHookTest {
     private ComposedMessageId appendMessage(MessageManager messageManager) 
throws Exception {
         return 
messageManager.appendMessage(MessageManager.AppendCommand.builder()
                 .withInternalDate(INTERNAL_DATE)
-                .build(mailContent), aliceSession);
+                .build(mailContent), aliceSession)
+            .getIds();
     }
 
     @BeforeEach
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 9f2557b..1cb207e 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -44,6 +44,7 @@ import javax.mail.internet.SharedInputStream;
 import javax.mail.util.SharedFileInputStream;
 
 import org.apache.commons.io.input.TeeInputStream;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManager.MessageCapabilities;
 import org.apache.james.mailbox.MailboxPathLocker;
@@ -301,7 +302,7 @@ public class StoreMessageManager implements MessageManager {
     }
 
     @Override
-    public ComposedMessageId appendMessage(AppendCommand appendCommand, 
MailboxSession session) throws MailboxException {
+    public AppendResult appendMessage(AppendCommand appendCommand, 
MailboxSession session) throws MailboxException {
         return appendMessage(
             appendCommand.getMsgIn(),
             appendCommand.getInternalDate(),
@@ -311,7 +312,7 @@ public class StoreMessageManager implements MessageManager {
     }
 
     @Override
-    public ComposedMessageId appendMessage(InputStream msgIn, Date 
internalDate, final MailboxSession mailboxSession, boolean isRecent, Flags 
flagsToBeSet) throws MailboxException {
+    public AppendResult appendMessage(InputStream msgIn, Date internalDate, 
final MailboxSession mailboxSession, boolean isRecent, Flags flagsToBeSet) 
throws MailboxException {
         File file = null;
 
         if (!isWriteable(mailboxSession)) {
@@ -443,13 +444,13 @@ public class StoreMessageManager implements 
MessageManager {
         return bodyStartOctet;
     }
 
-    private ComposedMessageId createAndDispatchMessage(Date internalDate, 
MailboxSession mailboxSession, File file, PropertyBuilder propertyBuilder, 
Flags flags, int bodyStartOctet) throws IOException, MailboxException {
+    private AppendResult createAndDispatchMessage(Date internalDate, 
MailboxSession mailboxSession, File file, PropertyBuilder propertyBuilder, 
Flags flags, int bodyStartOctet) throws IOException, MailboxException {
         try (SharedFileInputStream contentIn = new 
SharedFileInputStream(file)) {
             final int size = (int) file.length();
             new QuotaChecker(quotaManager, quotaRootResolver, 
mailbox).tryAddition(1, size);
 
             return locker.executeWithLock(getMailboxPath(), () -> {
-                MessageMetaData data = appendMessageToStore(internalDate, 
size, bodyStartOctet, contentIn, flags, propertyBuilder, mailboxSession);
+                Pair<MessageMetaData, List<MessageAttachment>> data = 
appendMessageToStore(internalDate, size, bodyStartOctet, contentIn, flags, 
propertyBuilder, mailboxSession);
 
                 Mailbox mailbox = getMailboxEntity();
 
@@ -457,12 +458,14 @@ public class StoreMessageManager implements 
MessageManager {
                     .randomEventId()
                     .mailboxSession(mailboxSession)
                     .mailbox(mailbox)
-                    .addMetaData(data)
+                    .addMetaData(data.getLeft())
                     .build(),
                     new MailboxIdRegistrationKey(mailbox.getMailboxId()))
                     .subscribeOn(Schedulers.elastic())
                     .block();
-                return new ComposedMessageId(mailbox.getMailboxId(), 
data.getMessageId(), data.getUid());
+                MessageMetaData messageMetaData = data.getLeft();
+                ComposedMessageId ids = new 
ComposedMessageId(mailbox.getMailboxId(), messageMetaData.getMessageId(), 
messageMetaData.getUid());
+                return new AppendResult(ids, data.getRight());
             }, MailboxPathLocker.LockType.Write);
         }
     }
@@ -668,14 +671,15 @@ public class StoreMessageManager implements 
MessageManager {
         }, MailboxPathLocker.LockType.Write);
     }
 
-    private MessageMetaData appendMessageToStore(Date internalDate, int size, 
int bodyStartOctet, SharedInputStream content, Flags flags, PropertyBuilder 
propertyBuilder, MailboxSession session) throws MailboxException {
+    private Pair<MessageMetaData, List<MessageAttachment>> 
appendMessageToStore(Date internalDate, int size, int bodyStartOctet, 
SharedInputStream content, Flags flags, PropertyBuilder propertyBuilder, 
MailboxSession session) throws MailboxException {
         MessageMapper messageMapper = mapperFactory.getMessageMapper(session);
         MessageId messageId = messageIdFactory.generate();
 
         return mapperFactory.getMessageMapper(session).execute(() -> {
             List<MessageAttachment> attachments = storeAttachments(messageId, 
content, session);
             MailboxMessage message = createMessage(internalDate, size, 
bodyStartOctet, content, flags, propertyBuilder, attachments);
-            return messageMapper.add(getMailboxEntity(), message);
+            MessageMetaData metadata = messageMapper.add(getMailboxEntity(), 
message);
+            return Pair.of(metadata, attachments);
         });
     }
 
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
index 03f5900..33a7280 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
@@ -98,7 +98,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMessageCountFromMessageManagerShouldReturnDataSetInMailboxesFromMessageIdManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -111,7 +111,7 @@ public abstract class AbstractCombinationManagerTest {
         query.andCriteria(SearchQuery.all());
 
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -124,7 +124,7 @@ public abstract class AbstractCombinationManagerTest {
         query.andCriteria(SearchQuery.all());
 
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId,
             ImmutableList.of(mailbox1.getMailboxId(), 
mailbox2.getMailboxId()), session);
@@ -142,7 +142,7 @@ public abstract class AbstractCombinationManagerTest {
         SearchQuery query = new SearchQuery();
         query.andCriteria(SearchQuery.all());
 
-        ComposedMessageId composedMessageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session);
+        ComposedMessageId composedMessageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session).getIds();
 
         messageIdManager.setInMailboxes(composedMessageId.getMessageId(),
             ImmutableList.of(mailbox1.getMailboxId(), 
mailbox2.getMailboxId()), session);
@@ -161,7 +161,7 @@ public abstract class AbstractCombinationManagerTest {
         MultimailboxesSearchQuery multiMailboxesQuery = builder.build();
 
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -173,7 +173,7 @@ public abstract class AbstractCombinationManagerTest {
     void 
setFlagsToDeleteThenExpungeFromMessageManagerThenGetMessageFromMessageIdManagerShouldNotReturnAnything()
 throws Exception {
         Flags deleted = new Flags(Flag.DELETED);
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageManager1.setFlags(deleted, FlagsUpdateMode.ADD, 
MessageRange.all(), session);
         messageManager1.expunge(MessageRange.all(), session);
@@ -184,7 +184,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
expungeFromMessageManagerShouldWorkWhenSetFlagsToDeletedWithMessageIdManager() 
throws Exception {
         Flags deleted = new Flags(Flag.DELETED);
-        ComposedMessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session);
+        ComposedMessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session).getIds();
 
         messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, 
messageId.getMessageId(), ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -199,7 +199,7 @@ public abstract class AbstractCombinationManagerTest {
         ComposedMessageId messageId = messageManager1.appendMessage(
             MessageManager.AppendCommand.builder()
                 .withFlags(deleted)
-                .build(mailContent), session);
+                .build(mailContent), session).getIds();
 
         messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -211,7 +211,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMessageFromMessageIdManagerShouldReturnMessageWhenAppendMessageFromMessageManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         assertThat(messageIdManager.getMessage(messageId, FetchGroup.MINIMAL, 
session)).hasSize(1);
     }
@@ -219,7 +219,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMessageFromMessageIdManagerShouldReturnMessageWhenCopyMessageWithMailboxIdFromMailboxManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         mailboxManager.copyMessages(MessageRange.all(), 
mailbox1.getMailboxId(), mailbox2.getMailboxId(), session);
 
@@ -233,7 +233,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMessageFromMessageIdManagerShouldReturnMessageWhenCopyMessageWithMailboxPathFromMailboxManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         mailboxManager.copyMessages(MessageRange.all(), 
MailboxFixture.INBOX_ALICE, MailboxFixture.OUTBOX_ALICE, session);
 
@@ -247,7 +247,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMessageFromMessageIdManagerShouldReturnMessageWhenMoveMessageWithMailboxIdFromMailboxManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         mailboxManager.moveMessages(MessageRange.all(), 
MailboxFixture.INBOX_ALICE, MailboxFixture.OUTBOX_ALICE, session);
 
@@ -261,7 +261,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMessagesFromMessageManagerShouldReturnMessagesCreatedBySetInMailboxesFromMessageIdManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -276,7 +276,7 @@ public abstract class AbstractCombinationManagerTest {
         ComposedMessageId messageId = messageManager1.appendMessage(
             MessageManager.AppendCommand.builder()
                 .withFlags(recent)
-                .build(mailContent), session);
+                .build(mailContent), session).getIds();
 
         long mailbox2NextUid = messageManager2.getMetaData(true, session, 
MessageManager.MetaData.FetchGroup.UNSEEN_COUNT).getUidNext().asLong();
         messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
@@ -294,7 +294,7 @@ public abstract class AbstractCombinationManagerTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(recent)
                 .build(mailContent), session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -307,7 +307,7 @@ public abstract class AbstractCombinationManagerTest {
         ComposedMessageId messageId = messageManager1.appendMessage(
             MessageManager.AppendCommand.builder()
                 .withFlags(recent)
-                .build(mailContent), session);
+                .build(mailContent), session).getIds();
 
         messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -327,7 +327,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMetadataFromMessageManagerShouldReturnHighestModSeqWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -337,7 +337,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMetadataFromMessageManagerShouldReturnMessageCountWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -347,7 +347,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMetadataFromMessageManagerShouldReturnNumberOfUnseenMessageWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -356,7 +356,7 @@ public abstract class AbstractCombinationManagerTest {
 
     @Test
     void 
getMetadataFromMessageManagerShouldReturnFirstUnseenMessageWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
-        ComposedMessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session);
+        ComposedMessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session).getIds();
 
         messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -367,7 +367,7 @@ public abstract class AbstractCombinationManagerTest {
     void 
getMetadataFromMessageManagerShouldReturnNumberOfUnseenMessageWhenSetFlagsFromMessageIdManager()
 throws Exception {
         Flags newFlag = new Flags(Flag.RECENT);
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setFlags(newFlag, FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -377,7 +377,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void 
getMetadataFromMessageManagerShouldReturnFirstUnseenMessageWhenSetFlagsFromMessageIdManager()
 throws Exception {
         Flags newFlag = new Flags(Flag.USER);
-        ComposedMessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session);
+        ComposedMessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session).getIds();
 
         messageIdManager.setFlags(newFlag, FlagsUpdateMode.ADD, 
messageId.getMessageId(), ImmutableList.of(mailbox1.getMailboxId(), 
mailbox2.getMailboxId()), session);
 
@@ -387,7 +387,7 @@ public abstract class AbstractCombinationManagerTest {
     @Test
     void setInMailboxesFromMessageIdManagerShouldMoveMessage() throws 
Exception {
         MessageId messageId = 
messageManager1.appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox2.getMailboxId()), session);
 
@@ -412,7 +412,7 @@ public abstract class AbstractCombinationManagerTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(messageFlag)
                 .build(mailContent), session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -443,7 +443,7 @@ public abstract class AbstractCombinationManagerTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(messageFlag)
                 .build(mailContent), session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -461,7 +461,7 @@ public abstract class AbstractCombinationManagerTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(customFlag1)
                 .build(mailContent), session)
-            .getMessageId();
+            .getIds().getMessageId();
 
 
         messageIdManager.setFlags(customFlag2, FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
@@ -483,7 +483,7 @@ public abstract class AbstractCombinationManagerTest {
             MessageManager.AppendCommand.builder()
                 .withFlags(custom1)
                 .build(mailContent), session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
         messageManager2.setFlags(custom2, FlagsUpdateMode.ADD, 
MessageRange.all(), session);
@@ -500,7 +500,7 @@ public abstract class AbstractCombinationManagerTest {
     void getUidsShouldInteractWellWithSetInMailboxes() throws Exception {
         MessageId messageId = messageManager1
             .appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -521,7 +521,7 @@ public abstract class AbstractCombinationManagerTest {
     void getUidsShouldInteractWellWithDelete() throws Exception {
         MessageId messageId = messageManager1
             .appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.delete(messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -533,10 +533,10 @@ public abstract class AbstractCombinationManagerTest {
     void getUidsShouldInteractWellWithDeletes() throws Exception {
         MessageId messageId1 = messageManager1
             .appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
         MessageId messageId2 = messageManager1
             .appendMessage(MessageManager.AppendCommand.from(mailContent), 
session)
-            .getMessageId();
+            .getIds().getMessageId();
 
         messageIdManager.delete(ImmutableList.of(messageId1, messageId2), 
session);
 
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
index fa1c0ec..55914ad 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
@@ -969,6 +969,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
             .appendMessage(MessageManager.AppendCommand.builder()
             .withFlags(new Flags(Flags.Flag.DELETED))
             
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("eml/twoAttachmentsApi.eml")),
 bobSession)
+            .getIds()
             .getMessageId();
 
         List<MessageResult> messages = messageIdManager.getMessage(messageId, 
FetchGroup.MINIMAL, bobSession);
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index 6da8aa0..9063fd6 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -133,7 +133,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1388617200000L),
             session,
             RECENT,
-            new Flags(Flags.Flag.DELETED));
+            new Flags(Flags.Flag.DELETED)).getIds();
         // sentDate: Thu, 4 Jun 2015 09:23:37 +0000
         // Internal date : 2014/02/02 00:00:00.000
         m2 = inboxMessageManager.appendMessage(
@@ -141,7 +141,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1391295600000L),
             session,
             RECENT,
-            new Flags(Flags.Flag.ANSWERED));
+            new Flags(Flags.Flag.ANSWERED)).getIds();
         // sentDate: Thu, 4 Jun 2015 09:27:37 +0000
         // Internal date : 2014/03/02 00:00:00.000
         m3 = inboxMessageManager.appendMessage(
@@ -149,7 +149,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1393714800000L),
             session,
             RECENT,
-            new Flags(Flags.Flag.DRAFT));
+            new Flags(Flags.Flag.DRAFT)).getIds();
         // sentDate: Tue, 2 Jun 2015 08:16:19 +0000
         // Internal date : 2014/05/02 00:00:00.000
         m4 = inboxMessageManager.appendMessage(
@@ -157,7 +157,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1398981600000L),
             session,
             RECENT,
-            new Flags(Flags.Flag.RECENT));
+            new Flags(Flags.Flag.RECENT)).getIds();
         // sentDate: Fri, 15 May 2015 06:35:59 +0000
         // Internal date : 2014/04/02 00:00:00.000
         m5 = inboxMessageManager.appendMessage(
@@ -165,7 +165,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1396389600000L),
             session,
             RECENT,
-            new Flags(Flags.Flag.FLAGGED));
+            new Flags(Flags.Flag.FLAGGED)).getIds();
         // sentDate: Wed, 03 Jun 2015 19:14:32 +0000
         // Internal date : 2014/06/02 00:00:00.000
         m6 = inboxMessageManager.appendMessage(
@@ -173,7 +173,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1401660000000L),
             session,
             RECENT,
-            new Flags(Flags.Flag.SEEN));
+            new Flags(Flags.Flag.SEEN)).getIds();
         // sentDate: Thu, 04 Jun 2015 07:36:08 +0000
         // Internal date : 2014/07/02 00:00:00.000
         m7 = inboxMessageManager.appendMessage(
@@ -181,7 +181,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1404252000000L),
             session,
             NOT_RECENT,
-            new Flags());
+            new Flags()).getIds();
         // sentDate: Thu, 4 Jun 2015 06:08:41 +0200
         // Internal date : 2014/08/02 00:00:00.000
         m8 = inboxMessageManager.appendMessage(
@@ -189,7 +189,7 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1406930400000L),
             session,
             RECENT,
-            new Flags("Hello"));
+            new Flags("Hello")).getIds();
         // sentDate: Thu, 4 Jun 2015 06:08:41 +0200
         // Internal date : 2014/08/02 00:00:00.000
         mOther = myFolderMessageManager.appendMessage(
@@ -197,34 +197,34 @@ public abstract class AbstractMessageSearchIndexTest {
             new Date(1406930400000L),
             session,
             RECENT,
-            new Flags(Flags.Flag.SEEN));
+            new Flags(Flags.Flag.SEEN)).getIds();
         m9 = inboxMessageManager.appendMessage(
             ClassLoader.getSystemResourceAsStream("eml/frnog.eml"),
             new Date(1409608800000L),
             session,
             RECENT,
-            new Flags("Hello you"));
+            new Flags("Hello you")).getIds();
 
         mailWithAttachment = myFolderMessageManager.appendMessage(
             
ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml"),
             new Date(1409608900000L),
             session,
             RECENT,
-            new Flags("Hello you"));
+            new Flags("Hello you")).getIds();
 
         mailWithInlinedAttachment = myFolderMessageManager.appendMessage(
             
ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"),
             new Date(1409608900000L),
             session,
             RECENT,
-            new Flags("Hello you"));
+            new Flags("Hello you")).getIds();
 
         m10 = otherInboxMessageManager.appendMessage(
             ClassLoader.getSystemResourceAsStream("eml/mail1.eml"),
             new Date(1391295600000L),
             otherSession,
             RECENT,
-            new Flags());
+            new Flags()).getIds();
 
         await();
     }
@@ -422,7 +422,7 @@ public abstract class AbstractMessageSearchIndexTest {
         ComposedMessageId mailWithDotsInHeader = 
myFolderMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoader.getSystemResourceAsStream("eml/headerWithDot.eml")),
-            session);
+            session).getIds();
         await();
         
         SearchQuery searchQuery = new SearchQuery(SearchQuery.all());
@@ -437,7 +437,7 @@ public abstract class AbstractMessageSearchIndexTest {
         ComposedMessageId mailWithDotsInHeader = 
myFolderMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoader.getSystemResourceAsStream("eml/headerWithDot.eml")),
-            session);
+            session).getIds();
         await();
 
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.headerExists("X-header.with.dots"));
@@ -453,7 +453,7 @@ public abstract class AbstractMessageSearchIndexTest {
         ComposedMessageId m11 = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
             .build(ClassLoader.getSystemResourceAsStream("eml/mail5.eml")),
-            session);
+            session).getIds();
 
         String emailToSearch = "luc.du...@james.apache.org";
 
@@ -1362,7 +1362,7 @@ public abstract class AbstractMessageSearchIndexTest {
         ComposedMessageId messageWithBeautifulBananaAsTextAttachment = 
myFolderMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
             
.build(ClassLoader.getSystemResourceAsStream("eml/emailWithTextAttachment.eml")),
-            session);
+            session).getIds();
         await();
 
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.mailContains("User message banana"));
@@ -1377,7 +1377,7 @@ public abstract class AbstractMessageSearchIndexTest {
         ComposedMessageId messageWithBeautifulBananaAsTextAttachment = 
myFolderMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoader.getSystemResourceAsStream("eml/emailWithTextAttachment.eml")),
-            session);
+            session).getIds();
         await();
 
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.attachmentContains("beautiful banana"));
@@ -1401,7 +1401,7 @@ public abstract class AbstractMessageSearchIndexTest {
                 .setBody(multipart)
                 .build();
         ComposedMessageId messageWithBeautifulBananaAsPDFAttachment = 
myFolderMessageManager
-            .appendMessage(MessageManager.AppendCommand.from(message), 
session);
+            .appendMessage(MessageManager.AppendCommand.from(message), 
session).getIds();
         await();
 
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.attachmentContains("beautiful banana"));
@@ -1441,19 +1441,19 @@ public abstract class AbstractMessageSearchIndexTest {
             .build(Message.Builder.of()
                 .setSubject("test")
                 .setBody("testmail", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
         ComposedMessageId message2 = 
messageManager.appendMessage(MessageManager.AppendCommand.builder()
             .withInternalDate(date2)
             .build(Message.Builder.of()
                 .setSubject("test")
                 .setBody("testmail", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
         ComposedMessageId message3 = 
messageManager.appendMessage(MessageManager.AppendCommand.builder()
             .withInternalDate(date3)
             .build(Message.Builder.of()
                 .setSubject("test")
                 .setBody("testmail", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         await();
 
@@ -1480,7 +1480,7 @@ public abstract class AbstractMessageSearchIndexTest {
             .withInternalDate(date1)
             .build(Message.Builder.of()
                 .setSubject("test")
-                .setBody("testmail", StandardCharsets.UTF_8)), session);
+                .setBody("testmail", StandardCharsets.UTF_8)), 
session).getIds();
         ComposedMessageId message2 = 
messageManager.appendMessage(MessageManager.AppendCommand.builder()
             .withInternalDate(date2)
             .build(Message.Builder.of()
@@ -1488,12 +1488,12 @@ public abstract class AbstractMessageSearchIndexTest {
                 .setDate(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
                     .parse("2017/08/23 00:00:00 "), 
TimeZone.getTimeZone(ZoneId.of("+0200")))
                 .setBody("testmail", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
         ComposedMessageId message3 = 
messageManager.appendMessage(MessageManager.AppendCommand.builder()
             .withInternalDate(date3)
             .build(Message.Builder.of()
                 .setSubject("test")
-                .setBody("testmail", StandardCharsets.UTF_8)), session);
+                .setBody("testmail", StandardCharsets.UTF_8)), 
session).getIds();
 
         await();
 
@@ -1555,7 +1555,7 @@ public abstract class AbstractMessageSearchIndexTest {
                                     .build())
                                 .build())
                             .build())),
-            session);
+            session).getIds();
 
         await();
 
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImplTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImplTest.java
index 41a043f..694a73c 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImplTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImplTest.java
@@ -67,7 +67,7 @@ public class MessageIdReIndexerImplTest {
         ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
             .appendMessage(
                 MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                systemSession);
+                systemSession).getIds();
 
         reIndexer.reIndex(createdMessage.getMessageId()).run();
 
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
index a24e48a..7399e20 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
@@ -71,7 +71,7 @@ public class ReIndexerImplTest {
         ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
             .appendMessage(
                 MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                systemSession);
+                systemSession).getIds();
 
         reIndexer.reIndex(INBOX).run();
 
@@ -98,7 +98,7 @@ public class ReIndexerImplTest {
         ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
             .appendMessage(
                 MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                systemSession);
+                systemSession).getIds();
 
         reIndexer.reIndex().run();
         ArgumentCaptor<MailboxMessage> messageCaptor = 
ArgumentCaptor.forClass(MailboxMessage.class);
@@ -124,7 +124,7 @@ public class ReIndexerImplTest {
         ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
             .appendMessage(
                 MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                systemSession);
+                systemSession).getIds();
 
         reIndexer.reIndex(USERNAME).run();
         ArgumentCaptor<MailboxMessage> messageCaptor = 
ArgumentCaptor.forClass(MailboxMessage.class);
@@ -150,7 +150,7 @@ public class ReIndexerImplTest {
         ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
             .appendMessage(
                 MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                systemSession);
+                systemSession).getIds();
 
         reIndexer.reIndex(INBOX, createdMessage.getUid()).run();
         ArgumentCaptor<MailboxMessage> messageCaptor = 
ArgumentCaptor.forClass(MailboxMessage.class);
@@ -173,7 +173,7 @@ public class ReIndexerImplTest {
         ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
             .appendMessage(
                 MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                systemSession);
+                systemSession).getIds();
 
         reIndexer.reIndex(mailboxId, createdMessage.getUid()).run();
         ArgumentCaptor<MailboxMessage> messageCaptor = 
ArgumentCaptor.forClass(MailboxMessage.class);
@@ -216,7 +216,7 @@ public class ReIndexerImplTest {
         ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
             .appendMessage(
                 MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                systemSession);
+                systemSession).getIds();
 
         reIndexer.reIndex(mailboxId).run();
         ArgumentCaptor<MailboxMessage> messageCaptor = 
ArgumentCaptor.forClass(MailboxMessage.class);
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
index 2b348fd..1efaedb 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
@@ -127,7 +127,8 @@ public class AppendProcessor extends 
AbstractMailboxProcessor<AppendRequest> {
             final MailboxSession mailboxSession = session.getMailboxSession();
             final SelectedMailbox selectedMailbox = session.getSelected();
             final boolean isSelectedMailbox = selectedMailbox != null && 
selectedMailbox.getMailboxId().equals(mailbox.getId());
-            final ComposedMessageId messageId = mailbox.appendMessage(message, 
datetime, mailboxSession, !isSelectedMailbox, flagsToBeSet);
+            final ComposedMessageId messageId = mailbox.appendMessage(message, 
datetime, mailboxSession, !isSelectedMailbox, flagsToBeSet)
+                .getIds();
             if (isSelectedMailbox) {
                 selectedMailbox.addRecent(messageId.getUid());
             }
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
index f112583..c5b0c54 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
@@ -152,7 +152,7 @@ public class MailboxProbeImpl implements GuiceProbe, 
MailboxProbe {
 
         MailboxSession mailboxSession = 
mailboxManager.createSystemSession(Username.of(username));
         MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, 
mailboxSession);
-        return messageManager.appendMessage(message, internalDate, 
mailboxSession, isRecent, flags);
+        return messageManager.appendMessage(message, internalDate, 
mailboxSession, isRecent, flags).getIds();
     }
 
     public ComposedMessageId appendMessage(String username, MailboxPath 
mailboxPath, MessageManager.AppendCommand appendCommand)
@@ -160,7 +160,7 @@ public class MailboxProbeImpl implements GuiceProbe, 
MailboxProbe {
 
         MailboxSession mailboxSession = 
mailboxManager.createSystemSession(Username.of(username));
         MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, 
mailboxSession);
-        return messageManager.appendMessage(appendCommand, mailboxSession);
+        return messageManager.appendMessage(appendCommand, 
mailboxSession).getIds();
     }
 
     @Override
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
index 9722c19..f552ca4 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
@@ -26,6 +26,7 @@ import org.apache.james.core.Username;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.MessageManager.AppendResult;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.model.ComposedMessageId;
@@ -49,7 +50,8 @@ public class MailboxAppender {
 
     public ComposedMessageId append(MimeMessage mail, Username user, String 
folder) throws MessagingException {
         MailboxSession session = createMailboxSession(user);
-        return append(mail, user, useSlashAsSeparator(folder, session), 
session);
+        return append(mail, user, useSlashAsSeparator(folder, session), 
session)
+            .getIds();
     }
 
     private String useSlashAsSeparator(String urlPath, MailboxSession session) 
throws MessagingException {
@@ -63,7 +65,7 @@ public class MailboxAppender {
         return destination;
     }
 
-    private ComposedMessageId append(MimeMessage mail, Username user, String 
folder, MailboxSession session) throws MessagingException {
+    private AppendResult append(MimeMessage mail, Username user, String 
folder, MailboxSession session) throws MessagingException {
         mailboxManager.startProcessingRequest(session);
         try {
             MailboxPath mailboxPath = MailboxPath.forUser(user, folder);
@@ -75,7 +77,7 @@ public class MailboxAppender {
         }
     }
 
-    private ComposedMessageId appendMessageToMailbox(MimeMessage mail, 
MailboxSession session, MailboxPath path) throws MailboxException, 
MessagingException {
+    private AppendResult appendMessageToMailbox(MimeMessage mail, 
MailboxSession session, MailboxPath path) throws MailboxException, 
MessagingException {
         createMailboxIfNotExist(session, path);
         final MessageManager mailbox = mailboxManager.getMailbox(path, 
session);
         if (mailbox == null) {
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
index 601a78d..44716b2 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
@@ -36,6 +36,8 @@ import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.MessageManager.AppendCommand;
+import org.apache.james.mailbox.MessageManager.AppendResult;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.metrics.tests.RecordingMetricFactory;
@@ -86,6 +88,7 @@ public class LocalDeliveryTest {
         Username username = Username.of("recei...@domain.com");
         MailboxPath inbox = MailboxPath.inbox(username);
         MessageManager messageManager = mock(MessageManager.class);
+        when(messageManager.appendMessage(any(AppendCommand.class), 
any(MailboxSession.class))).thenReturn(mock(AppendResult.class));
 
         when(usersRepository.supportVirtualHosting()).thenReturn(true);
         when(usersRepository.getUsername(new 
MailAddress(username.asString()))).thenReturn(username);
@@ -98,7 +101,7 @@ public class LocalDeliveryTest {
         testee.service(mail);
 
         // Then
-        
verify(messageManager).appendMessage(any(MessageManager.AppendCommand.class), 
any(MailboxSession.class));
+        verify(messageManager).appendMessage(any(AppendCommand.class), 
any(MailboxSession.class));
     }
 
     @Test
@@ -107,6 +110,7 @@ public class LocalDeliveryTest {
         Username username = Username.of("receiver");
         MailboxPath inbox = MailboxPath.inbox(username);
         MessageManager messageManager = mock(MessageManager.class);
+        when(messageManager.appendMessage(any(AppendCommand.class), 
any(MailboxSession.class))).thenReturn(mock(AppendResult.class));
         when(usersRepository.supportVirtualHosting()).thenReturn(false);
         when(usersRepository.getUsername(new 
MailAddress("receiver@localhost"))).thenReturn(username);
         when(usersRepository.getUsername(new 
MailAddress(RECEIVER_DOMAIN_COM))).thenReturn(username);
@@ -119,7 +123,7 @@ public class LocalDeliveryTest {
         testee.service(mail);
 
         // Then
-        
verify(messageManager).appendMessage(any(MessageManager.AppendCommand.class), 
any(MailboxSession.class));
+        verify(messageManager).appendMessage(any(AppendCommand.class), 
any(MailboxSession.class));
     }
 
     private Mail createMail() throws MessagingException, IOException {
diff --git 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MessageAppender.java
 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MessageAppender.java
index 595dce4..3b76e13 100644
--- 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MessageAppender.java
+++ 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MessageAppender.java
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.MessageManager.AppendResult;
 import org.apache.james.mailbox.exception.AttachmentNotFoundException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.AttachmentId;
@@ -74,8 +75,8 @@ public class MessageAppender {
     }
 
     public MetaDataWithContent appendMessageInMailboxes(CreationMessageEntry 
createdEntry,
-                                                                               
List<MailboxId> targetMailboxes,
-                                                                               
MailboxSession session) throws MailboxException {
+                                                        List<MailboxId> 
targetMailboxes,
+                                                        MailboxSession 
session) throws MailboxException {
         Preconditions.checkArgument(!targetMailboxes.isEmpty());
         ImmutableList<MessageAttachment> messageAttachments = 
getMessageAttachments(session, createdEntry.getValue().getAttachments());
         byte[] messageContent = mimeMessageConverter.convert(createdEntry, 
messageAttachments, session);
@@ -83,53 +84,54 @@ public class MessageAppender {
         Date internalDate = 
Date.from(createdEntry.getValue().getDate().toInstant());
 
         MessageManager mailbox = 
mailboxManager.getMailbox(targetMailboxes.get(0), session);
-        ComposedMessageId message = mailbox.appendMessage(
+        AppendResult appendResult = mailbox.appendMessage(
             MessageManager.AppendCommand.builder()
                 .withInternalDate(internalDate)
                 .withFlags(getFlags(createdEntry.getValue()))
                 .notRecent()
                 .build(content),
             session);
+        ComposedMessageId ids = appendResult.getIds();
         if (targetMailboxes.size() > 1) {
-            messageIdManager.setInMailboxes(message.getMessageId(), 
targetMailboxes, session);
+            messageIdManager.setInMailboxes(ids.getMessageId(), 
targetMailboxes, session);
         }
 
         return MetaDataWithContent.builder()
-            .uid(message.getUid())
+            .uid(ids.getUid())
             .keywords(createdEntry.getValue().getKeywords())
             .internalDate(internalDate.toInstant())
             .sharedContent(content)
             .size(messageContent.length)
-            .attachments(messageAttachments)
+            .attachments(appendResult.getMessageAttachments())
             .mailboxId(mailbox.getId())
-            .messageId(message.getMessageId())
+            .messageId(ids.getMessageId())
             .build();
     }
 
     public MetaDataWithContent 
appendMessageInMailbox(org.apache.james.mime4j.dom.Message message,
-                                                                             
MessageManager messageManager,
-                                                                             
List<MessageAttachment> attachments,
-                                                                             
Flags flags,
-                                                                             
MailboxSession session) throws MailboxException {
+                                                      MessageManager 
messageManager,
+                                                      Flags flags,
+                                                      MailboxSession session) 
throws MailboxException {
 
 
         byte[] messageContent = asBytes(message);
         SharedByteArrayInputStream content = new 
SharedByteArrayInputStream(messageContent);
         Date internalDate = new Date();
 
-        ComposedMessageId appendedMessage = 
messageManager.appendMessage(MessageManager.AppendCommand.builder()
+        AppendResult appendResult = 
messageManager.appendMessage(MessageManager.AppendCommand.builder()
             .withFlags(flags)
             .build(content), session);
+        ComposedMessageId ids = appendResult.getIds();
 
         return MetaDataWithContent.builder()
-            .uid(appendedMessage.getUid())
+            .uid(ids.getUid())
             .keywords(Keywords.lenientFactory().fromFlags(flags))
             .internalDate(internalDate.toInstant())
             .sharedContent(content)
             .size(messageContent.length)
-            .attachments(attachments)
+            .attachments(appendResult.getMessageAttachments())
             .mailboxId(messageManager.getId())
-            .messageId(appendedMessage.getMessageId())
+            .messageId(ids.getMessageId())
             .build();
     }
 
@@ -141,12 +143,6 @@ public class MessageAppender {
         }
     }
 
-    public MetaDataWithContent appendMessageInMailbox(CreationMessageEntry 
createdEntry,
-                                                                             
MailboxId targetMailbox,
-                                                                             
MailboxSession session) throws MailboxException {
-        return appendMessageInMailboxes(createdEntry, 
ImmutableList.of(targetMailbox), session);
-    }
-
     private Flags getFlags(CreationMessage message) {
         return message.getKeywords().asFlags();
     }
diff --git 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SendMDNProcessor.java
 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SendMDNProcessor.java
index 9b782ec..98f6675 100644
--- 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SendMDNProcessor.java
+++ 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SendMDNProcessor.java
@@ -22,7 +22,6 @@ package org.apache.james.jmap.draft.methods;
 import static org.apache.james.jmap.draft.methods.Method.JMAP_PREFIX;
 
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import javax.inject.Inject;
@@ -43,13 +42,9 @@ import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.SystemMailboxesProvider;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.OverQuotaException;
-import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.FetchGroup;
-import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
-import org.apache.james.mdn.MDN;
-import org.apache.james.mdn.MDNReport;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.dom.Message;
@@ -60,8 +55,6 @@ import org.apache.james.server.core.Envelope;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
-
 public class SendMDNProcessor implements SetMessagesProcessor {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(SendMDNProcessor.class);
@@ -145,14 +138,12 @@ public class SendMDNProcessor implements 
SetMessagesProcessor {
 
         JmapMDN mdn = MDNCreationEntry.getValue();
         Message originalMessage = retrieveOriginalMessage(mdn, mailboxSession);
-        MDNReport mdnReport = mdn.generateReport(originalMessage, 
mailboxSession);
-        List<MessageAttachment> reportAsAttachment = 
ImmutableList.of(convertReportToAttachment(mdnReport));
 
         Message mdnAnswer = mdn.generateMDNMessage(originalMessage, 
mailboxSession);
 
         Flags seen = new Flags(Flags.Flag.SEEN);
         MetaDataWithContent metaDataWithContent = 
messageAppender.appendMessageInMailbox(mdnAnswer,
-            getOutbox(mailboxSession), reportAsAttachment, seen, 
mailboxSession);
+            getOutbox(mailboxSession), seen, mailboxSession);
 
         messageSender.sendMessage(metaDataWithContent,
             Envelope.fromMime4JMessage(mdnAnswer), mailboxSession);
@@ -173,19 +164,6 @@ public class SendMDNProcessor implements 
SetMessagesProcessor {
         return 
messageBuilder.parseMessage(messages.get(0).getHeaders().getInputStream());
     }
 
-    private MessageAttachment convertReportToAttachment(MDNReport mdnReport) {
-        Attachment attachment = Attachment.builder()
-            .bytes(mdnReport.formattedValue().getBytes(StandardCharsets.UTF_8))
-            .type(MDN.DISPOSITION_CONTENT_TYPE)
-            .build();
-
-        return MessageAttachment.builder()
-            .attachment(attachment)
-            .isInline(true)
-            .build();
-    }
-
-
     private MessageManager getOutbox(MailboxSession mailboxSession) throws 
MailboxException {
         return systemMailboxesProvider.getMailboxByRole(Role.OUTBOX, 
mailboxSession.getUser())
             .findAny()
diff --git 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/JmapMDN.java
 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/JmapMDN.java
index ecc6429..57194b4 100644
--- 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/JmapMDN.java
+++ 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/JmapMDN.java
@@ -176,8 +176,7 @@ public class JmapMDN {
             .findFirst();
     }
 
-
-    public MDNReport generateReport(Message originalMessage, MailboxSession 
mailboxSession) throws InvalidOriginMessageForMDNException {
+    private MDNReport generateReport(Message originalMessage, MailboxSession 
mailboxSession) throws InvalidOriginMessageForMDNException {
         if (originalMessage.getMessageId() == null) {
             throw 
InvalidOriginMessageForMDNException.missingHeader("Message-ID");
         }
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/MessageFastViewProjectionItemFactoryTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/MessageFastViewProjectionItemFactoryTest.java
index 84fe433..a042f8e 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/MessageFastViewProjectionItemFactoryTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/MessageFastViewProjectionItemFactoryTest.java
@@ -136,7 +136,7 @@ class MessageFastViewProjectionItemFactoryTest {
 
     MessageResult toMessageResult(String messageAsString) throws Exception {
         ComposedMessageId composedMessageId = 
mailbox.appendMessage(MessageManager.AppendCommand.builder()
-            .build(messageAsString), session);
+            .build(messageAsString), session).getIds();
 
         return 
mailbox.getMessages(MessageRange.one(composedMessageId.getUid()), 
FetchGroup.FULL_CONTENT, session)
             .next();
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java
index 41b2ad1..c726407 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java
@@ -180,9 +180,9 @@ public class GetMessagesMethodTest {
     @SuppressWarnings("unchecked")
     public void processShouldFetchMessages() throws Exception {
         MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
-        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session);
-        ComposedMessageId message2 = 
inbox.appendMessage(AppendCommand.from(messageContent2), session);
-        ComposedMessageId message3 = 
inbox.appendMessage(AppendCommand.from(messageContent3), session);
+        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session).getIds();
+        ComposedMessageId message2 = 
inbox.appendMessage(AppendCommand.from(messageContent2), session).getIds();
+        ComposedMessageId message3 = 
inbox.appendMessage(AppendCommand.from(messageContent3), session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId(),
@@ -215,7 +215,7 @@ public class GetMessagesMethodTest {
                 org.apache.james.mime4j.dom.Message.Builder.of()
                     .setSubject("message 1 subject")
                     .setBody("my <b>HTML</b> message", "html", 
StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message.getMessageId()))
@@ -237,7 +237,7 @@ public class GetMessagesMethodTest {
     @Test
     public void 
processShouldReturnOnlyMandatoryPropertiesOnEmptyPropertyList() throws 
Exception {
         MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
-        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(this.messageContent1), session);
+        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(this.messageContent1), session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId()))
@@ -255,7 +255,7 @@ public class GetMessagesMethodTest {
     public void processShouldReturnAllPropertiesWhenNoPropertyGiven() throws 
Exception {
         MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
 
-        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session);
+        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId()))
@@ -271,7 +271,7 @@ public class GetMessagesMethodTest {
     public void processShouldAddMandatoryPropertiesWhenNotInPropertyList() 
throws Exception {
         MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
 
-        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session);
+        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId()))
@@ -290,7 +290,7 @@ public class GetMessagesMethodTest {
     public void 
processShouldReturnTextBodyWhenBodyInPropertyListAndEmptyHtmlBody() throws 
Exception {
         MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
 
-        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session);
+        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent1), session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId()))
@@ -316,7 +316,7 @@ public class GetMessagesMethodTest {
                 org.apache.james.mime4j.dom.Message.Builder.of()
                     .setSubject("message 1 subject")
                     .setBody("my <b>HTML</b> message", "html", 
StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message.getMessageId()))
@@ -344,7 +344,7 @@ public class GetMessagesMethodTest {
             AppendCommand.from(org.apache.james.mime4j.dom.Message.Builder.of()
                 .setSubject("message 1 subject")
                 .setBody("", "html", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message.getMessageId()))
@@ -378,7 +378,7 @@ public class GetMessagesMethodTest {
                     .addBodyPart(BodyPartBuilder.create()
                         .setBody("<a>The </a> <strong>HTML</strong> message", 
"html", StandardCharsets.UTF_8))
                     .build())),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message.getMessageId()))
@@ -409,7 +409,7 @@ public class GetMessagesMethodTest {
                     .setField(new RawField("HEADer2", "Header2Content"))
                     .setSubject("message 1 subject")
                     .setBody("my message", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId()))
@@ -437,7 +437,7 @@ public class GetMessagesMethodTest {
                     .setField(new RawField("HEADer2", "Header2Content"))
                     .setSubject("message 1 subject")
                     .setBody("my message", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId()))
@@ -469,7 +469,7 @@ public class GetMessagesMethodTest {
                     .setField(new RawField("HEADer2", "Header2Content"))
                     .setSubject("message 1 subject")
                     .setBody("my message", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         MailboxId customMailboxId = 
mailboxManager.getMailbox(customMailboxPath, session).getId();
         messageIdManager.setInMailboxes(message1.getMessageId(),
@@ -506,7 +506,7 @@ public class GetMessagesMethodTest {
                     .setField(new RawField("HEADer2", "Header2Content"))
                     .setSubject("message 1 subject")
                     .setBody("my message", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         MailboxId customMailboxId = 
mailboxManager.getMailbox(customMailboxPath, session).getId();
         messageIdManager.setInMailboxes(message1.getMessageId(),
@@ -541,7 +541,7 @@ public class GetMessagesMethodTest {
                     .setField(new RawField("HEADer2", "Header2Content"))
                     .setSubject("message 1 subject")
                     .setBody("my message", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         MailboxId customMailboxId = 
mailboxManager.getMailbox(customMailboxPath, session).getId();
         messageIdManager.setInMailboxes(message1.getMessageId(),
@@ -576,7 +576,7 @@ public class GetMessagesMethodTest {
                     .setField(new RawField("HEADer2", "Header2Content"))
                     .setSubject("message 1 subject")
                     .setBody("my message", StandardCharsets.UTF_8)),
-            session);
+            session).getIds();
 
         MailboxId customMailboxId = 
mailboxManager.getMailbox(customMailboxPath, session).getId();
         messageIdManager.setInMailboxes(message1.getMessageId(),
@@ -611,8 +611,8 @@ public class GetMessagesMethodTest {
             .setBody("my message", StandardCharsets.UTF_8)
             .build();
 
-        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent), session);
-        ComposedMessageId message2 = 
inbox.appendMessage(AppendCommand.from(messageContent), session);
+        ComposedMessageId message1 = 
inbox.appendMessage(AppendCommand.from(messageContent), session).getIds();
+        ComposedMessageId message2 = 
inbox.appendMessage(AppendCommand.from(messageContent), session).getIds();
 
         doCallRealMethod()
             .doThrow(new RuntimeException())
@@ -643,17 +643,17 @@ public class GetMessagesMethodTest {
             AppendCommand.builder()
                 .withFlags(flags)
                 .build(messageContent1),
-            session);
+            session).getIds();
         ComposedMessageId message2 = inbox.appendMessage(
             AppendCommand.builder()
                 .withFlags(flags)
                 .build(messageContent2),
-            session);
+            session).getIds();
         ComposedMessageId message3 = inbox.appendMessage(
             AppendCommand.builder()
                 .withFlags(flags)
                 .build(messageContent3),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId(),
@@ -702,17 +702,17 @@ public class GetMessagesMethodTest {
             AppendCommand.builder()
                 .withFlags(flags1)
                 .build(messageContent1),
-            session);
+            session).getIds();
         ComposedMessageId message2 = inbox.appendMessage(
             AppendCommand.builder()
                 .withFlags(flags2)
                 .build(messageContent2),
-            session);
+            session).getIds();
         ComposedMessageId message3 = inbox.appendMessage(
             AppendCommand.builder()
                 .withFlags(flags3)
                 .build(messageContent3),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId(),
@@ -756,7 +756,7 @@ public class GetMessagesMethodTest {
             AppendCommand.builder()
                 .withFlags(flags)
                 .build(messageContent1),
-            session);
+            session).getIds();
 
         GetMessagesRequest request = GetMessagesRequest.builder()
             .ids(ImmutableList.of(message1.getMessageId()))
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java
index 1afbcb1..a9a8c8d 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java
@@ -204,7 +204,9 @@ public class SetMessagesUpdateProcessorTest {
         when(outbox.getMailboxPath()).thenReturn(MailboxPath.forUser(USER, 
OUTBOX));
 
         when(outbox.appendMessage(any(MessageManager.AppendCommand.class), 
any(MailboxSession.class)))
-            .thenReturn(new ComposedMessageId(OUTBOX_ID, TestMessageId.of(23), 
MessageUid.of(1)));
+            .thenReturn(new MessageManager.AppendResult(
+                new ComposedMessageId(OUTBOX_ID, TestMessageId.of(23), 
MessageUid.of(1)),
+                Optional.empty()));
 
         drafts = mock(MessageManager.class);
         when(drafts.getId()).thenReturn(DRAFTS_ID);
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
index 1c1463b..a871a02 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
@@ -121,19 +121,19 @@ class MessageFastViewFactoryTest {
         previewComputedMessage1 = 
bobInbox.appendMessage(MessageManager.AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.SEEN))
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
-            session);
+            session).getIds();
         missingPreviewComputedMessage1 = 
bobInbox.appendMessage(MessageManager.AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.SEEN))
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
-            session);
+            session).getIds();
         previewComputedMessage2 = 
bobInbox.appendMessage(MessageManager.AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.SEEN))
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
-            session);
+            session).getIds();
         previewComputedMessage3 = 
bobInbox.appendMessage(MessageManager.AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.SEEN))
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
-            session);
+            session).getIds();
 
         fastViewProjection = new MemoryMessageFastViewProjection(new 
RecordingMetricFactory());
 
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
index f6423e4..14f7221 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
@@ -121,7 +121,7 @@ class MessageFullViewFactoryTest {
         message1 = 
bobInbox.appendMessage(MessageManager.AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.SEEN))
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
-            session);
+            session).getIds();
 
         fastViewProjection = spy(new MemoryMessageFastViewProjection(new 
RecordingMetricFactory()));
         messageFullViewFactory = new 
MessageFullViewFactory(resources.getBlobManager(), messageContentExtractor, 
htmlTextExtractor,
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
index 8ed0b63..06b28fc 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
@@ -74,7 +74,7 @@ class MessageHeaderViewFactoryTest {
         message1 = 
bobInbox.appendMessage(MessageManager.AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.SEEN))
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
-            session);
+            session).getIds();
 
         testee = new MessageHeaderViewFactory(resources.getBlobManager(), 
messageIdManager);
     }
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
index 348e1ef..f1423c8 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
@@ -66,7 +66,7 @@ class MessageMetadataViewFactoryTest {
         message1 = 
bobInbox.appendMessage(MessageManager.AppendCommand.builder()
                 .withFlags(new Flags(Flags.Flag.SEEN))
                 .build("header: value\r\n\r\nbody"),
-            session);
+            session).getIds();
 
         testee = new MessageMetadataViewFactory(resources.getBlobManager(), 
messageIdManager);
     }
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/send/PostDequeueDecoratorTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/send/PostDequeueDecoratorTest.java
index 1b4f256..2111440 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/send/PostDequeueDecoratorTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/send/PostDequeueDecoratorTest.java
@@ -114,7 +114,7 @@ public class PostDequeueDecoratorTest {
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
         MessageManager messageManager = 
mailboxManager.getMailbox(SENT_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId sentMessageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId sentMessageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(sentMessageId.getMessageId().serialize()));
         mail.setAttribute(USERNAME_ATTRIBUTE);
         
@@ -126,7 +126,7 @@ public class PostDequeueDecoratorTest {
         MailboxSession mailboxSession = 
mailboxManager.createSystemSession(USERNAME);
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(messageId.getMessageId().serialize()));
         mail.setAttribute(USERNAME_ATTRIBUTE);
 
@@ -139,7 +139,7 @@ public class PostDequeueDecoratorTest {
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
         MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(messageId.getMessageId().serialize()));
         mail.setAttribute(USERNAME_ATTRIBUTE);
         
@@ -157,7 +157,7 @@ public class PostDequeueDecoratorTest {
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
         MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(messageId.getMessageId().serialize()));
         mail.setAttribute(USERNAME_ATTRIBUTE);
         
@@ -175,7 +175,7 @@ public class PostDequeueDecoratorTest {
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
         MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(messageId.getMessageId().serialize()));
         mail.setAttribute(USERNAME_ATTRIBUTE);
         
@@ -209,7 +209,7 @@ public class PostDequeueDecoratorTest {
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
         MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(messageId.getMessageId().serialize()));
         
         testee.done(true);
@@ -265,7 +265,7 @@ public class PostDequeueDecoratorTest {
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         MailboxId sentMailboxId = 
mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession).get();
         MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(messageId.getMessageId().serialize()));
         mail.setAttribute(USERNAME_ATTRIBUTE);
 
@@ -293,7 +293,7 @@ public class PostDequeueDecoratorTest {
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession).get();
         MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
-        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), mailboxSession);
+        ComposedMessageId messageId = 
messageManager.appendMessage(AppendCommand.from(message), 
mailboxSession).getIds();
         
mail.setAttribute(messageIdAttribute(messageId.getMessageId().serialize()));
         mail.setAttribute(USERNAME_ATTRIBUTE);
 
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
index 5a22e2d..ce2c2a8 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
@@ -162,7 +162,7 @@ class ComputeMessageFastViewProjectionListenerTest {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(previewMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
             .isEqualTo(PRECOMPUTED_PROPERTIES_PREVIEW);
@@ -173,7 +173,7 @@ class ComputeMessageFastViewProjectionListenerTest {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(emptyMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
             .isEqualTo(PRECOMPUTED_PROPERTIES_EMPTY);
@@ -184,7 +184,7 @@ class ComputeMessageFastViewProjectionListenerTest {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
-            mailboxSession);
+            mailboxSession).getIds();
 
         
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
             .isEqualTo(PRECOMPUTED_PROPERTIES_PREVIEW_HAS_ATTACHMENT);
@@ -195,7 +195,7 @@ class ComputeMessageFastViewProjectionListenerTest {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("emptyBodyMessageWithOneAttachment.eml")),
-            mailboxSession);
+            mailboxSession).getIds();
 
         
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
             .isEqualTo(PRECOMPUTED_PROPERTIES_HAS_ATTACHMENT);
@@ -206,12 +206,12 @@ class ComputeMessageFastViewProjectionListenerTest {
         ComposedMessageId composedId1 = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(previewMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         ComposedMessageId composedId2 = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(emptyMessage()),
-            mailboxSession);
+            mailboxSession).getIds();
 
         SoftAssertions.assertSoftly(softly -> {
             
softly.assertThat(Mono.from(messageFastViewProjection.retrieve(composedId1.getMessageId())).block())
diff --git 
a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTaskTest.java
 
b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTaskTest.java
index ef1e5e6..c58245b 100644
--- 
a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTaskTest.java
+++ 
b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTaskTest.java
@@ -304,7 +304,7 @@ class RecomputeAllFastViewProjectionItemsRequestToTaskTest {
         Optional<MailboxId> mailboxId = 
mailboxManager.createMailbox(MailboxPath.inbox(BOB), session);
         ComposedMessageId messageId = 
mailboxManager.getMailbox(mailboxId.get(), session).appendMessage(
             MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-            session);
+            session).getIds();
 
         String taskId = with()
             .queryParam("action", "recomputeFastViewProjectionItems")
@@ -327,7 +327,7 @@ class RecomputeAllFastViewProjectionItemsRequestToTaskTest {
         Optional<MailboxId> mailboxId = 
mailboxManager.createMailbox(MailboxPath.inbox(BOB), session);
         ComposedMessageId messageId = 
mailboxManager.getMailbox(mailboxId.get(), session).appendMessage(
             MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-            session);
+            session).getIds();
 
         String taskId1 = with()
             .queryParam("action", "recomputeFastViewProjectionItems")
diff --git 
a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTaskTest.java
 
b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTaskTest.java
index 807d799..866cc7a 100644
--- 
a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTaskTest.java
+++ 
b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTaskTest.java
@@ -372,7 +372,7 @@ class RecomputeUserFastViewProjectionItemsRequestToTaskTest 
{
     void recomputeUserShouldUpdateProjection() throws Exception {
         ComposedMessageId messageId = mailboxManager.getMailbox(bobInboxboxId, 
bobSession).appendMessage(
             MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-            bobSession);
+            bobSession).getIds();
 
         String taskId = with()
             .queryParam("action", "recomputeFastViewProjectionItems")
@@ -392,7 +392,7 @@ class RecomputeUserFastViewProjectionItemsRequestToTaskTest 
{
     void recomputeUserShouldBeIdempotent() throws Exception {
         ComposedMessageId messageId = mailboxManager.getMailbox(bobInboxboxId, 
bobSession).appendMessage(
             MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-            bobSession);
+            bobSession).getIds();
 
         String taskId1 = with()
             .queryParam("action", "recomputeFastViewProjectionItems")
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
index 7f2c6a5..3331980 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
@@ -80,7 +80,7 @@ class RestoreService {
     private Mono<RestoreResult> appendToMailbox(MessageManager 
restoreMailboxManager, DeletedMessage deletedMessage, MailboxSession session) {
         return appendCommand(deletedMessage)
             .map(Throwing.<AppendCommand, ComposedMessageId>function(
-                appendCommand -> 
restoreMailboxManager.appendMessage(appendCommand, session)).sneakyThrow())
+                appendCommand -> 
restoreMailboxManager.appendMessage(appendCommand, 
session).getIds()).sneakyThrow())
             .map(any -> RESTORE_SUCCEED)
             .onErrorResume(throwable -> {
                 LOGGER.error("append message {} to restore mailbox of user {} 
didn't success",
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
index 50da3b0..cba4c7a 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
@@ -207,7 +207,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId composedMessageId = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 doThrow(new RuntimeException())
                     .when(searchIndex)
@@ -244,7 +244,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId createdMessage = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 String taskId = with()
                     .post("/mailboxes?task=reIndex")
@@ -395,7 +395,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId composedMessageId = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 doThrow(new RuntimeException())
                     .when(searchIndex)
@@ -433,7 +433,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId createdMessage = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 String taskId = when()
                     .post("/mailboxes/" + mailboxId.serialize() + 
"?task=reIndex")
@@ -566,7 +566,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId composedMessageId = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 String taskId = when()
                     .post("/mailboxes/" + mailboxId.serialize() + "/mails/"
@@ -599,7 +599,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId createdMessage = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 String taskId = when()
                     .post("/mailboxes/" + mailboxId.serialize() + "/mails/"
@@ -781,7 +781,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId composedMessageId = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 doThrow(new RuntimeException())
                     .when(searchIndex)
@@ -829,7 +829,7 @@ class MailboxesRoutesTest {
                 ComposedMessageId createdMessage = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 doThrow(new 
RuntimeException()).when(searchIndex).add(any(MailboxSession.class), 
any(Mailbox.class), any(MailboxMessage.class));
 
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesTest.java
index 46ef7e6..4ac0ccd 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesTest.java
@@ -166,7 +166,7 @@ class MessageRoutesTest {
                 ComposedMessageId composedMessageId = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 String taskId = when()
                     .post("/messages/" + 
composedMessageId.getMessageId().serialize() + "?task=reIndex")
@@ -197,7 +197,7 @@ class MessageRoutesTest {
                 ComposedMessageId composedMessageId = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 String taskId = when()
                     .post("/messages/" + 
composedMessageId.getMessageId().serialize() + "?task=reIndex")
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index 6f52c47..4cc023f 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -1159,7 +1159,7 @@ class UserMailboxesRoutesTest {
                 ComposedMessageId composedMessageId = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 doThrow(new RuntimeException())
                     .when(searchIndex)
@@ -1197,7 +1197,7 @@ class UserMailboxesRoutesTest {
                 ComposedMessageId createdMessage = 
mailboxManager.getMailbox(INBOX, systemSession)
                     .appendMessage(
                         MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
-                        systemSession);
+                        systemSession).getIds();
 
                 String taskId = given()
                     .queryParam("task", "reIndex")
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java
index ea86287..e21fc07 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java
@@ -115,7 +115,8 @@ class ExportServiceTest {
         return testSystem.mailboxManager.getMailbox(bobInboxPath, 
testSystem.bobSession)
             .appendMessage(MessageManager.AppendCommand.builder()
                     .build(message),
-                testSystem.bobSession);
+                testSystem.bobSession)
+            .getIds();
     }
 
     @Test
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportRequestToTaskTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportRequestToTaskTest.java
index 949bd4a..9dfe1e5 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportRequestToTaskTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportRequestToTaskTest.java
@@ -348,7 +348,7 @@ class MailboxesExportRequestToTaskTest {
 
         ComposedMessageId id = 
testSystem.mailboxManager.getMailbox(bobInboxboxId, 
testSystem.bobSession).appendMessage(
             MessageManager.AppendCommand.builder().build(MESSAGE_CONTENT),
-            testSystem.bobSession);
+            testSystem.bobSession).getIds();
 
         String taskId = with()
             .queryParam("action", "export")
@@ -375,7 +375,7 @@ class MailboxesExportRequestToTaskTest {
 
         ComposedMessageId id = 
testSystem.mailboxManager.getMailbox(bobInboxboxId, 
testSystem.bobSession).appendMessage(
             MessageManager.AppendCommand.builder().build(MESSAGE_CONTENT),
-            testSystem.bobSession);
+            testSystem.bobSession).getIds();
 
         testSystem.usersRepository.addUser(CEDRIC, PASSWORD);
         MailboxSession cedricSession = 
testSystem.mailboxManager.createSystemSession(CEDRIC);


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

Reply via email to