JAMES-2167 MailQueue should preserve null sender
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ec911c13 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ec911c13 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ec911c13 Branch: refs/heads/master Commit: ec911c1317aab016e4eb8bc999572e579590f0fd Parents: 2db93fb Author: Benoit Tellier <[email protected]> Authored: Fri Aug 17 15:52:06 2018 +0700 Committer: Antoine Duprat <[email protected]> Committed: Thu Aug 23 13:59:16 2018 +0200 ---------------------------------------------------------------------- .../java/org/apache/james/core/MailAddress.java | 7 ++++- .../james/queue/api/MailQueueContract.java | 17 +++++++++++ .../apache/james/queue/jms/JMSMailQueue.java | 30 +++++++++++--------- 3 files changed, 39 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/ec911c13/core/src/main/java/org/apache/james/core/MailAddress.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/james/core/MailAddress.java b/core/src/main/java/org/apache/james/core/MailAddress.java index aaf2abb..e53f5bc 100644 --- a/core/src/main/java/org/apache/james/core/MailAddress.java +++ b/core/src/main/java/org/apache/james/core/MailAddress.java @@ -72,6 +72,8 @@ public class MailAddress implements java.io.Serializable { private static final char[] SPECIAL = {'<', '>', '(', ')', '[', ']', '\\', '.', ',', ';', ':', '@', '\"'}; + public static final String NULL_SENDER_AS_STRING = "<>"; + private static final MailAddress NULL_SENDER = new MailAddress() { @Override @@ -91,7 +93,7 @@ public class MailAddress implements java.io.Serializable { @Override public String asString() { - return "<>"; + return NULL_SENDER_AS_STRING; } @Override @@ -356,6 +358,9 @@ public class MailAddress implements java.io.Serializable { return toString().equalsIgnoreCase(theString); } else if (obj instanceof MailAddress) { MailAddress addr = (MailAddress) obj; + if (isNullSender() && addr.isNullSender()) { + return true; + } return getLocalPart().equalsIgnoreCase(addr.getLocalPart()) && getDomain().equals(addr.getDomain()); } return false; http://git-wip-us.apache.org/repos/asf/james-project/blob/ec911c13/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java index 205c58b..377cf3f 100644 --- a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java +++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java @@ -38,10 +38,12 @@ import java.util.concurrent.TimeoutException; import javax.mail.internet.MimeMessage; +import org.apache.james.core.MailAddress; import org.apache.james.core.builder.MimeMessageBuilder; import org.apache.james.junit.ExecutorExtension; import org.apache.mailet.Mail; import org.apache.mailet.PerRecipientHeaders; +import org.apache.mailet.base.test.FakeMail; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -82,6 +84,21 @@ public interface MailQueueContract { } @Test + default void queueShouldPreserveNullSender() throws Exception { + getMailQueue().enQueue(FakeMail.builder() + .name("name") + .mimeMessage(createMimeMessage()) + .recipients(RECIPIENT1, RECIPIENT2) + .sender(MailAddress.nullSender()) + .lastUpdated(new Date()) + .build()); + + MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue(); + assertThat(mailQueueItem.getMail().getSender()) + .isEqualTo(MailAddress.nullSender()); + } + + @Test default void queueShouldPreserveMailSender() throws Exception { getMailQueue().enQueue(defaultMail() .sender(SENDER) http://git-wip-us.apache.org/repos/asf/james-project/blob/ec911c13/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java index f6f9838..a60bde2 100644 --- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java +++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java @@ -412,22 +412,24 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori splitter.split(attributeNames) .forEach(name -> setMailAttribute(message, mail, name)); - String sender = message.getStringProperty(JAMES_MAIL_SENDER); - if (sender == null || sender.trim().length() <= 0) { - mail.setSender(null); - } else { - try { - mail.setSender(new MailAddress(sender)); - } catch (AddressException e) { - // Should never happen as long as the user does not modify the - // the header by himself - LOGGER.error("Unable to parse the sender address {} for mail {}, so we fallback to a null sender", sender, mail.getName(), e); - mail.setSender(null); - } - } - + mail.setSender(getMailSender(message.getStringProperty(JAMES_MAIL_SENDER), mail)); mail.setState(message.getStringProperty(JAMES_MAIL_STATE)); + } + private MailAddress getMailSender(String sender, Mail mail) { + if (sender == null || sender.trim().length() <= 0) { + return null; + } + if (sender.equals(MailAddress.NULL_SENDER_AS_STRING)) { + return MailAddress.nullSender(); + } + try { + return new MailAddress(sender); + } catch (AddressException e) { + // Should never happen as long as the user does not modify the header by himself + LOGGER.error("Unable to parse the sender address {} for mail {}, so we fallback to a null sender", sender, mail.getName(), e); + return MailAddress.nullSender(); + } } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
