JAMES-2557 Sieve connector should allow to post raw emails

This allow:
 - Using the more explicit MailImpl builder
 - Handling null sender by default


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

Branch: refs/heads/master
Commit: aaf176780e6b5177acf214ee010ae96820eef1c1
Parents: 8ce3514
Author: Benoit Tellier <[email protected]>
Authored: Fri Oct 19 11:04:00 2018 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Tue Oct 30 09:39:08 2018 +0700

----------------------------------------------------------------------
 .../transport/mailets/jsieve/ActionContext.java |  6 +-----
 .../mailets/jsieve/RedirectAction.java          | 15 +++++++------
 .../transport/mailets/jsieve/RejectAction.java  | 22 ++++++++++++--------
 .../mailets/jsieve/SieveMailAdapter.java        |  5 ++---
 .../mailets/jsieve/VacationAction.java          |  8 ++++++-
 5 files changed, 30 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
index 062772e..b85ada7 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
@@ -19,10 +19,8 @@
 package org.apache.james.transport.mailets.jsieve;
 
 import java.time.ZonedDateTime;
-import java.util.Collection;
 
 import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
 
 import org.apache.james.core.MailAddress;
 import org.apache.mailet.Mail;
@@ -60,12 +58,10 @@ public interface ActionContext {
 
     /**
      * Posts the given mail.
-     * @param sender possibly null
-     * @param recipients not null
      * @param mail not null
      * @throws MessagingException when mail cannot be posted
      */
-    public void post(MailAddress sender, Collection<MailAddress> recipients, 
MimeMessage mail) throws MessagingException;
+    public void post(Mail mail) throws MessagingException;
 
     /**
      * Gets name (including version) of this server.

http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
index 378a77e..1df00ca 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
@@ -18,13 +18,10 @@
  ****************************************************************/
 package org.apache.james.transport.mailets.jsieve;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
 import javax.mail.MessagingException;
-import javax.mail.internet.InternetAddress;
 
 import org.apache.james.core.MailAddress;
+import org.apache.james.server.core.MailImpl;
 import org.apache.jsieve.mail.Action;
 import org.apache.jsieve.mail.ActionRedirect;
 import org.apache.mailet.Mail;
@@ -60,10 +57,12 @@ public class RedirectAction implements MailAction {
     public void execute(ActionRedirect anAction, Mail aMail, ActionContext 
context) throws MessagingException {
         ActionUtils.detectAndHandleLocalLooping(aMail, context, "redirect");
 
-        Collection<MailAddress> recipients = new ArrayList<>(1);
-        recipients.add(new MailAddress(new 
InternetAddress(anAction.getAddress())));
-        MailAddress sender = aMail.getSender();
-        context.post(sender, recipients, aMail.getMessage());
+        context.post(MailImpl.builder()
+            .sender(aMail.getMaybeSender())
+            .recipient(new MailAddress(anAction.getAddress()))
+            .mimeMessage(aMail.getMessage())
+            .build());
+
         LOGGER.debug("Redirected Message ID: {} to \"{}\"", 
aMail.getMessage().getMessageID(), anAction.getAddress());
         DiscardAction.removeRecipient(aMail, context);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
index ce5c9d5..2e99e3c 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
@@ -20,8 +20,7 @@ package org.apache.james.transport.mailets.jsieve;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Arrays;
 
 import javax.mail.Address;
 import javax.mail.MessagingException;
@@ -38,12 +37,16 @@ import org.apache.james.mdn.fields.ReportingUserAgent;
 import org.apache.james.mdn.modifier.DispositionModifier;
 import org.apache.james.mdn.sending.mode.DispositionSendingMode;
 import org.apache.james.mdn.type.DispositionType;
+import org.apache.james.server.core.MailImpl;
 import org.apache.jsieve.mail.Action;
 import org.apache.jsieve.mail.ActionReject;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableList;
+
 /**
  * Performs the rejection of a mail, with a reply to the sender. 
  * <h4>Thread Safety</h4>
@@ -133,13 +136,14 @@ public class RejectAction implements MailAction {
         reply.setContent(multipart);
         reply.saveChanges();
         Address[] recipientAddresses = reply.getAllRecipients();
-        if (null != recipientAddresses) {
-            Collection<MailAddress> recipients = new 
ArrayList<>(recipientAddresses.length);
-            for (Address recipientAddress : recipientAddresses) {
-                recipients.add(new MailAddress(
-                        (InternetAddress) recipientAddress));
-            }
-            context.post(null, recipients, reply);
+        if (recipientAddresses != null) {
+            context.post(MailImpl.builder()
+                .recipients(Arrays.stream(recipientAddresses)
+                    .map(address -> (InternetAddress) address)
+                    .map(Throwing.function(MailAddress::new))
+                    .collect(ImmutableList.toImmutableList()))
+                .mimeMessage(reply)
+                .build());
         } else {
             LOGGER.info("Unable to send reject MDN. Could not determine the 
recipient.");
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
index fa6d851..0eafe2e 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
@@ -21,7 +21,6 @@ package org.apache.james.transport.mailets.jsieve;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -373,8 +372,8 @@ public class SieveMailAdapter implements MailAdapter, 
EnvelopeAccessors, ActionC
     }
     
     @Override
-    public void post(MailAddress sender, Collection<MailAddress> recipients, 
MimeMessage mail) throws MessagingException {
-        getMailetContext().sendMail(sender, recipients, mail);
+    public void post(Mail mail) throws MessagingException {
+        getMailetContext().sendMail(mail);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/aaf17678/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
index b3847b9..80b772d 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
@@ -27,6 +27,7 @@ import javax.mail.MessagingException;
 import javax.mail.internet.AddressException;
 
 import org.apache.james.core.MailAddress;
+import org.apache.james.server.core.MailImpl;
 import org.apache.jsieve.mail.Action;
 import org.apache.jsieve.mail.optional.ActionVacation;
 import org.apache.mailet.Mail;
@@ -64,7 +65,12 @@ public class VacationAction implements MailAction {
             .reason(actionVacation.getReason())
             .subject(actionVacation.getSubject())
             .build();
-        context.post(vacationReply.getSender(), vacationReply.getRecipients(), 
vacationReply.getMimeMessage());
+
+        context.post(MailImpl.builder()
+            .sender(vacationReply.getSender())
+            .recipients(vacationReply.getRecipients())
+            .mimeMessage(vacationReply.getMimeMessage())
+            .build());
     }
 
     private boolean isStillInVacation(ActionVacation actionVacation, int 
dayDifference) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to