You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2018/08/23 12:12:47 UTC

[2/4] james-project git commit: JAMES-2167 MailQueue should preserve null sender

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 <bt...@linagora.com>
Authored: Fri Aug 17 15:52:06 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org