This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit d80a694824a849c685044faf67472fbeeeeceac0
Author: Benoit Tellier <[email protected]>
AuthorDate: Thu Feb 3 22:44:42 2022 +0700

    JAMES-3712 Bounce should prefix bounced message
---
 .../org/apache/james/transport/mailets/Bounce.java |  2 +-
 .../james/transport/mailets/NotifyPostmaster.java  |  2 +-
 .../james/transport/mailets/NotifySender.java      |  2 +-
 .../apache/james/transport/mailets/BounceTest.java | 29 ++++++++++++-
 .../transport/mailets/NotifyPostmasterTest.java    | 48 +++++++++++++++++-----
 .../james/transport/mailets/NotifySenderTest.java  | 48 +++++++++++++++++-----
 upgrade-instructions.md                            | 34 +++++++++++++++
 7 files changed, 138 insertions(+), 27 deletions(-)

diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
index 436d910..ab1eefe 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
@@ -260,6 +260,6 @@ public class Bounce extends GenericMailet implements 
RedirectNotify {
 
     @Override
     public MimeMessageModifier getMimeMessageModifier(Mail newMail, Mail 
originalMail) throws MessagingException {
-        return new MimeMessageModifier(originalMail.getMessage());
+        return new MimeMessageModifier(newMail.getMessage());
     }
 }
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifyPostmaster.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifyPostmaster.java
index 58035e4..ddaae14 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifyPostmaster.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifyPostmaster.java
@@ -255,7 +255,7 @@ public class NotifyPostmaster extends GenericMailet 
implements RedirectNotify {
 
     @Override
     public MimeMessageModifier getMimeMessageModifier(Mail newMail, Mail 
originalMail) throws MessagingException {
-        return new MimeMessageModifier(originalMail.getMessage());
+        return new MimeMessageModifier(newMail.getMessage());
     }
 
     @Override
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifySender.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifySender.java
index eae9b49..942261d 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifySender.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifySender.java
@@ -255,7 +255,7 @@ public class NotifySender extends GenericMailet implements 
RedirectNotify {
 
     @Override
     public MimeMessageModifier getMimeMessageModifier(Mail newMail, Mail 
originalMail) throws MessagingException {
-        return new MimeMessageModifier(originalMail.getMessage());
+        return new MimeMessageModifier(newMail.getMessage());
     }
 
     @Override
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
index 6c5d782..fc9ea26 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
@@ -210,7 +210,7 @@ public class BounceTest {
     }
 
     @Test
-    void bounceShouldAddPrefixToSubjectWhenPrefixIsConfigured() throws 
Exception {
+    void 
bounceShouldNotAddPrefixToSubjectOfInFlightMailWhenPrefixIsConfigured() throws 
Exception {
         FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
                 .mailetName(MAILET_NAME)
                 .mailetContext(fakeMailContext)
@@ -228,6 +228,31 @@ public class BounceTest {
 
         bounce.service(mail);
 
-        assertThat(mail.getMessage().getSubject()).isEqualTo("pre My subject");
+        assertThat(mail.getMessage().getSubject()).isEqualTo("My subject");
+    }
+
+    @Test
+    void bounceShouldAddPrefixToSubjectOfSentEmailWhenPrefixIsConfigured() 
throws Exception {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName(MAILET_NAME)
+                .mailetContext(fakeMailContext)
+                .setProperty("prefix", "pre")
+                .build();
+        bounce.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+            .name(MAILET_NAME)
+            .sender(MailAddressFixture.ANY_AT_JAMES)
+            .recipient(MailAddressFixture.ANY_AT_JAMES2)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .setSubject("My subject"))
+            .build();
+
+        bounce.service(mail);
+
+        assertThat(fakeMailContext.getSentMails())
+            .first()
+            .extracting(s -> s.getSubject().get())
+            .isEqualTo("pre My subject");
     }
 }
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifyPostmasterTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifyPostmasterTest.java
index f2c12b6..1b713af 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifyPostmasterTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifyPostmasterTest.java
@@ -140,23 +140,49 @@ public class NotifyPostmasterTest {
     }
 
     @Test
-    void notifyPostmasterShouldAddPrefixToSubjectWhenPrefixIsConfigured() 
throws Exception {
+    void 
notifyPostmasterShouldNotAddPrefixToSubjectOfInFlightMailWhenPrefixIsConfigured()
 throws Exception {
         FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
-                .mailetName(MAILET_NAME)
-                .mailetContext(fakeMailContext)
-                .setProperty("prefix", "pre")
-                .build();
+            .mailetName(MAILET_NAME)
+            .mailetContext(fakeMailContext)
+            .setProperty("prefix", "pre")
+            .build();
         notifyPostmaster.init(mailetConfig);
 
         FakeMail mail = FakeMail.builder()
-                .name(MAILET_NAME)
-                .sender(MailAddressFixture.ANY_AT_JAMES)
-                .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
-                    .setSubject("My subject"))
-                .build();
+            .name(MAILET_NAME)
+            .sender(MailAddressFixture.ANY_AT_JAMES)
+            .recipient(MailAddressFixture.ANY_AT_JAMES2)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .setSubject("My subject"))
+            .build();
+
+        notifyPostmaster.service(mail);
+
+        assertThat(mail.getMessage().getSubject()).isEqualTo("My subject");
+    }
+
+    @Test
+    void 
notifyPostmasterShouldAddPrefixToSubjectOfSentEmailWhenPrefixIsConfigured() 
throws Exception {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName(MAILET_NAME)
+            .mailetContext(fakeMailContext)
+            .setProperty("prefix", "pre")
+            .build();
+        notifyPostmaster.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+            .name(MAILET_NAME)
+            .sender(MailAddressFixture.ANY_AT_JAMES)
+            .recipient(MailAddressFixture.ANY_AT_JAMES2)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .setSubject("My subject"))
+            .build();
 
         notifyPostmaster.service(mail);
 
-        assertThat(mail.getMessage().getSubject()).isEqualTo("pre My subject");
+        assertThat(fakeMailContext.getSentMails())
+            .first()
+            .extracting(s -> s.getSubject().get())
+            .isEqualTo("pre My subject");
     }
 }
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifySenderTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifySenderTest.java
index 36ad41e..72fedfc 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifySenderTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifySenderTest.java
@@ -150,23 +150,49 @@ public class NotifySenderTest {
     }
 
     @Test
-    void notifySenderShouldAddPrefixToSubjectWhenPrefixIsConfigured() throws 
Exception {
+    void 
notifySenderShouldNotAddPrefixToSubjectOfInFlightMailWhenPrefixIsConfigured() 
throws Exception {
         FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
-                .mailetName(MAILET_NAME)
-                .mailetContext(fakeMailContext)
-                .setProperty("prefix", "pre")
-                .build();
+            .mailetName(MAILET_NAME)
+            .mailetContext(fakeMailContext)
+            .setProperty("prefix", "pre")
+            .build();
         notifySender.init(mailetConfig);
 
         FakeMail mail = FakeMail.builder()
-                .name(MAILET_NAME)
-                .sender(MailAddressFixture.ANY_AT_JAMES)
-                .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
-                    .setSubject("My subject"))
-                .build();
+            .name(MAILET_NAME)
+            .sender(MailAddressFixture.ANY_AT_JAMES)
+            .recipient(MailAddressFixture.ANY_AT_JAMES2)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .setSubject("My subject"))
+            .build();
+
+        notifySender.service(mail);
+
+        assertThat(mail.getMessage().getSubject()).isEqualTo("My subject");
+    }
+
+    @Test
+    void 
notifySenderShouldAddPrefixToSubjectOfSentEmailWhenPrefixIsConfigured() throws 
Exception {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName(MAILET_NAME)
+            .mailetContext(fakeMailContext)
+            .setProperty("prefix", "pre")
+            .build();
+        notifySender.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+            .name(MAILET_NAME)
+            .sender(MailAddressFixture.ANY_AT_JAMES)
+            .recipient(MailAddressFixture.ANY_AT_JAMES2)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .setSubject("My subject"))
+            .build();
 
         notifySender.service(mail);
 
-        assertThat(mail.getMessage().getSubject()).isEqualTo("pre My subject");
+        assertThat(fakeMailContext.getSentMails())
+            .first()
+            .extracting(s -> s.getSubject().get())
+            .isEqualTo("pre My subject");
     }
 }
\ No newline at end of file
diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index 088f1bc..2fefc57 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -27,7 +27,41 @@ Change list:
  - [MailDir removal](#maildir-removal)
  - [Change defaults for JPA UsersRepository hash 
function](#change-defaults-for-jpa-usersrepository-hash-function)
  - [Restrict listening interface to loopback by default for 
webadmin](#restrict-listening-interface-to-loopback-by-default-for-webadmin)
+ - 
  
+### Change in behaviour for Bounce, NotifyPostmaster, NotifySender
+
+Date: 03/02/2022
+
+JIRA: https://issues.apache.org/jira/browse/JAMES-3712
+
+These mailets uses the mail being processed to send a new email to a third 
party.
+
+Prior to this change, the `prefix` property was prepended to the processed 
email and not to the one sent to the third party.
+Ie: the bounce recipient will not have the prefix.
+
+We changed that so that the `prefix` property is prepended to the new email 
and not to the processed one.
+Ie: the bounce recipient will now have the prefix.
+
+Users willing to retain the previous behaviour can do so by removing the 
`prefix` property from their mailet and add a 
+`AddSubjectPrefix` after their mailet. Please note that most user can (and 
likely should) omit those 
+modifications that are only mentioned here for the sake of completeness.
+
+Here is an example of how to retain the strict behaviour applied prior this 
change for `Bounce`:
+
+```
+<!-- what was -->
+<mailet matcher="All" class="Bounce>
+  <prefix>[OUPS] </prefix>
+</mailet>
+
+<!-- can now be written -->
+<mailet matcher="All" class="Bounce/>
+<mailet matcher="All" class="AddSubjectPrefix>
+  <subjectPrefix>[OUPS] </subjectPrefix>
+</mailet>
+```
+
 ### Restrict listening interface to loopback by default for webadmin
 
 Date: 11/01/2022

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

Reply via email to