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 c17b2ad4fef46600601878d5ed7866c674872616
Author: splainez <[email protected]>
AuthorDate: Thu Sep 5 22:53:35 2019 +0200

    JAMES-2375 DSNBounce mailet do not provide a subject
    
    Subject empty fixed, Sender empty when you do not provide sender
    property fixed too
---
 .../apache/james/transport/mailets/DSNBounce.java  |   7 +-
 .../mailets/redirect/AddressExtractor.java         |   2 +-
 .../apache/james/transport/util/SenderUtils.java   |   2 +-
 .../james/transport/mailets/DSNBounceTest.java     | 119 ++++++++++++++++++++-
 4 files changed, 123 insertions(+), 7 deletions(-)

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 8901085..b916db0 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
@@ -219,8 +219,9 @@ public class DSNBounce extends GenericMailet implements 
RedirectNotify {
 
     @Override
     public Optional<MailAddress> getSender() throws MessagingException {
-        return SpecialAddressesUtils.from(this)
-                
.getFirstSpecialAddressIfMatchingOrGivenAddress(getInitParameters().getSender(),
 RedirectNotify.SENDER_ALLOWED_SPECIALS);
+        return 
SpecialAddressesUtils.from(this).getFirstSpecialAddressIfMatchingOrGivenAddress(
+                
Optional.of(getInitParameters().getSender().orElse("postmaster")),
+                RedirectNotify.SENDER_ALLOWED_SPECIALS);
     }
 
     @Override
@@ -453,6 +454,6 @@ public class DSNBounce 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/redirect/AddressExtractor.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/AddressExtractor.java
index 0b4f871..e0ded93 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/AddressExtractor.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/AddressExtractor.java
@@ -108,7 +108,7 @@ public class AddressExtractor {
             }
             return new MailAddress(address);
         } catch (Exception e) {
-            throw new MessagingException("Exception thrown parsing: " + 
address.getAddress());
+            throw new MessagingException("Exception thrown parsing: " + 
address.getAddress(), e);
         }
     }
 
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SenderUtils.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SenderUtils.java
index 6035b7b..424b52b 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SenderUtils.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/SenderUtils.java
@@ -41,7 +41,7 @@ public class SenderUtils {
     public Optional<MailAddress> getSender(Mail originalMail) throws 
MessagingException {
         if (sender.isPresent()) {
             if (isUnalteredOrSender(sender.get())) {
-                return Optional.empty();
+                return originalMail.getMaybeSender().asOptional();
             }
         }
         return sender;
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 852d73d..e3dcd68 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
@@ -67,12 +67,15 @@ public class DSNBounceTest {
 
     private DSNBounce dsnBounce;
     private FakeMailContext fakeMailContext;
+    private MailAddress postmaster;
 
     @Before
     public void setUp() throws Exception {
+        postmaster = new MailAddress("[email protected]");
+        
         DNSService dnsService = mock(DNSService.class);
         dsnBounce = new DSNBounce(dnsService, 
DateFormats.getRFC822FormatForTimeZone(TimeZone.getTimeZone("UTC")));
-        fakeMailContext = FakeMailContext.defaultContext();
+        fakeMailContext = 
FakeMailContext.builder().postmaster(postmaster).build();
 
         InetAddress localHost = InetAddress.getLocalHost();
         when(dnsService.getLocalHost())
@@ -524,6 +527,118 @@ public class DSNBounceTest {
 
         dsnBounce.service(mail);
 
-        assertThat(mail.getMessage().getSubject()).isEqualTo("pre My subject");
+        assertThat(fakeMailContext.getSentMails()).hasSize(1).allSatisfy(
+                sentMail -> assertThat(sentMail.getSubject()).contains("pre My 
subject"));
+    }
+
+    @Test
+    public void dsnBounceShouldAllowSenderSpecialPostmaster() throws Exception 
{
+        
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName(MAILET_NAME)
+                .mailetContext(fakeMailContext)
+                .setProperty("sender", "postmaster")
+                .build();
+        dsnBounce.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+                .name(MAILET_NAME)
+                .sender(MailAddressFixture.ANY_AT_JAMES)
+                .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                    .setSubject("My subject"))
+                .build();
+
+        dsnBounce.service(mail);
+
+        List<SentMail> sentMails = fakeMailContext.getSentMails();
+        assertThat(sentMails).hasSize(1);
+        SentMail sentMail = sentMails.get(0);
+
+        assertThat(sentMail.getMsg().getFrom())
+                
.containsOnly(fakeMailContext.getPostmaster().toInternetAddress());
+        assertThat(sentMail.getRecipients()).containsOnly(mail.getSender());
+    }
+
+    @Test
+    public void dsnBounceShouldAllowSenderSpecialSender() throws Exception {
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName(MAILET_NAME)
+                .mailetContext(fakeMailContext)
+                .setProperty("sender", "sender")
+                .setProperty("prefix", "pre")
+                .build();
+        dsnBounce.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+                .name(MAILET_NAME)
+                .sender(MailAddressFixture.ANY_AT_JAMES)
+                .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                        .setSubject("My subject"))
+                .build();
+
+        dsnBounce.service(mail);
+
+        List<SentMail> sentMails = fakeMailContext.getSentMails();
+        assertThat(sentMails).hasSize(1);
+        SentMail sentMail = sentMails.get(0);
+
+        
assertThat(sentMail.getMsg().getFrom()).containsOnly(mail.getSender().toInternetAddress());
+        assertThat(sentMail.getRecipients()).containsOnly(mail.getSender());
+    }
+
+    @Test
+    public void dsnBounceShouldAllowSenderSpecialUnaltered() throws Exception {
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName(MAILET_NAME)
+                .mailetContext(fakeMailContext)
+                .setProperty("sender", "unaltered")
+                .build();
+        dsnBounce.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+                .name(MAILET_NAME)
+                .sender(MailAddressFixture.ANY_AT_JAMES)
+                .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                        .setSubject("My subject"))
+                .build();
+
+        dsnBounce.service(mail);
+
+        List<SentMail> sentMails = fakeMailContext.getSentMails();
+        assertThat(sentMails).hasSize(1);
+        SentMail sentMail = sentMails.get(0);
+
+        
assertThat(sentMail.getMsg().getFrom()).containsOnly(mail.getSender().toInternetAddress());
+        assertThat(sentMail.getRecipients()).containsOnly(mail.getSender());
+    }
+
+    @Test
+    public void dsnBounceShouldAllowSenderSpecialAddress() throws Exception {
+
+        MailAddress bounceSender = new MailAddress("[email protected]");
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName(MAILET_NAME)
+                .mailetContext(fakeMailContext)
+                .setProperty("sender", bounceSender.asPrettyString())
+                .build();
+        dsnBounce.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+                .name(MAILET_NAME)
+                .sender(MailAddressFixture.ANY_AT_JAMES)
+                .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                        .setSubject("My subject"))
+                .build();
+
+        dsnBounce.service(mail);
+
+        List<SentMail> sentMails = fakeMailContext.getSentMails();
+        assertThat(sentMails).hasSize(1);
+        SentMail sentMail = sentMails.get(0);
+
+        
assertThat(sentMail.getMsg().getFrom()).containsOnly(bounceSender.toInternetAddress());
+        assertThat(sentMail.getRecipients()).containsOnly(mail.getSender());
     }
 }
\ No newline at end of file


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

Reply via email to