You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2020/12/21 07:29:36 UTC

[james-project] 11/17: JAMES-3431 DSNBounce: Add the original subject as part of human readable message

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 1c5597d87ade7bd2787525308dc1cea917e7446d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Dec 17 09:51:45 2020 +0700

    JAMES-3431 DSNBounce: Add the original subject as part of human readable message
    
    This will help the received to correlate the DSN message with the mail he sent.
---
 .../apache/james/transport/mailets/DSNBounce.java  |  2 ++
 .../james/transport/mailets/DSNBounceTest.java     | 42 ++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
index 081caa3..11be842 100755
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
@@ -412,6 +412,8 @@ public class DSNBounce extends GenericMailet implements RedirectNotify {
         StringBuilder builder = new StringBuilder();
 
         builder.append(bounceMessage()).append(LINE_BREAK);
+        Optional.ofNullable(originalMail.getMessage().getSubject())
+            .ifPresent(subject -> builder.append("Original email subject: ").append(subject).append(LINE_BREAK).append(LINE_BREAK));
         builder.append(action.asString()).append(" recipient(s):").append(LINE_BREAK);
         builder.append(originalMail.getRecipients()
                 .stream()
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
index f3e31d8..e05a81f 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
@@ -648,6 +648,48 @@ public class DSNBounceTest {
         }
 
         @Test
+        void originalSubjectShouldBeCarriedOver() throws Exception {
+            FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName(MAILET_NAME)
+                .mailetContext(fakeMailContext)
+                .build();
+            dsnBounce.init(mailetConfig);
+
+            MailAddress senderMailAddress = new MailAddress("sender@domain.com");
+            FakeMail mail = FakeMail.builder()
+                .name(MAILET_NAME)
+                .sender(senderMailAddress)
+                .attribute(DELIVERY_ERROR_ATTRIBUTE)
+                .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                    .setSubject("Banana power!")
+                    .setText("My content"))
+                .recipient("recipient@domain.com")
+                .lastUpdated(Date.from(Instant.parse("2016-09-08T14:25:52.000Z")))
+                .build();
+
+            dsnBounce.service(mail);
+
+            String hostname = InetAddress.getLocalHost().getHostName();
+            String expectedContent = "Hi. This is the James mail server at " + hostname + ".\nI'm afraid I wasn't able to deliver your message to the following addresses.\nThis is a permanent error; I've given up. Sorry it didn't work out.  Below\nI include the list of recipients and the reason why I was unable to deliver\nyour message.\n\n" +
+                "Original email subject: Banana power!\n\n" +
+                "Failed recipient(s):\n" +
+                "recipient@domain.com\n" +
+                "\n" +
+                "Error message:\n" +
+                "Delivery error\n" +
+                "\n";
+
+            List<SentMail> sentMails = fakeMailContext.getSentMails();
+            assertThat(sentMails).hasSize(1);
+            SentMail sentMail = sentMails.get(0);
+            MimeMessage sentMessage = sentMail.getMsg();
+            MimeMultipart content = (MimeMultipart) sentMessage.getContent();
+            BodyPart bodyPart = content.getBodyPart(0);
+            assertThat(bodyPart.getContentType()).isEqualTo("text/plain; charset=us-ascii");
+            assertThat(bodyPart.getContent()).isEqualTo(expectedContent);
+        }
+
+        @Test
         void serviceShouldSendMultipartMailContainingTextPartWhenCustomMessageIsConfigured() throws Exception {
             FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
                 .mailetName(MAILET_NAME)


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