JAMES-2363 MimeMessageBuilder should preserve MessageID

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

Branch: refs/heads/master
Commit: ae042f00f0343a89bfdb0c58f802b87b8fb4e73b
Parents: ce04a35
Author: benwa <[email protected]>
Authored: Thu Mar 29 11:29:05 2018 +0700
Committer: benwa <[email protected]>
Committed: Thu Mar 29 16:44:49 2018 +0700

----------------------------------------------------------------------
 .../james/core/builder/MimeMessageBuilder.java  | 12 +++--
 .../core/builder/MimeMessageBuilderTest.java    | 53 ++++++++++++++++++++
 2 files changed, 62 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ae042f00/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java 
b/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
index 303743e..044360f 100644
--- a/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
+++ b/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
@@ -393,13 +393,19 @@ public class MimeMessageBuilder {
         if (!bccAddresses.isEmpty()) {
             mimeMessage.setRecipients(Message.RecipientType.BCC, 
bccAddresses.toArray(new InternetAddress[bccAddresses.size()]));
         }
+
+        MimeMessage wrappedMessage = MimeMessageWrapper.wrap(mimeMessage);
+
         List<Header> headerList = headers.build();
         for (Header header: headerList) {
-            mimeMessage.addHeader(header.name, header.value);
+            if (header.name.equals("Message-ID")) {
+                wrappedMessage.setHeader(header.name, header.value);
+            } else {
+                wrappedMessage.addHeader(header.name, header.value);
+            }
         }
-
-        MimeMessage wrappedMessage = MimeMessageWrapper.wrap(mimeMessage);
         wrappedMessage.saveChanges();
+
         return wrappedMessage;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ae042f00/core/src/test/java/org/apache/james/core/builder/MimeMessageBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/james/core/builder/MimeMessageBuilderTest.java 
b/core/src/test/java/org/apache/james/core/builder/MimeMessageBuilderTest.java
new file mode 100644
index 0000000..bf33f07
--- /dev/null
+++ 
b/core/src/test/java/org/apache/james/core/builder/MimeMessageBuilderTest.java
@@ -0,0 +1,53 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.core.builder;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import javax.mail.internet.MimeMessage;
+
+import org.junit.Test;
+
+public class MimeMessageBuilderTest {
+
+    @Test
+    public void buildShouldPreserveMessageID() throws Exception {
+        String messageID = "<abc@123>";
+        MimeMessage mimeMessage = MimeMessageBuilder.mimeMessageBuilder()
+            .addHeader("Message-ID", messageID)
+            .build();
+
+        assertThat(mimeMessage.getMessageID())
+            .isEqualTo(messageID);
+    }
+
+    @Test
+    public void buildShouldAllowMultiValuedHeader() throws Exception {
+        String headerName = "header";
+        MimeMessage mimeMessage = MimeMessageBuilder.mimeMessageBuilder()
+            .addHeader(headerName, "value1")
+            .addHeader(headerName, "value2")
+            .build();
+
+        assertThat(mimeMessage.getHeader(headerName))
+            .hasSize(2);
+    }
+
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to