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 2022/09/23 01:45:07 UTC
[james-project] 03/05: JAMES-343 Mail: Fix resetting DSN parameters
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch 3.7.x
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit a29d2db2436dbf3a80c52a20cd9a8158670c811e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Jun 2 10:34:08 2022 +0700
JAMES-343 Mail: Fix resetting DSN parameters
Updating from DSN_PARAMETERS_1 to DSN_PARAMETERS_2 where
DSN_PARAMETERS_2 misses some parameters present in
DSN_PARAMETERS_1 causes those parameters to still be present
in DSN_PARAMETERS_2.
(cherry picked from commit 6003ecb236b4a2cab38ba73056e9babbaac15fc7)
---
.../main/java/org/apache/mailet/DsnParameters.java | 8 +++++++
.../api/src/main/java/org/apache/mailet/Mail.java | 1 +
.../org/apache/james/server/core/MailImplTest.java | 25 ++++++++++++++++++++++
3 files changed, 34 insertions(+)
diff --git a/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java b/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
index a426dceb01..9919da4dea 100644
--- a/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
+++ b/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.function.Consumer;
import javax.mail.internet.AddressException;
@@ -388,6 +389,13 @@ public class DsnParameters {
return new DsnAttributeValues(notify, orcpt, envId, ret);
}
+ public static void forEachDsnAttributeName(Consumer<AttributeName> action) {
+ action.accept(ENVID_ATTRIBUTE_NAME);
+ action.accept(RET_ATTRIBUTE_NAME);
+ action.accept(NOTIFY_ATTRIBUTE_NAME);
+ action.accept(ORCPT_ATTRIBUTE_NAME);
+ }
+
private final Optional<AttributeValue<Map<String, AttributeValue<String>>>> notifyAttributeValue;
private final Optional<AttributeValue<Map<String, AttributeValue<String>>>> orcptAttributeValue;
private final Optional<AttributeValue<String>> envIdAttributeValue;
diff --git a/mailet/api/src/main/java/org/apache/mailet/Mail.java b/mailet/api/src/main/java/org/apache/mailet/Mail.java
index fe7ca1ab6d..5d918ffb3f 100644
--- a/mailet/api/src/main/java/org/apache/mailet/Mail.java
+++ b/mailet/api/src/main/java/org/apache/mailet/Mail.java
@@ -444,6 +444,7 @@ public interface Mail extends Serializable, Cloneable {
}
default void setDsnParameters(DsnParameters dsnParameters) {
+ DsnParameters.DsnAttributeValues.forEachDsnAttributeName(this::removeAttribute);
dsnParameters.toAttributes()
.asAttributes()
.forEach(this::setAttribute);
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
index 390879be9c..cca06ce2f0 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
@@ -404,6 +404,31 @@ public class MailImplTest extends ContractMailTest {
.contains(dsnParameters);
}
+ @Test
+ void setDsnParametersShouldUpdateStoredValue() throws Exception {
+ DsnParameters dsnParameters1 = DsnParameters.builder()
+ .envId(DsnParameters.EnvId.of("434554-55445-33443"))
+ .ret(DsnParameters.Ret.FULL)
+ .addRcptParameter(new MailAddress("bob@apache.org"), DsnParameters.RecipientDsnParameters.of(new MailAddress("andy@apache.org")))
+ .addRcptParameter(new MailAddress("cedric@apache.org"), DsnParameters.RecipientDsnParameters.of(EnumSet.of(DsnParameters.Notify.SUCCESS)))
+ .addRcptParameter(new MailAddress("domi@apache.org"), DsnParameters.RecipientDsnParameters.of(EnumSet.of(DsnParameters.Notify.FAILURE), new MailAddress("eric@apache.org")))
+ .build().get();
+ DsnParameters dsnParameters2 = DsnParameters.builder()
+ .envId(DsnParameters.EnvId.of("434554-55445-33434ee4"))
+ .addRcptParameter(new MailAddress("domi@apache.org"), DsnParameters.RecipientDsnParameters.of(EnumSet.of(DsnParameters.Notify.FAILURE), new MailAddress("eric@apache.org")))
+ .build().get();
+
+ MailImpl mail = MailImpl.builder()
+ .name("mail-id")
+ .build();
+
+ mail.setDsnParameters(dsnParameters1);
+ mail.setDsnParameters(dsnParameters2);
+
+ assertThat(mail.dsnParameters())
+ .contains(dsnParameters2);
+ }
+
@Test
void dsnParametersShouldBeEmptyByDefault() {
MailImpl mail = MailImpl.builder()
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org