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]
