JAMES-2363 Correct Redirect mailets MessageID preservation

This mailet allow sending a copy of the email, potentially with unmodified 
header. Even using MimeMessageSaver
these header were reset. Thus I managed to do some additional modifications in 
a separate commit.


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

Branch: refs/heads/master
Commit: 3d8724efb9c625e1b3623173d9c846934ba1de4a
Parents: d24020b
Author: benwa <[email protected]>
Authored: Mon Mar 26 09:34:31 2018 +0700
Committer: benwa <[email protected]>
Committed: Thu Mar 29 16:42:52 2018 +0700

----------------------------------------------------------------------
 .../mailets/redirect/MailModifier.java          |  3 +-
 .../mailets/redirect/ProcessRedirectNotify.java |  5 +-
 .../james/transport/mailets/RedirectTest.java   | 52 ++++++++++++++++++++
 3 files changed, 56 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3d8724ef/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MailModifier.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MailModifier.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MailModifier.java
index 4a11065..9e7f631 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MailModifier.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MailModifier.java
@@ -210,8 +210,7 @@ public class MailModifier {
         }
     }
 
-    public void setMessageId(Mail originalMail) throws MessagingException {
-        String messageId = originalMail.getMessage().getMessageID();
+    public void setMessageId(String messageId) throws MessagingException {
         if (messageId != null) {
             mail.getMessage().setHeader(RFC2822Headers.MESSAGE_ID, messageId);
             if (mailet.getInitParameters().isDebug()) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d8724ef/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java
index eec8238..fc2fcc2 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java
@@ -48,6 +48,7 @@ public class ProcessRedirectNotify {
         // the original untouched
         MailImpl newMail = MailImpl.duplicate(originalMail);
         try {
+            String originalMessageId = 
originalMail.getMessage().getMessageID();
             MailModifier mailModifier = MailModifier.builder()
                     .mailet(mailet)
                     .mail(newMail)
@@ -80,7 +81,7 @@ public class ProcessRedirectNotify {
             mailModifier.setSender(mailet.getSender(originalMail), 
originalMail);
             mailModifier.initializeDateIfNotPresent();
             if (keepMessageId) {
-                mailModifier.setMessageId(originalMail);
+                mailModifier.setMessageId(originalMessageId);
             }
             finalize(newMail);
 
@@ -89,7 +90,7 @@ public class ProcessRedirectNotify {
                 mailet.getMailetContext().sendMail(newMail);
             } else {
                 throw new MessagingException(mailet.getMailetName() + " mailet 
cannot forward " + originalMail.getName() + ". " +
-                        "Invalid sender domain for " + newMail.getSender() + 
". " + 
+                        "Invalid sender domain for " + newMail.getSender() + 
". " +
                         "Consider using the Resend mailet " + "using a 
different sender.");
             }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d8724ef/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RedirectTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RedirectTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RedirectTest.java
index ff72b03..ef490b3 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RedirectTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RedirectTest.java
@@ -397,4 +397,56 @@ public class RedirectTest {
         SentMail newMail = fakeMailContext.getSentMails().get(0);
         assertThat(newMail.getSubject()).contains("pre subj");
     }
+
+    @Test
+    public void unalteredShouldPreserveMessageId() throws Exception {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName(MAILET_NAME)
+            .mailetContext(fakeMailContext)
+            .setProperty("inline", "unaltered")
+            .build();
+        redirect.init(mailetConfig);
+
+        String messageId = "<matchme@localhost>";
+        FakeMail mail = FakeMail.builder()
+            .name(MAILET_NAME)
+            .sender(MailAddressFixture.ANY_AT_JAMES)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .addHeader("Message-ID", messageId)
+                .setSubject("My subject")
+                .setText("Content"))
+            .build();
+
+        redirect.service(mail);
+
+        SentMail newMail = fakeMailContext.getSentMails().get(0);
+        assertThat(newMail.getMsg().getMessageID())
+            .isEqualTo(messageId);
+    }
+
+    @Test
+    public void alteredShouldResetMessageId() throws Exception {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName(MAILET_NAME)
+            .mailetContext(fakeMailContext)
+            .setProperty("inline", "all")
+            .build();
+        redirect.init(mailetConfig);
+
+        String messageId = "<matchme@localhost>";
+        FakeMail mail = FakeMail.builder()
+            .name(MAILET_NAME)
+            .sender(MailAddressFixture.ANY_AT_JAMES)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .addHeader("Message-ID", messageId)
+                .setSubject("My subject")
+                .setText("Content"))
+            .build();
+
+        redirect.service(mail);
+
+        SentMail newMail = fakeMailContext.getSentMails().get(0);
+        assertThat(newMail.getMsg().getMessageID())
+            .isNotEqualTo(messageId);
+    }
 }


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

Reply via email to