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