You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2021/05/15 14:21:23 UTC

[sling-org-apache-sling-commons-messaging-mail] branch master updated: SLING-10380 Headers support not working

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

olli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-messaging-mail.git


The following commit(s) were added to refs/heads/master by this push:
     new b91f7f5  SLING-10380 Headers support not working
b91f7f5 is described below

commit b91f7f5062f52ba34489a50edd2592e7e86d50fe
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Sat May 15 16:21:13 2021 +0200

    SLING-10380 Headers support not working
    
    replace InternetHeaders by intermediate Map
---
 .../commons/messaging/mail/MessageBuilder.java     |  4 +--
 .../mail/internal/SimpleMessageBuilder.java        | 21 +++++-------
 .../mail/internal/SimpleMessageBuilderTest.java    | 39 ++++++++++++++++++++++
 3 files changed, 50 insertions(+), 14 deletions(-)

diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java b/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java
index fe80ab5..2d0110c 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/MessageBuilder.java
@@ -19,12 +19,12 @@
 package org.apache.sling.commons.messaging.mail;
 
 import java.util.Collection;
+import java.util.Map;
 
 import jakarta.mail.Header;
 import jakarta.mail.MessagingException;
 import jakarta.mail.internet.AddressException;
 import jakarta.mail.internet.InternetAddress;
-import jakarta.mail.internet.InternetHeaders;
 import jakarta.mail.internet.MimeMessage;
 
 import org.jetbrains.annotations.NotNull;
@@ -36,7 +36,7 @@ public interface MessageBuilder {
 
     @NotNull MessageBuilder header(@NotNull final String name, @Nullable final String value);
 
-    @NotNull MessageBuilder headers(@NotNull final InternetHeaders headers);
+    @NotNull MessageBuilder headers(@NotNull final Map<String, String> headers);
 
     @NotNull MessageBuilder from(@NotNull final InternetAddress from);
 
diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java
index 9723546..1ab9e27 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilder.java
@@ -25,8 +25,10 @@ import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import jakarta.activation.DataHandler;
 import jakarta.activation.DataSource;
@@ -38,7 +40,6 @@ import jakarta.mail.Part;
 import jakarta.mail.Session;
 import jakarta.mail.internet.AddressException;
 import jakarta.mail.internet.InternetAddress;
-import jakarta.mail.internet.InternetHeaders;
 import jakarta.mail.internet.MimeBodyPart;
 import jakarta.mail.internet.MimeMessage;
 import jakarta.mail.internet.MimeMultipart;
@@ -52,7 +53,7 @@ public class SimpleMessageBuilder implements MessageBuilder {
 
     private final Session session;
 
-    private final InternetHeaders headers = new InternetHeaders();
+    private final Map<String, String> headers = new HashMap<>();
 
     private InternetAddress from;
 
@@ -92,16 +93,13 @@ public class SimpleMessageBuilder implements MessageBuilder {
 
     @Override
     public @NotNull MessageBuilder header(@NotNull final String name, @Nullable final String value) {
-        headers.setHeader(name, value);
+        headers.put(name, value);
         return this;
     }
 
     @Override
-    public @NotNull MessageBuilder headers(@NotNull final InternetHeaders headers) {
-        while (headers.getAllHeaders().hasMoreElements()) {
-            final Header header = headers.getAllHeaders().nextElement();
-            this.headers.setHeader(header.getName(), header.getValue());
-        }
+    public @NotNull MessageBuilder headers(@NotNull final Map<String, String> headers) {
+        this.headers.putAll(headers);
         return this;
     }
 
@@ -349,7 +347,7 @@ public class SimpleMessageBuilder implements MessageBuilder {
         return this;
     }
 
-    private InternetHeaders headers() {
+    private Map<String, String> headers() {
         return headers;
     }
 
@@ -412,9 +410,8 @@ public class SimpleMessageBuilder implements MessageBuilder {
     public @NotNull MimeMessage build() throws MessagingException {
         final MimeMessage message = new MimeMessage(session);
 
-        while (headers().getAllHeaders().hasMoreElements()) {
-            final Header header = headers.getAllHeaders().nextElement();
-            message.setHeader(header.getName(), header.getValue());
+        for (final Map.Entry<String, String> header : headers().entrySet()) {
+            message.setHeader(header.getKey(), header.getValue());
         }
 
         message.setFrom(from());
diff --git a/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilderTest.java b/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilderTest.java
index 268e6fb..06a7eb9 100644
--- a/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilderTest.java
+++ b/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMessageBuilderTest.java
@@ -49,6 +49,45 @@ public class SimpleMessageBuilderTest {
         addresses.put("e", new InternetAddress("e@example.org", "e"));
     }
 
+    @Test
+    public void testHeader() throws Exception {
+        final Session session = Session.getInstance(properties);
+        final SimpleMessageBuilder builder = new SimpleMessageBuilder(session);
+        builder.header("a", "1");
+        builder.header("b", "2");
+        builder.header("c", "3");
+        final MimeMessage message = builder.build();
+        final String[] a = message.getHeader("a");
+        assertThat(a.length).isEqualTo(1);
+        assertThat(a[0]).isEqualTo("1");
+        final String[] b = message.getHeader("b");
+        assertThat(b.length).isEqualTo(1);
+        assertThat(b[0]).isEqualTo("2");
+        final String[] c = message.getHeader("c");
+        assertThat(c.length).isEqualTo(1);
+        assertThat(c[0]).isEqualTo("3");
+    }
+
+    @Test
+    public void testHeaders() throws Exception {
+        final Map<String, String> headers = new HashMap<>();
+        headers.put("a", "1");
+        headers.put("b", "2");
+        headers.put("c", "3");
+        final Session session = Session.getInstance(properties);
+        final SimpleMessageBuilder builder = new SimpleMessageBuilder(session);
+        builder.headers(headers);
+        final MimeMessage message = builder.build();
+        final String[] a = message.getHeader("a");
+        assertThat(a.length).isEqualTo(1);
+        assertThat(a[0]).isEqualTo("1");
+        final String[] b = message.getHeader("b");
+        assertThat(b.length).isEqualTo(1);
+        assertThat(b[0]).isEqualTo("2");
+        final String[] c = message.getHeader("c");
+        assertThat(c.length).isEqualTo(1);
+        assertThat(c[0]).isEqualTo("3");
+    }
 
     @Test
     public void testFromInternetAddress() throws Exception {