You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/06/14 01:48:40 UTC

[james-project] 02/07: JAMES-3914 Sieve Vacation: support several recipients

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 277d3cd236b14ddd7205513678d8812ea3a0184b
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jun 12 15:08:31 2023 +0700

    JAMES-3914 Sieve Vacation: support several recipients
---
 .../transport/mailets/jsieve/ActionUtils.java      |  5 ++---
 .../transport/mailets/jsieve/RedirectAction.java   |  2 +-
 .../transport/mailets/jsieve/RejectAction.java     |  2 +-
 .../transport/mailets/jsieve/VacationReply.java    |  2 +-
 .../mailets/delivery/SieveIntegrationTest.java     | 22 ++++++++++++++++++++++
 5 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionUtils.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionUtils.java
index c013e92906..94884c1261 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionUtils.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionUtils.java
@@ -59,9 +59,8 @@ public class ActionUtils {
      * Detect and handle locally looping mail. External loop detection is left
      * to the MTA.
      */
-    public static void detectAndHandleLocalLooping(Mail aMail, String anAttributeSuffix)
-            throws MessagingException {
-        MailAddress thisRecipient = getSoleRecipient(aMail);
+    public static void detectAndHandleLocalLooping(Mail aMail, ActionContext context, String anAttributeSuffix) {
+        MailAddress thisRecipient = context.getRecipient();
         AttributeName attributeName = AttributeName.of(ATTRIBUTE_PREFIX + anAttributeSuffix);
         AttributeUtils
             .getValueAndCastFromMail(aMail, attributeName, String.class)
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 83773d236f..ec9c6d4de1 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
@@ -56,7 +56,7 @@ public class RedirectAction implements MailAction {
      * @throws MessagingException
      */
     public void execute(ActionRedirect anAction, Mail aMail, ActionContext context) throws MessagingException {
-        ActionUtils.detectAndHandleLocalLooping(aMail, "redirect");
+        ActionUtils.detectAndHandleLocalLooping(aMail, context, "redirect");
 
         MailImpl redirectedMail = MailImpl.builder()
             .name("redirect-" + aMail.getName())
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 a35ebc6270..b9a81a57f2 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
@@ -81,7 +81,7 @@ public class RejectAction implements MailAction {
      * @throws MessagingException
      */
     public void execute(ActionReject anAction, Mail aMail, ActionContext context) throws MessagingException {
-        ActionUtils.detectAndHandleLocalLooping(aMail, "reject");
+        ActionUtils.detectAndHandleLocalLooping(aMail, context, "reject");
 
         // Create the MDN part
         StringBuilder humanText = new StringBuilder(128);
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
index 5caf2f40bd..8845fdc1cf 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
@@ -81,7 +81,7 @@ public class VacationReply {
 
         public VacationReply build() throws MessagingException {
             Preconditions.checkState(eitherReasonOrMime());
-            ActionUtils.detectAndHandleLocalLooping(originalMail, "vacation");
+            ActionUtils.detectAndHandleLocalLooping(originalMail,  context, "vacation");
 
             MimeMessage reply = (MimeMessage) originalMail.getMessage().reply(false);
             reply.setSubject(generateNotificationSubject());
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
index 742326c134..60dfd59057 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -182,6 +182,8 @@ class SieveIntegrationTest {
         assertThatAttribute(mail.getAttribute(ATTRIBUTE_NAME)).isEqualTo(ATTRIBUTE_INBOX_ANY);
     }
 
+
+    // ANCHOR
     @Test
     void shouldSupportSeveralRecipientsWhenFileInto() throws Exception {
         prepareTestUsingScript("org/apache/james/transport/mailets/delivery/fileinto.script");
@@ -872,6 +874,26 @@ class SieveIntegrationTest {
         assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail);
     }
 
+    @Test
+    void vacationShouldWorkWhenSeveralRecipients() throws Exception {
+        prepareTestUsingScript("org/apache/james/transport/mailets/delivery/vacationReason.script");
+        when(usersRepository.getUsername(new MailAddress("other@domain.tld"))).thenReturn(Username.of("other@domain.tld"));
+        when(resourceLocator.get(new MailAddress("other@domain.tld"))).thenThrow(new ScriptNotFoundException());
+
+        FakeMail mail = createMail();
+        mail.setRecipients(ImmutableList.of(new MailAddress(RECEIVER_DOMAIN_COM), new MailAddress("other@domain.tld")));
+        testee.service(mail);
+
+        assertThatAttribute(mail.getAttribute(ATTRIBUTE_NAME)).isEqualTo(ATTRIBUTE_INBOX);
+
+        FakeMailContext.SentMail expectedSentMail = FakeMailContext.sentMailBuilder()
+            .sender(new MailAddress(RECEIVER_DOMAIN_COM))
+            .recipient(new MailAddress("sender@any.com"))
+            .fromMailet()
+            .build();
+        assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail);
+    }
+
     @Test
     void vacationShouldNotSendNotificationToMailingLists() throws Exception {
         prepareTestUsingScript("org/apache/james/transport/mailets/delivery/vacationReason.script");


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