You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/01/24 05:49:15 UTC
[15/15] james-project git commit: JAMES-1785 GetMessages with
multiple mailboxes integration tests
JAMES-1785 GetMessages with multiple mailboxes integration tests
Also includes builder enhancements
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9875a46b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9875a46b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9875a46b
Branch: refs/heads/master
Commit: 9875a46b7920371a9103eeb60306f3d54563d154
Parents: bd6bd22
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 18 10:25:04 2017 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Tue Jan 24 09:58:20 2017 +0700
----------------------------------------------------------------------
.../org/apache/james/utils/JmapGuiceProbe.java | 23 ++++++++++++++-
.../cucumber/GetMessagesMethodStepdefs.java | 31 ++++++++++++++++++++
.../test/resources/cucumber/GetMessages.feature | 9 ++++++
.../james/jmap/methods/GetMessagesMethod.java | 1 +
.../org/apache/james/jmap/model/Message.java | 8 +++--
.../apache/james/jmap/model/MessageFactory.java | 11 +++----
.../james/jmap/model/MessageFactoryTest.java | 2 +-
.../apache/james/jmap/model/MessageTest.java | 24 +++++++--------
.../jmap/model/SetMessagesResponseTest.java | 4 +--
9 files changed, 89 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
index cfbbbb6..05e1646 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
@@ -19,6 +19,8 @@
package org.apache.james.utils;
+import java.util.Arrays;
+
import javax.inject.Inject;
import org.apache.james.jmap.JMAPServer;
@@ -26,16 +28,30 @@ import org.apache.james.jmap.api.vacation.AccountId;
import org.apache.james.jmap.api.vacation.Vacation;
import org.apache.james.jmap.api.vacation.VacationPatch;
import org.apache.james.jmap.api.vacation.VacationRepository;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageIdManager;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MessageId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class JmapGuiceProbe implements GuiceProbe {
+ private static final Logger LOGGER = LoggerFactory.getLogger(JmapGuiceProbe.class);
+
private final VacationRepository vacationRepository;
private final JMAPServer jmapServer;
+ private final MessageIdManager messageIdManager;
+ private final MailboxManager mailboxManager;
@Inject
- private JmapGuiceProbe(VacationRepository vacationRepository, JMAPServer jmapServer) {
+ private JmapGuiceProbe(VacationRepository vacationRepository, JMAPServer jmapServer, MessageIdManager messageIdManager, MailboxManager mailboxManager) {
this.vacationRepository = vacationRepository;
this.jmapServer = jmapServer;
+ this.messageIdManager = messageIdManager;
+ this.mailboxManager = mailboxManager;
}
public int getJmapPort() {
@@ -49,4 +65,9 @@ public class JmapGuiceProbe implements GuiceProbe {
public Vacation retrieveVacation(AccountId accountId) {
return vacationRepository.retrieveVacation(accountId).join();
}
+
+ public void setInMailboxes(MessageId messageId, String username, MailboxId... mailboxIds) throws MailboxException {
+ MailboxSession mailboxSession = mailboxManager.createSystemSession(username, LOGGER);
+ messageIdManager.setInMailboxes(messageId, Arrays.asList(mailboxIds), mailboxSession);
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
index 26b1e29..85c38d8 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
@@ -41,13 +41,16 @@ import org.apache.http.HttpResponse;
import org.apache.http.client.fluent.Request;
import org.apache.james.jmap.methods.integration.cucumber.util.TableRow;
import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.javatuples.Pair;
+import com.github.fge.lambdas.Throwing;
import com.github.steveash.guavate.Guavate;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
+import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.DocumentContext;
@@ -59,6 +62,7 @@ import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import cucumber.runtime.java.guice.ScenarioScoped;
+import net.minidev.json.JSONArray;
@ScenarioScoped
public class GetMessagesMethodStepdefs {
@@ -87,6 +91,16 @@ public class GetMessagesMethodStepdefs {
this.messageIdsByName = new HashMap<>();
}
+ @Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" and \"([^\"]*)\" mailboxes with subject \"([^\"]*)\", content \"([^\"]*)\"$")
+ public void appendMessageInTwoMailboxes(String messageName, String mailbox1, String mailbox2, String subject, String content) throws Throwable {
+ MessageId id = appendMessage(mailbox1, ContentType.noContentType(), subject, content, NO_HEADERS);
+ MailboxId mailboxId1 = mainStepdefs.jmapServer.serverProbe().getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, mailbox1).getMailboxId();
+ MailboxId mailboxId2 = mainStepdefs.jmapServer.serverProbe().getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, mailbox2).getMailboxId();
+
+ mainStepdefs.jmapServer.getJmapProbe().setInMailboxes(id, userStepdefs.lastConnectedUser, mailboxId1, mailboxId2);
+ messageIdsByName.put(messageName, id);
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with subject \"([^\"]*)\", content \"([^\"]*)\"$")
public void appendMessage(String messageName, String mailbox, String subject, String content) throws Throwable {
MessageId id = appendMessage(mailbox, ContentType.noContentType(), subject, content, NO_HEADERS);
@@ -315,6 +329,23 @@ public class GetMessagesMethodStepdefs {
assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".id")).isEqualTo(id.serialize());
}
+ @Then("^the message is in \"([^\"]*)\" mailboxes")
+ public void assertMailboxIdsOfTheFirstMessage(String mailboxIds) throws Throwable {
+ List<String> values = Splitter.on(",")
+ .splitToList(mailboxIds).stream()
+ .map(Throwing.function(name -> mainStepdefs.jmapServer
+ .serverProbe()
+ .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, name)
+ .getMailboxId()
+ .serialize()))
+ .distinct()
+ .collect(Guavate.toImmutableList());
+
+ assertThat(jsonPath.<JSONArray>read(FIRST_MESSAGE + ".mailboxIds"))
+ .hasSize(2)
+ .containsOnlyElementsOf(values);
+ }
+
@Then("^the threadId of the message is \"([^\"]*)\"$")
public void assertThreadIdOfTheFirstMessage(String threadId) throws Throwable {
MessageId id = messageIdsByName.get(threadId);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
index a559e08..d06a81a 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
@@ -7,6 +7,15 @@ Feature: GetMessages method
And a connected user "username@domain.tld"
And "username@domain.tld" has a mailbox "inbox"
+ Scenario: Retrieving a message in several mailboxes should return a single message in these mailboxes
+ Given "username@domain.tld" has a mailbox "custom"
+ And the user has a message "m1" in "inbox" and "custom" mailboxes with subject "my test subject", content "testmail"
+ When the user ask for messages "m1"
+ Then no error is returned
+ And the list should contain 1 message
+ And the id of the message is "m1"
+ And the message is in "custom,inbox" mailboxes
+
Scenario: Retrieving messages with a non null accountId should return a NotSupported error
When the user ask for messages using its accountId
Then an error "Not yet implemented" is returned
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
index 41f68ae..404e404 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
@@ -131,6 +131,7 @@ public class GetMessagesMethod implements Method {
.collect(Guavate.toImmutableList());
List<MailboxId> mailboxIds = messageResults.stream()
.map(MessageResult::getMailboxId)
+ .distinct()
.collect(Guavate.toImmutableList());
return messageResults.stream()
.findFirst()
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
index f504871..5937560 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
@@ -21,6 +21,7 @@ package org.apache.james.jmap.model;
import java.time.ZonedDateTime;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -99,16 +100,17 @@ public class Message {
return this;
}
+ @JsonIgnore
public Builder mailboxId(MailboxId mailboxId) {
- return this.mailboxIds(ImmutableList.of(mailboxId));
+ return this.fluentMailboxIds(mailboxId);
}
@JsonIgnore
- public Builder mailboxIds(MailboxId... mailboxIds) {
+ public Builder fluentMailboxIds(MailboxId... mailboxIds) {
return this.mailboxIds(Arrays.asList((mailboxIds)));
}
- public Builder mailboxIds(List<MailboxId> mailboxIds) {
+ public Builder mailboxIds(Collection<MailboxId> mailboxIds) {
this.mailboxIds = ImmutableList.copyOf(mailboxIds);
return this;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
index bc92fc5..9dc1acf 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
@@ -27,6 +27,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import java.util.TimeZone;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -55,8 +56,8 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
import com.google.common.collect.Multimaps;
+import com.google.common.collect.Sets;
public class MessageFactory {
@@ -235,7 +236,7 @@ public class MessageFactory {
private InputStream content;
private SharedInputStream sharedContent;
private List<MessageAttachment> attachments;
- private List<MailboxId> mailboxIds = Lists.newArrayList();
+ private Set<MailboxId> mailboxIds = Sets.newHashSet();
private MessageId messageId;
public Builder uid(MessageUid uid) {
@@ -317,10 +318,10 @@ public class MessageFactory {
private final InputStream content;
private final SharedInputStream sharedContent;
private final List<MessageAttachment> attachments;
- private final List<MailboxId> mailboxIds;
+ private final Set<MailboxId> mailboxIds;
private final MessageId messageId;
- private MetaDataWithContent(MessageUid uid, long modSeq, Flags flags, long size, Date internalDate, InputStream content, SharedInputStream sharedContent, List<MessageAttachment> attachments, List<MailboxId> mailboxIds, MessageId messageId) {
+ private MetaDataWithContent(MessageUid uid, long modSeq, Flags flags, long size, Date internalDate, InputStream content, SharedInputStream sharedContent, List<MessageAttachment> attachments, Set<MailboxId> mailboxIds, MessageId messageId) {
this.uid = uid;
this.modSeq = modSeq;
this.flags = flags;
@@ -370,7 +371,7 @@ public class MessageFactory {
return attachments;
}
- public List<MailboxId> getMailboxIds() {
+ public Set<MailboxId> getMailboxIds() {
return mailboxIds;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
index 9381043..c0bd1f3 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
@@ -148,7 +148,7 @@ public class MessageFactoryTest {
.id(TestMessageId.of(2))
.blobId(BlobId.of("2"))
.threadId("2")
- .mailboxIds(ImmutableList.of(MAILBOX_ID))
+ .mailboxId(MAILBOX_ID)
.inReplyToMessageId("<SN...@phx.gbl>")
.headers(headersMap)
.from(user)
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
index 7cb3db2..0407c36 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
@@ -60,41 +60,41 @@ public class MessageTest {
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenHeadersIsNull() {
- Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").mailboxIds(ImmutableList.of()).build();
+ Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").fluentMailboxIds().build();
}
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenSubjectIsNull() {
- Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").mailboxIds(ImmutableList.of()).headers(ImmutableMap.of()).build();
+ Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").fluentMailboxIds().headers(ImmutableMap.of()).build();
}
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenSubjectIsEmpty() {
- Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").mailboxIds(ImmutableList.of()).headers(ImmutableMap.of())
+ Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").fluentMailboxIds().headers(ImmutableMap.of())
.subject("").build();
}
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenSizeIsNull() {
- Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").mailboxIds(ImmutableList.of()).headers(ImmutableMap.of())
+ Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").fluentMailboxIds().headers(ImmutableMap.of())
.subject("subject").build();
}
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenDateIsNull() {
- Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").mailboxIds(ImmutableList.of()).headers(ImmutableMap.of())
+ Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").fluentMailboxIds().headers(ImmutableMap.of())
.subject("subject").size(123).build();
}
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenPreviewIsNull() {
- Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").mailboxIds(ImmutableList.of()).headers(ImmutableMap.of())
+ Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").fluentMailboxIds().headers(ImmutableMap.of())
.subject("subject").size(123).date(ZonedDateTime.now()).build();
}
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenPreviewIsEmpty() {
- Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").mailboxIds(ImmutableList.of()).headers(ImmutableMap.of())
+ Message.builder().id(TestMessageId.of(1)).blobId(BlobId.of("blobId")).threadId("threadId").fluentMailboxIds().headers(ImmutableMap.of())
.subject("subject").size(123).date(ZonedDateTime.now()).preview("").build();
}
@@ -107,7 +107,7 @@ public class MessageTest {
.id(TestMessageId.of(1))
.blobId(BlobId.of("blobId"))
.threadId("threadId")
- .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
+ .mailboxId(InMemoryId.of(456))
.headers(ImmutableMap.of("key", "value"))
.subject("subject")
.size(123)
@@ -131,7 +131,7 @@ public class MessageTest {
.id(TestMessageId.of(1))
.blobId(BlobId.of("blobId"))
.threadId("threadId")
- .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
+ .mailboxId(InMemoryId.of(456))
.headers(ImmutableMap.of("key", "value"))
.subject("subject")
.size(123)
@@ -187,7 +187,7 @@ public class MessageTest {
.id(TestMessageId.of(1))
.blobId(BlobId.of("blobId"))
.threadId("threadId")
- .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
+ .mailboxId(InMemoryId.of(456))
.inReplyToMessageId("inReplyToMessageId")
.isUnread(true)
.isFlagged(true)
@@ -217,7 +217,7 @@ public class MessageTest {
.id(TestMessageId.of(1))
.blobId(BlobId.of("blobId"))
.threadId("threadId")
- .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
+ .mailboxId(InMemoryId.of(456))
.headers(ImmutableMap.of("key", "value"))
.subject("subject")
.size(1)
@@ -237,7 +237,7 @@ public class MessageTest {
.id(TestMessageId.of(1))
.blobId(BlobId.of("blobId"))
.threadId("threadId")
- .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
+ .mailboxId(InMemoryId.of(456))
.headers(ImmutableMap.of("key", "value"))
.subject("subject")
.size(1)
http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
index 9340c7a..b75b47c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
@@ -61,7 +61,7 @@ public class SetMessagesResponseTest {
.id(TestMessageId.of(1))
.blobId(BlobId.of("blobId"))
.threadId("threadId")
- .mailboxIds(ImmutableList.of(InMemoryId.of(123)))
+ .mailboxId(InMemoryId.of(123))
.headers(ImmutableMap.of("key", "value"))
.subject("subject")
.size(123)
@@ -111,7 +111,7 @@ public class SetMessagesResponseTest {
.id(messageId)
.blobId(BlobId.of("blobId"))
.threadId("threadId")
- .mailboxIds(ImmutableList.of())
+ .fluentMailboxIds()
.headers(ImmutableMap.of())
.subject("subject")
.size(0)
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org