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 ro...@apache.org on 2016/08/26 08:11:23 UTC

[1/2] james-project git commit: JAMES-1819 Add ContentTransferEncoding when converting a message from JMAP to Mime

Repository: james-project
Updated Branches:
  refs/heads/master 240bed003 -> 6d30e8db7


JAMES-1819 Add ContentTransferEncoding when converting a message from JMAP to Mime


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

Branch: refs/heads/master
Commit: e55bd9c6e1abe58b4ced60934e30a12ce8ac9d2f
Parents: f91fc65
Author: Antoine Duprat <ad...@linagora.com>
Authored: Wed Aug 24 09:10:48 2016 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Aug 26 08:45:38 2016 +0200

----------------------------------------------------------------------
 .../jmap/methods/MIMEMessageConverter.java      |  9 ++-
 .../jmap/methods/MIMEMessageConverterTest.java  | 74 ++++++++++++++++----
 .../james/jmap/model/CreationMessageTest.java   | 14 +++-
 3 files changed, 81 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e55bd9c6/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MIMEMessageConverter.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MIMEMessageConverter.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MIMEMessageConverter.java
index f598d98..b802276 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MIMEMessageConverter.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MIMEMessageConverter.java
@@ -75,6 +75,8 @@ public class MIMEMessageConverter {
     private static final String ALTERNATIVE_SUB_TYPE = "alternative";
     private static final String MIXED_SUB_TYPE = "mixed";
     private static final String FIELD_PARAMETERS_SEPARATOR = ";";
+    private static final String QUOTED_PRINTABLE = "quoted-printable";
+    private static final String BASE64 = "base64";
 
     private final BasicBodyFactory bodyFactory;
 
@@ -103,7 +105,8 @@ public class MIMEMessageConverter {
         if (isMultipart(creationMessageEntry.getValue(), messageAttachments)) {
             messageBuilder.setBody(createMultipart(creationMessageEntry.getValue(), messageAttachments));
         } else {
-            messageBuilder.setBody(createTextBody(creationMessageEntry.getValue()));
+            messageBuilder.setBody(createTextBody(creationMessageEntry.getValue()))
+                .setContentTransferEncoding(QUOTED_PRINTABLE);
         }
         buildMimeHeaders(messageBuilder, creationMessageEntry.getCreationId(), creationMessageEntry.getValue(), messageAttachments);
         return messageBuilder.build();
@@ -209,6 +212,7 @@ public class MIMEMessageConverter {
                 .use(bodyFactory)
                 .setBody(textBody.get(), Charsets.UTF_8)
                 .setContentType(PLAIN_TEXT_MEDIA_TYPE, UTF_8_CHARSET)
+                .setContentTransferEncoding(QUOTED_PRINTABLE)
                 .build());
         }
     }
@@ -219,6 +223,7 @@ public class MIMEMessageConverter {
                 .use(bodyFactory)
                 .setBody(htmlBody.get(), Charsets.UTF_8)
                 .setContentType(HTML_MEDIA_TYPE, UTF_8_CHARSET)
+                .setContentTransferEncoding(QUOTED_PRINTABLE)
                 .build());
         }
     }
@@ -240,7 +245,7 @@ public class MIMEMessageConverter {
             .setBody(new BasicBodyFactory().binaryBody(ByteStreams.toByteArray(att.getAttachment().getStream())))
             .setField(contentTypeField(att))
             .setField(contentDispositionField(att.isInline()))
-            .setContentTransferEncoding("base64");
+            .setContentTransferEncoding(BASE64);
         contentId(builder, att);
         return builder.build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e55bd9c6/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/MIMEMessageConverterTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/MIMEMessageConverterTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/MIMEMessageConverterTest.java
index b898aff..3bbe36c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/MIMEMessageConverterTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/MIMEMessageConverterTest.java
@@ -105,7 +105,7 @@ public class MIMEMessageConverterTest {
         ZonedDateTime messageDate = ZonedDateTime.ofInstant(now, ZoneId.systemDefault());
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .date(messageDate)
@@ -120,13 +120,36 @@ public class MIMEMessageConverterTest {
     }
 
     @Test
+    public void convertToMimeShouldSetQuotedPrintableContentTransferEncodingWhenText() {
+        // Given
+        MIMEMessageConverter sut = new MIMEMessageConverter();
+
+        CreationMessage testMessage = CreationMessage.builder()
+                .mailboxId("dead-bada55")
+                .subject("subject")
+                .from(DraftEmailer.builder().name("sender").build())
+                .htmlBody("Hello <b>all</b>!")
+                .build();
+
+        // When
+        Message result = sut.convertToMime(new ValueWithId.CreationMessageEntry(
+                CreationMessageId.of("user|mailbox|1"), testMessage), ImmutableList.of());
+
+        // Then
+        assertThat(result.getHeader()
+                .getField("Content-Transfer-Encoding")
+                .getBody())
+            .isEqualTo("quoted-printable");
+    }
+
+    @Test
     public void convertToMimeShouldSetTextBodyWhenProvided() {
         // Given
         MIMEMessageConverter sut = new MIMEMessageConverter();
         TextBody expected = new BasicBodyFactory().textBody("Hello all!", Charsets.UTF_8);
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .textBody("Hello all!")
@@ -147,7 +170,7 @@ public class MIMEMessageConverterTest {
         TextBody expected = new BasicBodyFactory().textBody("", Charsets.UTF_8);
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .build();
@@ -167,7 +190,7 @@ public class MIMEMessageConverterTest {
         TextBody expected = new BasicBodyFactory().textBody("Hello <b>all</b>!", Charsets.UTF_8);
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .htmlBody("Hello <b>all</b>!")
@@ -187,7 +210,7 @@ public class MIMEMessageConverterTest {
         MIMEMessageConverter sut = new MIMEMessageConverter();
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .textBody("Hello all!")
@@ -212,7 +235,7 @@ public class MIMEMessageConverterTest {
         MIMEMessageConverter sut = new MIMEMessageConverter();
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .textBody("Hello all!")
@@ -223,9 +246,11 @@ public class MIMEMessageConverterTest {
                 "Content-Type: multipart/alternative;\r\n" +
                 " boundary=\"-=Part.1.";
         String expectedPart1 = "Content-Type: text/plain; charset=UTF-8\r\n" +
+                "Content-Transfer-Encoding: quoted-printable\r\n" +
                 "\r\n" +
                 "Hello all!\r\n";
         String expectedPart2 = "Content-Type: text/html; charset=UTF-8\r\n" +
+                "Content-Transfer-Encoding: quoted-printable\r\n" +
                 "\r\n" +
                 "Hello <b>all</b>!\r\n";
 
@@ -246,7 +271,7 @@ public class MIMEMessageConverterTest {
         MIMEMessageConverter sut = new MIMEMessageConverter();
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .textBody("Hello all!")
@@ -266,7 +291,7 @@ public class MIMEMessageConverterTest {
         MIMEMessageConverter sut = new MIMEMessageConverter();
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .htmlBody("Hello <b>all<b>!")
@@ -287,7 +312,7 @@ public class MIMEMessageConverterTest {
         TextBody expected = new BasicBodyFactory().textBody("", Charsets.UTF_8);
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .htmlBody("")
@@ -309,7 +334,7 @@ public class MIMEMessageConverterTest {
         TextBody expected = new BasicBodyFactory().textBody("", Charsets.UTF_8);
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .textBody("")
@@ -330,7 +355,7 @@ public class MIMEMessageConverterTest {
         MIMEMessageConverter sut = new MIMEMessageConverter();
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .htmlBody("Hello <b>all<b>!")
@@ -364,6 +389,7 @@ public class MIMEMessageConverterTest {
         assertThat(attachmentPart.getDispositionType()).isEqualTo("inline");
         assertThat(attachmentPart.getMimeType()).isEqualTo(expectedMimeType);
         assertThat(attachmentPart.getHeader().getField("Content-ID").getBody()).isEqualTo(expectedCID);
+        assertThat(attachmentPart.getContentTransferEncoding()).isEqualTo("base64");
     }
 
     @Test
@@ -372,7 +398,7 @@ public class MIMEMessageConverterTest {
         MIMEMessageConverter sut = new MIMEMessageConverter();
 
         CreationMessage testMessage = CreationMessage.builder()
-                .mailboxIds(ImmutableList.of("dead-bada55"))
+                .mailboxId("dead-bada55")
                 .subject("subject")
                 .from(DraftEmailer.builder().name("sender").build())
                 .textBody("Hello all!")
@@ -420,4 +446,28 @@ public class MIMEMessageConverterTest {
         assertThat(attachmentPart.getMimeType()).isEqualTo(expectedMimeType);
         assertThat(attachmentPart.getHeader().getField("Content-ID").getBody()).isEqualTo(expectedCID);
     }
+
+    @Test
+    public void convertShouldEncodeWhenNonASCIICharacters() {
+        // Given
+        MIMEMessageConverter sut = new MIMEMessageConverter();
+
+        CreationMessage testMessage = CreationMessage.builder()
+                .mailboxId("dead-bada55")
+                .subject("subject")
+                .from(DraftEmailer.builder().name("sender").build())
+                .htmlBody("Some non-ASCII characters: �����")
+                .build();
+
+        // When
+        ImmutableList<MessageAttachment> attachments = ImmutableList.of();
+        byte[] convert = sut.convert(new ValueWithId.CreationMessageEntry(
+                CreationMessageId.of("user|mailbox|1"), testMessage), attachments);
+
+        String expectedEncodedContent = "Some non-ASCII characters: =C3=A1=C3=84=C3=8E=C3=9F=C3=BF";
+
+        // Then
+        String actual = new String(convert, Charsets.US_ASCII);
+        assertThat(actual).contains(expectedEncodedContent);
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/e55bd9c6/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
index a72647f..e7762aa 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
@@ -19,11 +19,11 @@
 
 package org.apache.james.jmap.model;
 
-import static org.apache.james.jmap.model.CreationMessage.DraftEmailer;
-import static org.apache.james.jmap.model.MessageProperties.MessageProperty;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.jmap.methods.ValidationResult;
+import org.apache.james.jmap.model.CreationMessage.DraftEmailer;
+import org.apache.james.jmap.model.MessageProperties.MessageProperty;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -134,4 +134,14 @@ public class CreationMessageTest {
         assertThat(sut.validate()).isEmpty();
     }
 
+    @Test
+    public void mailboxIdShouldSetASingletonList() {
+        String mailboxId = "123";
+        CreationMessage message = CreationMessage.builder()
+            .headers(ImmutableMap.of())
+            .mailboxId(mailboxId)
+            .build();
+
+        assertThat(message.getMailboxIds()).containsExactly(mailboxId);
+    }
 }
\ No newline at end of file


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


[2/2] james-project git commit: Merge remote-tracking branch 'aduprat/JAMES-1819'

Posted by ro...@apache.org.
Merge remote-tracking branch 'aduprat/JAMES-1819'


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

Branch: refs/heads/master
Commit: 6d30e8db74249accc4eefe890d391c95577afb3a
Parents: 240bed0 e55bd9c
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Fri Aug 26 10:10:05 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Fri Aug 26 10:10:05 2016 +0200

----------------------------------------------------------------------
 .../jmap/methods/MIMEMessageConverter.java      |  9 ++-
 .../jmap/methods/MIMEMessageConverterTest.java  | 74 ++++++++++++++++----
 .../james/jmap/model/CreationMessageTest.java   | 14 +++-
 3 files changed, 81 insertions(+), 16 deletions(-)
----------------------------------------------------------------------



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