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/03/31 16:01:28 UTC

[james-project] branch master updated: JAMES-3898 VacationMailet should Q-Encode special characters (#1508)

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


The following commit(s) were added to refs/heads/master by this push:
     new 3388bfce19 JAMES-3898 VacationMailet should Q-Encode special characters (#1508)
3388bfce19 is described below

commit 3388bfce19bac94ae2fe29f281af4ef863313310
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Fri Mar 31 23:01:20 2023 +0700

    JAMES-3898 VacationMailet should Q-Encode special characters (#1508)
---
 .../james/transport/mailets/VacationReply.java     |  2 +-
 .../transport/util/MimeMessageBodyGenerator.java   |  2 +-
 .../james/transport/mailets/VacationReplyTest.java | 27 +++++++++++++++++-----
 3 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationReply.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationReply.java
index 999ec9bcf6..36815a1c42 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationReply.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationReply.java
@@ -74,7 +74,7 @@ public class VacationReply {
 
         private MimeMessage generateMimeMessage(MimeMessageBodyGenerator mimeMessageBodyGenerator) throws MessagingException {
             MimeMessage reply = (MimeMessage) originalMail.getMessage().reply(NOT_REPLY_TO_ALL);
-            vacation.getSubject().ifPresent(Throwing.consumer(subjectString -> reply.setHeader("subject", subjectString)));
+            vacation.getSubject().ifPresent(Throwing.consumer(subjectString -> reply.setSubject(subjectString)));
             reply.setHeader(FROM_HEADER, mailRecipient.toString());
             reply.setHeader(TO_HEADER, originalMail.getMaybeSender().get().asString());
             reply.setHeader(AutomaticallySentMailDetector.AUTO_SUBMITTED_HEADER, AutomaticallySentMailDetector.AUTO_REPLIED_VALUE);
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/MimeMessageBodyGenerator.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/MimeMessageBodyGenerator.java
index 5673b4aa9b..e54ba6f82b 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/util/MimeMessageBodyGenerator.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/util/MimeMessageBodyGenerator.java
@@ -45,7 +45,7 @@ public class MimeMessageBodyGenerator {
 
     @Inject
     @VisibleForTesting
-    MimeMessageBodyGenerator(HtmlTextExtractor htmlTextExtractor) {
+    public MimeMessageBodyGenerator(HtmlTextExtractor htmlTextExtractor) {
         this.htmlTextExtractor = htmlTextExtractor;
     }
 
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationReplyTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationReplyTest.java
index c1703c814a..85b89e0aeb 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationReplyTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationReplyTest.java
@@ -22,6 +22,7 @@ package org.apache.james.transport.mailets;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.mockito.hamcrest.MockitoHamcrest.argThat;
@@ -33,8 +34,9 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.james.core.MailAddress;
 import org.apache.james.transport.util.MimeMessageBodyGenerator;
-import org.apache.james.vacation.api.Vacation;
 import org.apache.james.util.MimeMessageUtil;
+import org.apache.james.util.html.HtmlTextExtractor;
+import org.apache.james.vacation.api.Vacation;
 import org.apache.mailet.base.test.FakeMail;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
@@ -65,9 +67,11 @@ public class VacationReplyTest {
                 .sender(originalSender)
                 .build();
 
-        mimeMessageBodyGenerator = mock(MimeMessageBodyGenerator.class);
+        HtmlTextExtractor htmlTextExtractor = mock(HtmlTextExtractor.class);
+        when(htmlTextExtractor.toPlainText(any())).thenReturn("HTML");
+
+        mimeMessageBodyGenerator = spy(new MimeMessageBodyGenerator(htmlTextExtractor));
         generatedBody = MimeMessageUtil.defaultMimeMessage();
-        when(mimeMessageBodyGenerator.from(any(MimeMessage.class), any(), any())).thenReturn(generatedBody);
     }
 
     @Test
@@ -84,7 +88,6 @@ public class VacationReplyTest {
 
         assertThat(vacationReply.getRecipients()).containsExactly(originalSender);
         assertThat(vacationReply.getSender()).isEqualTo(originalRecipient);
-        assertThat(vacationReply.getMimeMessage()).isEqualTo(generatedBody);
     }
 
     @Test
@@ -100,7 +103,20 @@ public class VacationReplyTest {
         verify(mimeMessageBodyGenerator).from(argThat(createSubjectMatcher("Re: Original subject")), any(), any());
         assertThat(vacationReply.getRecipients()).containsExactly(originalSender);
         assertThat(vacationReply.getSender()).isEqualTo(originalRecipient);
-        assertThat(vacationReply.getMimeMessage()).isEqualTo(generatedBody);
+    }
+
+    @Test
+    public void subjectShouldBeQEncodedWhenSpecialCharacters() throws Exception {
+        VacationReply vacationReply = VacationReply.builder(mail)
+            .vacation(Vacation.builder()
+                .enabled(true)
+                .subject(Optional.of("Nghiêm Thị Tuyết Nhung"))
+                .textBody(REASON)
+                .build())
+            .receivedMailRecipient(originalRecipient)
+            .build(mimeMessageBodyGenerator);
+
+        assertThat(vacationReply.getMimeMessage().getHeader("subject")).containsOnly("=?UTF-8?Q?Nghi=C3=AAm_Th=E1=BB=8B_Tuy=E1=BA=BFt_Nhung?=");
     }
 
     @Test
@@ -117,7 +133,6 @@ public class VacationReplyTest {
         verify(mimeMessageBodyGenerator).from(argThat(createSubjectMatcher(SUBJECT)), any(), any());
         assertThat(vacationReply.getRecipients()).containsExactly(originalSender);
         assertThat(vacationReply.getSender()).isEqualTo(originalRecipient);
-        assertThat(vacationReply.getMimeMessage()).isEqualTo(generatedBody);
     }
 
     @Test(expected = NullPointerException.class)


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