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]
