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:45 UTC
[42/46] james-project git commit: JAMES-1854 Only discard when Sieve
script was executed successfully
JAMES-1854 Only discard when Sieve script was executed successfully
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/92515034
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/92515034
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/92515034
Branch: refs/heads/master
Commit: 925150346eef13b2ca6908fd42201eacbfcfdfff
Parents: 296bb64
Author: Benoit Tellier <bt...@linagora.com>
Authored: Mon Nov 21 10:40:51 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Nov 23 18:19:35 2016 +0700
----------------------------------------------------------------------
.../apache/james/transport/mailets/Sieve.java | 39 +++++++++++---------
.../mailets/jsieve/delivery/SieveExecutor.java | 9 +++--
2 files changed, 28 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/92515034/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Sieve.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Sieve.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Sieve.java
index 92c4bc6..b17eea8 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Sieve.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Sieve.java
@@ -84,29 +84,34 @@ public class Sieve extends GenericMailet {
@Override
public void service(Mail mail) throws MessagingException {
- for(MailAddress recipient: mail.getRecipients()) {
- executeSieveScript(mail, recipient);
- }
- mail.setRecipients(keepNonDiscardedRecipients(mail));
+ List<MailAddress> recipientsWithSuccessfulSieveExecution = executeRetrieveSuccess(mail);
+ mail.setRecipients(keepNonDiscardedRecipients(mail, recipientsWithSuccessfulSieveExecution));
}
- private void executeSieveScript(Mail mail, MailAddress recipient) {
- try {
- sieveExecutor.execute(recipient, mail);
- } catch (Exception e) {
- getMailetContext().getLogger().warn("Failed to execute Sieve script for user " + recipient.asPrettyString(), e);
+ private List<MailAddress> executeRetrieveSuccess(Mail mail) throws MessagingException {
+ ImmutableList.Builder<MailAddress> recipientsWithSuccessfulSieveExecution = ImmutableList.builder();
+ for(MailAddress recipient: mail.getRecipients()) {
+ if (sieveExecutor.execute(recipient, mail)) {
+ recipientsWithSuccessfulSieveExecution.add(recipient);
+ }
}
+ return recipientsWithSuccessfulSieveExecution.build();
}
-
- private ImmutableList<MailAddress> keepNonDiscardedRecipients(Mail mail) {
+ private ImmutableList<MailAddress> keepNonDiscardedRecipients(Mail mail, final List<MailAddress> recipientsWithSuccessfulSieveExecution) {
final List<MailAddress> discardedRecipients = retrieveDiscardedRecipients(mail);
- return FluentIterable.from(mail.getRecipients()).filter(new Predicate<MailAddress>() {
- @Override
- public boolean apply(MailAddress input) {
- return !discardedRecipients.contains(input);
- }
- }).toList();
+ return FluentIterable.from(mail.getRecipients())
+ .filter(discardPredicate(discardedRecipients, recipientsWithSuccessfulSieveExecution))
+ .toList();
+ }
+
+ private Predicate<MailAddress> discardPredicate(final List<MailAddress> discardedAddressList, final List<MailAddress> discardeableAddressList) {
+ return new Predicate<MailAddress>() {
+ @Override
+ public boolean apply(MailAddress input) {
+ return !discardeableAddressList.contains(input) || !discardedAddressList.contains(input);
+ }
+ };
}
private List<MailAddress> retrieveDiscardedRecipients(Mail mail) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/92515034/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
index feb9c37..d33f7d6 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
@@ -110,21 +110,24 @@ public class SieveExecutor {
}
}
- public void execute(MailAddress recipient, Mail mail) throws MessagingException {
+ public boolean execute(MailAddress recipient, Mail mail) throws MessagingException {
Preconditions.checkNotNull(recipient, "Recipient for mail to be spooled cannot be null.");
Preconditions.checkNotNull(mail.getMessage(), "Mail message to be spooled cannot be null.");
- sieveMessage(recipient, mail, log);
+ return sieveMessage(recipient, mail, log);
}
- protected void sieveMessage(MailAddress recipient, Mail aMail, Log log) throws MessagingException {
+ protected boolean sieveMessage(MailAddress recipient, Mail aMail, Log log) throws MessagingException {
try {
ResourceLocator.UserSieveInformation userSieveInformation = resourceLocator.get(recipient);
sieveMessageEvaluate(recipient, aMail, userSieveInformation, log);
+ return true;
} catch (ScriptNotFoundException e) {
log.info("Can not locate SIEVE script for user " + recipient.asPrettyString());
+ return false;
} catch (Exception ex) {
log.error("Cannot evaluate Sieve script for user " + recipient.asPrettyString(), ex);
+ return false;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org