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 2016/04/06 11:21:57 UTC

[13/18] james-project git commit: MAILBOX-266 Sorts should work

MAILBOX-266 Sorts should work


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7f02ab71
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7f02ab71
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7f02ab71

Branch: refs/heads/master
Commit: 7f02ab719453f704fbf39f67a6784b76dc2a2ae9
Parents: f9717d2
Author: Benoit Tellier <bt...@linagora.com>
Authored: Mon Mar 28 16:27:07 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Apr 6 16:18:45 2016 +0700

----------------------------------------------------------------------
 .../elasticsearch/IndexCreationFactory.java     |  28 +++-
 .../elasticsearch/NodeMappingFactory.java       |  25 ++++
 .../elasticsearch/query/SortConverter.java      |  36 ++++--
 .../ElasticSearchIntegrationTest.java           | 127 ++++++++++++++++++-
 .../src/test/resources/documents/mail1.eml      |   4 +-
 .../src/test/resources/documents/mail2.eml      |   5 +-
 .../src/test/resources/documents/mail3.eml      |   5 +-
 .../src/test/resources/documents/mail4.eml      |   2 +-
 8 files changed, 202 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexCreationFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexCreationFactory.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexCreationFactory.java
index 71a6c11..6cf0933 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexCreationFactory.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexCreationFactory.java
@@ -19,10 +19,12 @@
 
 package org.apache.james.mailbox.elasticsearch;
 
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+
 import java.io.IOException;
 
 import org.elasticsearch.client.Client;
-import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.elasticsearch.indices.IndexAlreadyExistsException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,6 +34,7 @@ public class IndexCreationFactory {
     private static final Logger LOGGER = LoggerFactory.getLogger(IndexCreationFactory.class);
     private static final int DEFAULT_NB_SHARDS = 1;
     private static final int DEFAULT_NB_REPLICA = 0;
+    public static final String CASE_INSENSITIVE = "case_insensitive";
 
     public static ClientProvider createIndex(ClientProvider clientProvider, int nbShards, int nbReplica) {
         try {
@@ -46,7 +49,7 @@ public class IndexCreationFactory {
         return createIndex(clientProvider, DEFAULT_NB_SHARDS, DEFAULT_NB_REPLICA);
     }
 
-    private static ClientProvider createIndex(ClientProvider clientProvider, Settings settings) {
+    private static ClientProvider createIndex(ClientProvider clientProvider, XContentBuilder settings) {
         try {
             try (Client client = clientProvider.get()) {
                 client.admin()
@@ -62,11 +65,22 @@ public class IndexCreationFactory {
         return clientProvider;
     }
 
-    private static Settings generateSetting(int nbShards, int nbReplica) throws IOException {
-        return Settings.builder()
-            .put("number_of_shards", nbShards)
-            .put("number_of_replicas", nbReplica)
-            .build();
+    private static XContentBuilder generateSetting(int nbShards, int nbReplica) throws IOException {
+        return jsonBuilder()
+            .startObject()
+                .field("number_of_shards", nbShards)
+                .field("number_of_replicas", nbReplica)
+                .startObject("analysis")
+                    .startObject("analyzer")
+                        .startObject(CASE_INSENSITIVE)
+                            .field("tokenizer", "keyword")
+                            .startArray("filter")
+                                .value("lowercase")
+                            .endArray()
+                        .endObject()
+                    .endObject()
+                .endObject()
+            .endObject();
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
index 758f3c2..85b5b05 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/NodeMappingFactory.java
@@ -41,6 +41,9 @@ public class NodeMappingFactory {
     public static final String DATE = "date";
     public static final String FORMAT = "format";
     public static final String NESTED = "nested";
+    public static final String FIELDS = "fields";
+    public static final String RAW = "raw";
+    public static final String ANALYZER = "analyzer";
 
     public static ClientProvider applyMapping(ClientProvider clientProvider) {
         return applyMapping(clientProvider, getMappingContent());
@@ -118,6 +121,12 @@ public class NodeMappingFactory {
                                 .startObject(PROPERTIES)
                                     .startObject(JsonMessageConstants.EMailer.NAME)
                                         .field(TYPE, STRING)
+                                        .startObject(FIELDS)
+                                            .startObject(RAW)
+                                                .field(TYPE, STRING)
+                                                .field(ANALYZER, IndexCreationFactory.CASE_INSENSITIVE)
+                                            .endObject()
+                                        .endObject()
                                     .endObject()
                                     .startObject(JsonMessageConstants.EMailer.ADDRESS)
                                         .field(TYPE, STRING)
@@ -126,11 +135,27 @@ public class NodeMappingFactory {
                                 .endObject()
                             .endObject()
 
+                            .startObject(JsonMessageConstants.SUBJECT)
+                                .field(TYPE, STRING)
+                                .startObject(FIELDS)
+                                    .startObject(RAW)
+                                        .field(TYPE, STRING)
+                                        .field(ANALYZER, IndexCreationFactory.CASE_INSENSITIVE)
+                                    .endObject()
+                                .endObject()
+                            .endObject()
+
                             .startObject(JsonMessageConstants.TO)
                                 .field(TYPE, NESTED)
                                 .startObject(PROPERTIES)
                                     .startObject(JsonMessageConstants.EMailer.NAME)
                                         .field(TYPE, STRING)
+                                        .startObject(FIELDS)
+                                            .startObject(RAW)
+                                                .field(TYPE, STRING)
+                                                .field(ANALYZER, IndexCreationFactory.CASE_INSENSITIVE)
+                                            .endObject()
+                                        .endObject()
                                     .endObject()
                                     .startObject(JsonMessageConstants.EMailer.ADDRESS)
                                         .field(TYPE, STRING)

http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/SortConverter.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/SortConverter.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/SortConverter.java
index 7ac74ea..5644239 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/SortConverter.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/query/SortConverter.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.elasticsearch.query;
 
+import org.apache.james.mailbox.elasticsearch.NodeMappingFactory;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.elasticsearch.search.sort.FieldSortBuilder;
@@ -27,33 +28,42 @@ import org.elasticsearch.search.sort.SortOrder;
 
 public class SortConverter {
 
+    private static final String MIN = "min";
+    private static final String PATH_SEPARATOR = ".";
+
     public static FieldSortBuilder convertSort(SearchQuery.Sort sort) {
-        return SortBuilders.fieldSort(getFieldFromClause(sort.getSortClause()))
-            .order(getOrder(sort));
+        return getSortClause(sort.getSortClause())
+            .order(getOrder(sort))
+            .sortMode(MIN);
     }
 
-    private static String getFieldFromClause(SearchQuery.Sort.SortClause clause) {
+    private static FieldSortBuilder getSortClause(SearchQuery.Sort.SortClause clause) {
         switch (clause) {
             case Arrival :
-                return JsonMessageConstants.DATE;
+                return SortBuilders.fieldSort(JsonMessageConstants.DATE);
             case MailboxCc :
-                return JsonMessageConstants.CC;
+                return SortBuilders.fieldSort(JsonMessageConstants.CC + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS)
+                    .setNestedPath(JsonMessageConstants.CC);
             case MailboxFrom :
-                return JsonMessageConstants.FROM + "." + JsonMessageConstants.EMailer.ADDRESS;
+                return SortBuilders.fieldSort(JsonMessageConstants.FROM + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS)
+                    .setNestedPath(JsonMessageConstants.FROM);
             case MailboxTo :
-                return JsonMessageConstants.TO + "." + JsonMessageConstants.EMailer.ADDRESS;
+                return SortBuilders.fieldSort(JsonMessageConstants.TO + PATH_SEPARATOR + JsonMessageConstants.EMailer.ADDRESS)
+                    .setNestedPath(JsonMessageConstants.TO);
             case BaseSubject :
-                return JsonMessageConstants.SUBJECT;
+                return SortBuilders.fieldSort(JsonMessageConstants.SUBJECT);
             case Size :
-                return JsonMessageConstants.SIZE;
+                return SortBuilders.fieldSort(JsonMessageConstants.SIZE);
             case SentDate :
-                return JsonMessageConstants.DATE;
+                return SortBuilders.fieldSort(JsonMessageConstants.SENT_DATE);
             case Uid :
-                return JsonMessageConstants.ID;
+                return SortBuilders.fieldSort(JsonMessageConstants.ID);
             case DisplayFrom:
-                return JsonMessageConstants.FROM + "." + JsonMessageConstants.EMailer.NAME;
+                return SortBuilders.fieldSort(JsonMessageConstants.FROM + PATH_SEPARATOR + JsonMessageConstants.EMailer.NAME + PATH_SEPARATOR + NodeMappingFactory.RAW)
+                    .setNestedPath(JsonMessageConstants.FROM);
             case DisplayTo:
-                return JsonMessageConstants.TO + "." + JsonMessageConstants.EMailer.NAME;
+                return SortBuilders.fieldSort(JsonMessageConstants.TO + PATH_SEPARATOR + JsonMessageConstants.EMailer.NAME + PATH_SEPARATOR + NodeMappingFactory.RAW)
+                    .setNestedPath(JsonMessageConstants.TO);
             default:
                 throw new RuntimeException("Sort is not implemented");
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
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 832e4a6..e2ddc84 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
@@ -50,7 +50,6 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
@@ -63,8 +62,8 @@ import com.google.common.collect.Lists;
 public class ElasticSearchIntegrationTest {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchIntegrationTest.class);
-    public static final int BATCH_SIZE = 1;
-    public static final int SEARCH_SIZE = 1;
+    private static final int BATCH_SIZE = 1;
+    private static final int SEARCH_SIZE = 1;
 
     private TemporaryFolder temporaryFolder = new TemporaryFolder();
     private EmbeddedElasticSearch embeddedElasticSearch= new EmbeddedElasticSearch(temporaryFolder);
@@ -578,4 +577,126 @@ public class ElasticSearchIntegrationTest {
             .containsOnly(1L, 6L);
     }
 
+    @Test
+    public void sortOnCcShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.MailboxCc)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(3L, 5L, 4L, 2L);
+        // 2 : No cc
+        // 3 : Cc : abc@abc.org
+        // 4 : zzz@bcd.org
+        // 5 : any@any.com
+    }
+
+    @Test
+    public void sortOnFromShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.MailboxFrom)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(3L, 2L, 4L, 5L);
+        // 2 : jira2@apache.org
+        // 3 : jira1@apache.org
+        // 4 : jira@apache.org
+        // 5 : mailet-api@james.apache.org
+    }
+
+    @Test
+    public void sortOnToShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.MailboxTo)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(5L, 2L, 3L, 4L);
+        // 2 : server-dev@james.apache.org
+        // 3 : server-dev@james.apache.org
+        // 4 : server-dev@james.apache.org
+        // 5 : mailet-api@james.apache.org
+    }
+
+    @Test
+    public void sortOnSubjectShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.BaseSubject)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(4L, 3L, 2L, 5L);
+        // 2 : [jira] [Created] (MAILBOX-234) Convert Message into JSON
+        // 3 : [jira] [Closed] (MAILBOX-217) We should index attachment in elastic search
+        // 4 : [jira] [Closed] (MAILBOX-11) MailboxQuery ignore namespace
+        // 5 : [jira] [Resolved] (MAILET-94) James Mailet should use latest version of other James subprojects
+    }
+
+    @Test
+    public void sortOnSizeShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Size)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(2L, 3L, 5L, 4L);
+        // 2 : 3210 o
+        // 3 : 3647 o
+        // 4 : 4360 o
+        // 5 : 3653 o
+    }
+
+    @Test
+    public void sortOnDisplayFromShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.DisplayFrom)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(4L, 3L, 5L, 2L);
+        // 2 : Tellier Benoit (JIRA)
+        // 3 : efij
+        // 4 : abcd
+        // 5 : Eric Charles (JIRA)
+    }
+
+    @Test
+    public void sortOnDisplayToShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.DisplayTo)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(3L, 2L, 4L, 5L);
+        // 2 : abc
+        // 3 : aaa
+        // 4 : server
+        // 5 : zzz
+    }
+
+    @Test
+    public void sortOnSentDateShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.SentDate)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(5L, 4L, 2L, 3L);
+        // 2 : 4 Jun 2015 09:23:37
+        // 3 : 4 Jun 2015 09:27:37
+        // 4 : 2 Jun 2015 08:16:19
+        // 5 : 15 May 2015 06:35:59
+    }
+
+    @Test
+    public void sortOnIdShouldWork() throws Exception {
+        SearchQuery searchQuery = new SearchQuery();
+        SearchQuery.NumericRange[] numericRanges = {new SearchQuery.NumericRange(2L, 5L)};
+        searchQuery.andCriteria(SearchQuery.uid(numericRanges));
+        searchQuery.setSorts(Lists.newArrayList(new SearchQuery.Sort(SearchQuery.Sort.SortClause.Uid)));
+        assertThat(elasticSearchListeningMessageSearchIndex.search(session, mailbox, searchQuery))
+            .containsExactly(2L, 3L, 4L, 5L);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/test/resources/documents/mail1.eml
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/resources/documents/mail1.eml b/mailbox/elasticsearch/src/test/resources/documents/mail1.eml
index 3d596f7..3850a62 100644
--- a/mailbox/elasticsearch/src/test/resources/documents/mail1.eml
+++ b/mailbox/elasticsearch/src/test/resources/documents/mail1.eml
@@ -33,8 +33,8 @@ Received: (qmail 37236 invoked by uid 99); 4 Jun 2015 09:23:38 -0000
 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
     by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:23:38 +0000
 Date: Thu, 4 Jun 2015 09:23:37 +0000 (UTC)
-From: "Tellier Benoit (JIRA)" <ji...@apache.org>
-To: server-dev@james.apache.org
+From: "Tellier Benoit (JIRA)" <ji...@apache.org>
+To: "abc" <se...@james.apache.org>
 Message-ID: <JI...@Atlassian.JIRA>
 In-Reply-To: <JI...@Atlassian.JIRA>
 References: <JI...@Atlassian.JIRA> <JI...@arcas>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/test/resources/documents/mail2.eml
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/resources/documents/mail2.eml b/mailbox/elasticsearch/src/test/resources/documents/mail2.eml
index 5f361de..9c2c413 100644
--- a/mailbox/elasticsearch/src/test/resources/documents/mail2.eml
+++ b/mailbox/elasticsearch/src/test/resources/documents/mail2.eml
@@ -33,8 +33,9 @@ Received: (qmail 43130 invoked by uid 99); 4 Jun 2015 09:27:38 -0000
 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
     by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:27:38 +0000
 Date: Thu, 4 Jun 2015 09:27:37 +0000 (UTC)
-From: "Tellier Benoit (JIRA)" <ji...@apache.org>
-To: server-dev@james.apache.org
+From: "efij" <ji...@apache.org>
+To: "aaa" <se...@james.apache.org>
+Cc: abc@abc.org
 Message-ID: <JI...@Atlassian.JIRA>
 In-Reply-To: <JI...@Atlassian.JIRA>
 References: <JI...@Atlassian.JIRA> <JI...@arcas>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/test/resources/documents/mail3.eml
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/resources/documents/mail3.eml b/mailbox/elasticsearch/src/test/resources/documents/mail3.eml
index 1e7f788..e9cc325 100644
--- a/mailbox/elasticsearch/src/test/resources/documents/mail3.eml
+++ b/mailbox/elasticsearch/src/test/resources/documents/mail3.eml
@@ -35,8 +35,9 @@ Received: (qmail 1132 invoked by uid 99); 2 Jun 2015 08:16:20 -0000
 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
     by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 02 Jun 2015 08:16:20 +0000
 Date: Tue, 2 Jun 2015 08:16:19 +0000 (UTC)
-From: "Eric Charles (JIRA)" <ji...@apache.org>
-To: server-dev@james.apache.org
+From: "abcd" <ji...@apache.org>
+Cc: zzz@bcd.org
+To: "server" <se...@james.apache.org>
 Message-ID: <JI...@Atlassian.JIRA>
 In-Reply-To: <JI...@Atlassian.JIRA>
 References: <JI...@Atlassian.JIRA> <JI...@arcas>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7f02ab71/mailbox/elasticsearch/src/test/resources/documents/mail4.eml
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/resources/documents/mail4.eml b/mailbox/elasticsearch/src/test/resources/documents/mail4.eml
index 584b24c..37ecba1 100644
--- a/mailbox/elasticsearch/src/test/resources/documents/mail4.eml
+++ b/mailbox/elasticsearch/src/test/resources/documents/mail4.eml
@@ -36,7 +36,7 @@ Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
     by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 15 May 2015 06:36:00 +0000
 Date: Fri, 15 May 2015 06:35:59 +0000 (UTC)
 From: "Eric Charles (JIRA)" <ma...@james.apache.org>
-To: mailet-api@james.apache.org
+To: "zzz" <ma...@james.apache.org>
 Cc: any@any.com
 Bcc: any@any.com
 Message-ID: <JI...@Atlassian.JIRA>


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