JAMES-2557 Improve JamesMailContext code quality - rawBounce should enforce sender presence - rawBounce can rely more on MaybeSender
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/48540625 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/48540625 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/48540625 Branch: refs/heads/master Commit: 485406252d82c2d23a4078c76b26d6fc8973bbd7 Parents: 4d2f085 Author: Benoit Tellier <[email protected]> Authored: Fri Oct 26 12:50:58 2018 +0700 Committer: Benoit Tellier <[email protected]> Committed: Tue Oct 30 09:39:30 2018 +0700 ---------------------------------------------------------------------- .../impl/JamesMailetContext.java | 16 +++++-------- .../impl/JamesMailetContextTest.java | 24 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/48540625/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java index 879d46f..9e575cd 100644 --- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java +++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java @@ -62,7 +62,7 @@ import org.apache.mailet.base.RFC2822Headers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.github.fge.lambdas.Throwing; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; public class JamesMailetContext implements MailetContext, Configurable { @@ -211,24 +211,20 @@ public class JamesMailetContext implements MailetContext, Configurable { * @throws MessagingException if the bounce mail could not be created */ private MailImpl rawBounce(Mail mail, String bounceText) throws MessagingException { - // This sends a message to the james component that is a bounce of the - // sent message + Preconditions.checkArgument(mail.hasSender(), "Mail should have a sender"); + // This sends a message to the james component that is a bounce of the sent message MimeMessage original = mail.getMessage(); MimeMessage reply = (MimeMessage) original.reply(false); reply.setSubject("Re: " + original.getSubject()); reply.setSentDate(new Date()); Collection<MailAddress> recipients = mail.getMaybeSender().asList(); - InternetAddress[] addr = mail.getMaybeSender().asOptional() - .map(MailAddress::asString) - .map(Throwing.function((String s) -> new InternetAddress(s)).sneakyThrow()) - .map(address -> new InternetAddress[]{address}) - .orElse(new InternetAddress[0]); + MailAddress sender = mail.getMaybeSender().get(); - reply.setRecipients(Message.RecipientType.TO, addr); + reply.setRecipient(Message.RecipientType.TO, new InternetAddress(mail.getMaybeSender().asString())); reply.setFrom(new InternetAddress(mail.getRecipients().iterator().next().toString())); reply.setText(bounceText); reply.setHeader(RFC2822Headers.MESSAGE_ID, "replyTo-" + mail.getName()); - return new MailImpl("replyTo-" + mail.getName(), new MailAddress(mail.getRecipients().iterator().next().toString()), recipients, reply); + return new MailImpl("replyTo-" + mail.getName(), sender, recipients, reply); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/48540625/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java index 676a756..f24a5d1 100644 --- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java +++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java @@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import java.util.concurrent.TimeUnit; @@ -180,6 +181,29 @@ public class JamesMailetContextTest { } @Test + public void bouncingToNullSenderShouldBeANoop() throws Exception { + MailImpl mail = new MailImpl(); + mail.setSender(MailAddress.nullSender()); + mail.setRecipients(ImmutableList.of(mailAddress)); + mail.setMessage(MimeMessageUtil.defaultMimeMessage()); + + testee.bounce(mail, "message"); + + verifyZeroInteractions(spoolMailQueue); + } + + @Test + public void bouncingToNoSenderShouldBeANoop() throws Exception { + MailImpl mail = new MailImpl(); + mail.setRecipients(ImmutableList.of(mailAddress)); + mail.setMessage(MimeMessageUtil.defaultMimeMessage()); + + testee.bounce(mail, "message"); + + verifyZeroInteractions(spoolMailQueue); + } + + @Test public void bounceShouldEnqueueEmailWithRootState() throws Exception { MailImpl mail = new MailImpl(); mail.setSender(mailAddress); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
