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]
