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 bt...@apache.org on 2017/08/29 01:13:18 UTC

[2/4] james-project git commit: JAMES-2065 add MailetAttributeListToMimeHeaders

JAMES-2065 add MailetAttributeListToMimeHeaders


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e9f8a931
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e9f8a931
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e9f8a931

Branch: refs/heads/master
Commit: e9f8a93171ff89fd469e39bc2e13be670daa4fea
Parents: d5bddef
Author: Luc DUZAN <ld...@linagora.com>
Authored: Thu Jun 22 18:27:15 2017 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Aug 29 08:12:04 2017 +0700

----------------------------------------------------------------------
 mailet/standard/pom.xml                         |   4 +
 .../MailAttributesListToMimeHeaders.java        | 110 ++++++++
 .../mailets/MailAttributesToMimeHeaders.java    |  11 +-
 .../MailAttributesListToMimeHeadersTest.java    | 282 +++++++++++++++++++
 .../MailAttributesToMimeHeadersTest.java        |  62 +++-
 5 files changed, 462 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e9f8a931/mailet/standard/pom.xml
----------------------------------------------------------------------
diff --git a/mailet/standard/pom.xml b/mailet/standard/pom.xml
index 5f1a588..9ebfd19 100644
--- a/mailet/standard/pom.xml
+++ b/mailet/standard/pom.xml
@@ -53,6 +53,10 @@
             <version>${apache-mime4j.version}</version>
         </dependency>
         <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-util-java8</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/e9f8a931/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeaders.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeaders.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeaders.java
new file mode 100644
index 0000000..e42deb6
--- /dev/null
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeaders.java
@@ -0,0 +1,110 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.transport.mailets;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.util.OptionalConverter;
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.GenericMailet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+
+/**
+ * <p>Convert attributes of type Collection&lt;String&gt; to headers</p>
+ *
+ * <p>Sample configuration:</p>
+ * <pre><code>
+ * &lt;mailet match="All" class="MailAttributesToMimeHeaders"&gt;
+ * &lt;simplemapping&gt;org.apache.james.attribute1;
+ * headerName1&lt;/simplemapping&gt;
+ * &lt;simplemapping&gt;org.apache.james.attribute2;
+ * headerName2&lt;/simplemapping&gt; &lt;/mailet&gt;
+ * </code></pre>
+ */
+public class MailAttributesListToMimeHeaders extends GenericMailet {
+    private static final Logger LOGGER = LoggerFactory.getLogger(MailAttributesListToMimeHeaders.class);
+
+    private Map<String, String> attributeNameToHeader;
+
+    @Override
+    public void init() throws MessagingException {
+        String simpleMappings = getInitParameter("simplemapping");
+        if (Strings.isNullOrEmpty(simpleMappings)) {
+            throw new MessagingException("simplemapping is required");
+        }
+
+        attributeNameToHeader = MappingArgument.parse(simpleMappings);
+    }
+
+    @Override
+    public void service(Mail mail) {
+        try {
+            MimeMessage message = mail.getMessage();
+            attributeNameToHeader.entrySet()
+                .forEach(entry -> addAttributeToHeader(mail, message, entry));
+            message.saveChanges();
+        } catch (MessagingException e) {
+            LOGGER.warn("Exception while adding headers", e);
+        }
+    }
+
+    private void addAttributeToHeader(Mail mail, MimeMessage message, Entry<String, String> entry) {
+        Serializable attribute = mail.getAttribute(entry.getKey());
+        if (attribute instanceof Collection) {
+            Optional<Collection> values = Optional.of((Collection) attribute);
+            addCollectionToHeader(message, entry.getValue(), values);
+        } else {
+            if (attribute != null) {
+                LOGGER.warn("Can not add {} to headers. Expecting class Collection but got {}.", attribute, attribute.getClass());
+            }
+        }
+    }
+
+    private void addCollectionToHeader(MimeMessage message, String headerName, Optional<Collection> values) {
+        OptionalConverter.toStream(values)
+            .flatMap(Collection::stream)
+            .forEach(value -> addValueToHeader(message, headerName, value));
+    }
+
+    private void addValueToHeader(MimeMessage message, String headerName, Object value) {
+        try {
+            if (value instanceof String) {
+                message.addHeader(headerName, (String) value);
+            } else {
+                if (value != null) {
+                    LOGGER.warn("Invalid type for value intended to be added as {} header. Expecting String but got {}", headerName, value.getClass());
+                }
+            }
+        } catch (MessagingException e) {
+            LOGGER.warn("Could not add header {} with value {}", headerName, value);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e9f8a931/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesToMimeHeaders.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesToMimeHeaders.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesToMimeHeaders.java
index 666ba1d..03c882d 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesToMimeHeaders.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesToMimeHeaders.java
@@ -17,8 +17,6 @@
  * under the License.                                           *
  ****************************************************************/
 
-
-
 package org.apache.james.transport.mailets;
 
 import java.util.Map;
@@ -35,8 +33,8 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Strings;
 
 /**
- * <p>Convert attributes to headers</p>
- * 
+ * <p>Convert attributes of type String to headers</p>
+ *
  * <p>Sample configuration:</p>
  * <pre><code>
  * &lt;mailet match="All" class="MailAttributesToMimeHeaders"&gt;
@@ -54,7 +52,10 @@ public class MailAttributesToMimeHeaders extends GenericMailet {
     @Override
     public void init() throws MessagingException {
         String simpleMappings = getInitParameter("simplemapping");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(simpleMappings), "simplemapping is required");
+
+        if (Strings.isNullOrEmpty(simpleMappings)) {
+            throw new MessagingException("simplemapping is required");
+        }
 
         mappings = MappingArgument.parse(simpleMappings);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e9f8a931/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeadersTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeadersTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeadersTest.java
new file mode 100644
index 0000000..2b21058
--- /dev/null
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeadersTest.java
@@ -0,0 +1,282 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.transport.mailets;
+
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+
+import javax.mail.MessagingException;
+
+import org.apache.mailet.Mailet;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailetConfig;
+import org.apache.mailet.base.test.MailUtil;
+import org.apache.mailet.base.test.MimeMessageBuilder;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import com.google.common.collect.ImmutableList;
+
+public class MailAttributesListToMimeHeadersTest {
+
+    private static final String VALUE_1_1 = "test1.1";
+    private static final String VALUE_1_2 = "test1.2";
+    private static final String VALUE_2_1 = "test2.1";
+    private static final String VALUE_2_2 = "test2.2";
+    private static final ImmutableList<String> MAIL_ATTRIBUTE_VALUE1 = ImmutableList.of(VALUE_1_1, VALUE_1_2);
+    private static final ImmutableList<String> MAIL_ATTRIBUTE_VALUE2 = ImmutableList.of(VALUE_2_1, VALUE_2_2);
+
+    private static final String MAIL_ATTRIBUTE_NAME1 = "org.apache.james.test";
+    private static final String MAIL_ATTRIBUTE_NAME2 = "org.apache.james.test2";
+    private static final String HEADER_NAME1 = "JUNIT";
+    private static final String HEADER_NAME2 = "JUNIT2";
+
+    @Rule public ExpectedException expectedException = ExpectedException.none();
+
+    private Mailet mailet;
+
+    @Before
+    public void setup() {
+        mailet = new MailAttributesListToMimeHeaders();
+    }
+
+    @Test
+    public void shouldThrowMessagingExceptionIfMappingIsNotGiven() throws MessagingException {
+        expectedException.expect(MessagingException.class);
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .build();
+
+        mailet.init(mailetConfig);
+    }
+
+    @Test
+    public void shouldThrowMessagingExceptionIfMappingIsEmpty() throws MessagingException {
+        expectedException.expect(MessagingException.class);
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemmapping", "")
+            .build();
+
+        mailet.init(mailetConfig);
+    }
+
+    @Test
+    public void shouldIgnoreAttributeOfMappingThatDoesNotExistOnTheMessage() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemapping",
+                MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1 +
+                    "," + MAIL_ATTRIBUTE_NAME2 + "; " + HEADER_NAME2 +
+                    "," + "another.attribute" + "; " + "Another-Header")
+            .build();
+
+        mailet.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+            .mimeMessage(MailUtil.createMimeMessage())
+            .attribute(MAIL_ATTRIBUTE_NAME1, MAIL_ATTRIBUTE_VALUE1)
+            .attribute(MAIL_ATTRIBUTE_NAME2, MAIL_ATTRIBUTE_VALUE2)
+            .build();
+
+        mailet.service(mail);
+        assertThat(mail.getMessage().getHeader("another.attribute")).isNull();
+    }
+
+    @Test
+    public void shouldWorkWithMappingWithASingleBinding() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemapping",
+                MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1)
+            .build();
+
+        mailet.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+            .mimeMessage(MailUtil.createMimeMessage())
+            .attribute(MAIL_ATTRIBUTE_NAME1, MAIL_ATTRIBUTE_VALUE1)
+            .build();
+
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getHeader(HEADER_NAME1))
+            .containsExactly(VALUE_1_1, VALUE_1_2);
+    }
+
+    @Test
+    public void shouldIgnoreNullValueInsideList() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemapping",
+                MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1)
+            .build();
+
+        mailet.init(mailetConfig);
+
+        ArrayList<String> listWithNull = new ArrayList<String>();
+        listWithNull.add("1");
+        listWithNull.add(null);
+        listWithNull.add("2");
+        FakeMail mail = FakeMail.builder()
+            .mimeMessage(MailUtil.createMimeMessage())
+            .attribute(MAIL_ATTRIBUTE_NAME1, listWithNull)
+            .build();
+
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getHeader(HEADER_NAME1))
+            .containsExactly("1", "2");
+    }
+
+    @Test
+    public void shouldPutAttributesIntoHeadersWhenMappingDefined() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName("Test")
+                .setProperty("simplemapping",
+                        MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1 +
+                        "," + MAIL_ATTRIBUTE_NAME2 + "; " + HEADER_NAME2 +
+                        "," + "another.attribute" + "; " + "Another-Header")
+                .build();
+        mailet.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+            .mimeMessage(MailUtil.createMimeMessage())
+            .attribute(MAIL_ATTRIBUTE_NAME1, MAIL_ATTRIBUTE_VALUE1)
+            .attribute(MAIL_ATTRIBUTE_NAME2, MAIL_ATTRIBUTE_VALUE2)
+            .attribute("unmatched.attribute", "value")
+            .build();
+
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getHeader(HEADER_NAME1))
+            .containsExactlyElementsOf(MAIL_ATTRIBUTE_VALUE1);
+
+        assertThat(mail.getMessage().getHeader(HEADER_NAME2))
+            .containsExactlyElementsOf(MAIL_ATTRIBUTE_VALUE2);
+    }
+
+    @Test
+    public void shouldNotRemovePreviousAttributeValueWhenAttributeAlreadyPresent() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName("Test")
+                .setProperty("simplemapping", MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1)
+                .build();
+        mailet.init(mailetConfig);
+
+        String firstValue = "first value";
+        FakeMail mail = FakeMail.builder()
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .addHeader(HEADER_NAME1, firstValue)
+                .build())
+            .attribute(MAIL_ATTRIBUTE_NAME1, MAIL_ATTRIBUTE_VALUE1)
+            .build();
+
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getHeader(HEADER_NAME1))
+            .containsOnly(VALUE_1_1, VALUE_1_2, firstValue);
+    }
+
+    @Test
+    public void shouldFilterAttributeOfWrongClass() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemapping",
+                MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1 +
+                    "," + MAIL_ATTRIBUTE_NAME2 + "; " + HEADER_NAME2)
+            .build();
+        mailet.init(mailetConfig);
+
+        FakeMail mail = FakeMail.builder()
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder().build())
+            .attribute(MAIL_ATTRIBUTE_NAME1, 3L)
+            .attribute(MAIL_ATTRIBUTE_NAME2, MAIL_ATTRIBUTE_VALUE2)
+            .build();
+
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getHeader(HEADER_NAME1)).isNull();
+        assertThat(mail.getMessage().getHeader(HEADER_NAME2))
+            .containsExactlyElementsOf(MAIL_ATTRIBUTE_VALUE2);
+    }
+
+
+    @Test
+    public void shouldFilterAttributeElementsOfWrongClass() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemapping", MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1)
+            .build();
+        mailet.init(mailetConfig);
+
+        String value = "value";
+        FakeMail mail = FakeMail.builder()
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder().build())
+            .attribute(MAIL_ATTRIBUTE_NAME1, ImmutableList.of(3L, value))
+            .build();
+
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getHeader(HEADER_NAME1)).containsOnly(value);
+    }
+
+
+    @Test
+    public void shouldThrowAtInitWhenNoSemicolumnInConfigurationEntry() throws MessagingException {
+        expectedException.expect(IllegalArgumentException.class);
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName("Test")
+                .setProperty("simplemapping", "invalidConfigEntry")
+                .build();
+
+        mailet.init(mailetConfig);
+    }
+
+    @Test
+    public void shouldThrowAtInitWhenTwoSemicolumnsInConfigurationEntry() throws MessagingException {
+        expectedException.expect(IllegalArgumentException.class);
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName("Test")
+                .setProperty("simplemapping", "first;second;third")
+                .build();
+
+        mailet.init(mailetConfig);
+    }
+
+    @Test
+    public void shouldThrowAtInitWhenNoConfigurationEntry() throws MessagingException {
+        expectedException.expect(MessagingException.class);
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+                .mailetName("Test")
+                .build();
+
+        mailet.init(mailetConfig);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e9f8a931/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesToMimeHeadersTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesToMimeHeadersTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesToMimeHeadersTest.java
index 657b975..fbec22e 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesToMimeHeadersTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesToMimeHeadersTest.java
@@ -17,10 +17,10 @@
  * under the License.                                           *
  ****************************************************************/
 
-
 package org.apache.james.transport.mailets;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.within;
 
 import javax.mail.MessagingException;
 
@@ -55,6 +55,64 @@ public class MailAttributesToMimeHeadersTest {
     }
 
     @Test
+    public void shouldThrowMessagingExceptionIfMappingIsNotGiven() throws MessagingException {
+        expectedException.expect(MessagingException.class);
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .build();
+
+        mailet.init(mailetConfig);
+    }
+
+    @Test
+    public void shouldThrowMessagingExceptionIfMappingIsEmpty() throws MessagingException {
+        expectedException.expect(MessagingException.class);
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemmapping", "")
+            .build();
+
+        mailet.init(mailetConfig);
+    }
+
+    @Test
+    public void shouldIgnoreAttributeOfMappingThatDoesNotExistOnTheMessage() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemapping",
+                MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1 +
+                    "," + MAIL_ATTRIBUTE_NAME2 + "; " + HEADER_NAME2 +
+                    "," + "another.attribute" + "; " + "Another-Header")
+            .build();
+
+        mailet.init(mailetConfig);
+
+        FakeMail mockedMail = MailUtil.createMockMail2Recipients(MailUtil.createMimeMessage());
+        mockedMail.setAttribute(MAIL_ATTRIBUTE_NAME1, MAIL_ATTRIBUTE_VALUE1);
+        mockedMail.setAttribute(MAIL_ATTRIBUTE_NAME2, MAIL_ATTRIBUTE_VALUE2);
+
+        mailet.service(mockedMail);
+        assertThat(mockedMail.getMessage().getHeader("another.attribute")).isNull();
+    }
+
+    @Test
+    public void shouldWorkWithMappingWithASingleBinding() throws MessagingException {
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .mailetName("Test")
+            .setProperty("simplemapping",
+                MAIL_ATTRIBUTE_NAME1 + "; " + HEADER_NAME1)
+            .build();
+
+        mailet.init(mailetConfig);
+
+        FakeMail mockedMail = MailUtil.createMockMail2Recipients(MailUtil.createMimeMessage());
+        mockedMail.setAttribute(MAIL_ATTRIBUTE_NAME1, MAIL_ATTRIBUTE_VALUE1);
+
+        mailet.service(mockedMail);
+        assertThat(mockedMail.getMessage().getHeader(HEADER_NAME1)).containsExactly(MAIL_ATTRIBUTE_VALUE1);
+    }
+
+    @Test
     public void shouldPutAttributesIntoHeadersWhenMappingDefined() throws MessagingException {
         FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
                 .mailetName("Test")
@@ -120,7 +178,7 @@ public class MailAttributesToMimeHeadersTest {
         FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
                 .mailetName("Test")
                 .build();
-        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expect(MessagingException.class);
         mailet.init(mailetConfig);
     }
 }


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