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 ro...@apache.org on 2016/11/23 13:50:27 UTC

[24/46] james-project git commit: JAMES-1854 Rework Delivered-to header field customization

JAMES-1854 Rework Delivered-to header field customization


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c85c6a84
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c85c6a84
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c85c6a84

Branch: refs/heads/master
Commit: c85c6a843fdbb3df988bd8a267e47fd76064ad88
Parents: 375ef68
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 27 16:55:16 2016 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Nov 18 18:46:46 2016 +0700

----------------------------------------------------------------------
 .../transport/mailets/delivery/SieveMailet.java | 64 ++++++--------------
 1 file changed, 20 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c85c6a84/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
index 47c325d..89cd500 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
@@ -20,14 +20,12 @@ package org.apache.james.transport.mailets.delivery;
 
 import java.io.IOException;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
-import java.util.Enumeration;
-import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
-import javax.mail.Header;
 import javax.mail.MessagingException;
-import javax.mail.internet.InternetHeaders;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
@@ -194,16 +192,17 @@ public class SieveMailet  extends GenericMailet implements Poster {
         }
 
         sieveMessage(recipient, mail);
-        String s;
-        if (sender != null) {
-            s = sender.toString();
+        // If no exception was thrown the message was successfully stored in the mailbox
+        log.info("Local delivered mail " + mail.getName() + " sucessfully from " + prettyPrint(sender) + " to " + prettyPrint(recipient)
+                + " in folder " + this.folder);
+    }
+
+    private String prettyPrint(MailAddress mailAddress) {
+        if (mailAddress != null) {
+            return  "<" + mailAddress.toString() + ">";
         } else {
-            s = "<>";
+            return  "<>";
         }
-        // If no exception was thrown the message was successfully stored in the
-        // mailbox
-        log.info("Local delivered mail " + mail.getName() + " sucessfully from " + s + " to " + recipient.toString()
-                + " in folder " + this.folder);
     }
 
     @Override
@@ -334,47 +333,25 @@ public class SieveMailet  extends GenericMailet implements Poster {
         // message
         // This only works because there is a placeholder inserted by
         // MimeMessageWrapper
-        message.setHeader(RFC2822Headers.RETURN_PATH,
-            (mail.getSender() == null ? "<>" : "<" + mail.getSender()
-                + ">"));
-
-        Enumeration headers;
-        InternetHeaders deliveredTo = new InternetHeaders();
-
-        // Copy any Delivered-To headers from the message
-        headers = message
-            .getMatchingHeaders(new String[] { DELIVERED_TO });
-        while (headers.hasMoreElements()) {
-            Header header = (Header) headers.nextElement();
-            deliveredTo.addHeader(header.getName(), header.getValue());
-        }
+        message.setHeader(RFC2822Headers.RETURN_PATH, prettyPrint(mail.getSender()));
 
+        List<String> deliveredToHeader = Collections.list(message.getMatchingHeaders(new String[] { DELIVERED_TO }));
+        message.removeHeader(DELIVERED_TO);
 
-        for (Iterator<MailAddress> i = recipients.iterator(); i.hasNext();) {
-            MailAddress recipient = i.next();
+        for (MailAddress recipient : recipients) {
             try {
                 // Add qmail's de facto standard Delivered-To header
                 message.addHeader(DELIVERED_TO, recipient.toString());
-
                 storeMail(mail.getSender(), recipient, mail);
-
-                if (i.hasNext()) {
-                    // Remove headers but leave all placeholders
-                    message.removeHeader(DELIVERED_TO);
-                    headers = deliveredTo.getAllHeaders();
-                    // And restore any original Delivered-To headers
-                    while (headers.hasMoreElements()) {
-                        Header header = (Header) headers.nextElement();
-                        message.addHeader(header.getName(), header
-                            .getValue());
-                    }
-                }
+                message.removeHeader(DELIVERED_TO);
             } catch (Exception ex) {
                 log.error("Error while storing mail.", ex);
                 errors.add(recipient);
             }
         }
-
+        for (String deliveredTo : deliveredToHeader) {
+            message.addHeader(DELIVERED_TO, deliveredTo);
+        }
         if (!errors.isEmpty()) {
             // If there were errors, we redirect the email to the ERROR
             // processor.
@@ -383,8 +360,7 @@ public class SieveMailet  extends GenericMailet implements Poster {
             // the sender. Note that this email doesn't include any details
             // regarding the details of the failure(s).
             // In the future we may wish to address this.
-            getMailetContext().sendMail(mail.getSender(), errors,
-                mail.getMessage(), Mail.ERROR);
+            getMailetContext().sendMail(mail.getSender(), errors, mail.getMessage(), Mail.ERROR);
         }
         if (consume) {
             // Consume this message


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org