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/09/22 07:47:32 UTC
[2/5] james-project git commit: JAMES-1814 Encoding filename in
created messages
JAMES-1814 Encoding filename in created messages
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7443396f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7443396f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7443396f
Branch: refs/heads/master
Commit: 7443396fd824ce7448d2f7045fdecd8c9abe19c7
Parents: 3403ca1
Author: Laura Royet <lr...@linagora.com>
Authored: Wed Sep 21 12:14:15 2016 +0200
Committer: Laura Royet <lr...@linagora.com>
Committed: Wed Sep 21 12:14:15 2016 +0200
----------------------------------------------------------------------
.../jmap/methods/MIMEMessageConverter.java | 8 ++-
.../jmap/methods/MIMEMessageConverterTest.java | 52 +++++++++++++++++++-
2 files changed, 58 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/7443396f/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 886fd4e..4eb54db 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
@@ -33,6 +33,8 @@ import org.apache.james.mailbox.model.MessageAttachment;
import org.apache.james.jmap.model.CreationMessageId;
import org.apache.james.mime4j.Charsets;
import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.EncoderUtil;
+import org.apache.james.mime4j.codec.EncoderUtil.Usage;
import org.apache.james.mime4j.dom.FieldParser;
import org.apache.james.mime4j.dom.Message;
import org.apache.james.mime4j.dom.Multipart;
@@ -259,7 +261,7 @@ public class MIMEMessageConverter {
private ContentTypeField contentTypeField(MessageAttachment att) {
Builder<String, String> parameters = ImmutableMap.<String, String> builder();
if (att.getName().isPresent()) {
- parameters.put("name", att.getName().get());
+ parameters.put("name", encode(att.getName().get()));
}
String type = att.getAttachment().getType();
if (type.contains(FIELD_PARAMETERS_SEPARATOR)) {
@@ -268,6 +270,10 @@ public class MIMEMessageConverter {
return Fields.contentType(type, parameters.build());
}
+ private String encode(String name) {
+ return EncoderUtil.encodeEncodedWord(name, Usage.TEXT_TOKEN);
+ }
+
private String contentTypeWithoutParameters(String type) {
return FluentIterable.from(Splitter.on(FIELD_PARAMETERS_SEPARATOR).split(type)).get(0);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7443396f/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 a5f4556..6fbb98d 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
@@ -34,11 +34,14 @@ import org.apache.james.mailbox.model.AttachmentId;
import org.apache.james.mailbox.model.Cid;
import org.apache.james.mailbox.model.MessageAttachment;
import org.apache.james.mime4j.Charsets;
+import org.apache.james.mime4j.codec.EncoderUtil;
+import org.apache.james.mime4j.codec.EncoderUtil.Usage;
import org.apache.james.mime4j.dom.Entity;
import org.apache.james.mime4j.dom.Message;
import org.apache.james.mime4j.dom.Multipart;
import org.apache.james.mime4j.dom.TextBody;
import org.apache.james.mime4j.dom.address.Mailbox;
+import org.apache.james.mime4j.dom.field.ContentTypeField;
import org.apache.james.mime4j.message.BasicBodyFactory;
import org.apache.james.mime4j.stream.Field;
import org.junit.Test;
@@ -470,4 +473,51 @@ public class MIMEMessageConverterTest {
String actual = new String(convert, Charsets.US_ASCII);
assertThat(actual).contains(expectedEncodedContent);
}
-}
\ No newline at end of file
+
+ @Test
+ public void convertToMimeShouldAddAttachmentAndContainsIndicationAboutTheWayToEncodeFilenamesAttachmentInTheInputStreamWhenSending() {
+ // Given
+ MIMEMessageConverter sut = new MIMEMessageConverter();
+
+ CreationMessage testMessage = CreationMessage.builder()
+ .mailboxIds(ImmutableList.of("dead-bada55"))
+ .subject("subject")
+ .from(DraftEmailer.builder().name("sender").build())
+ .htmlBody("Hello <b>all<b>!")
+ .build();
+
+ String expectedCID = "cid";
+ String expectedMimeType = "image/png";
+ String text = "123456";
+ String name = "\u062f\u064a\u0646\u0627\u0635\u0648\u0631.png";
+ String expectedName = EncoderUtil.encodeEncodedWord(name, Usage.TEXT_TOKEN);
+ MessageAttachment attachment = MessageAttachment.builder()
+ .name(name)
+ .attachment(org.apache.james.mailbox.model.Attachment.builder()
+ .attachmentId(AttachmentId.from("blodId"))
+ .bytes(text.getBytes())
+ .type(expectedMimeType)
+ .build())
+ .cid(Cid.from(expectedCID))
+ .isInline(true)
+ .build();
+
+ // When
+ Message result = sut.convertToMime(new ValueWithId.CreationMessageEntry(
+ CreationMessageId.of("user|mailbox|1"), testMessage), ImmutableList.of(attachment));
+
+ // Then
+ assertThat(result.getBody()).isInstanceOf(Multipart.class);
+ assertThat(result.isMultipart()).isTrue();
+ Multipart typedResult = (Multipart)result.getBody();
+ assertThat(typedResult.getBodyParts()).hasSize(2);
+
+ Entity attachmentPart = typedResult.getBodyParts().get(1);
+ String filename = getNameParameterValue(attachmentPart);
+ assertThat(filename).isEqualTo(expectedName);
+ }
+
+ private String getNameParameterValue(Entity attachmentPart) {
+ return ((ContentTypeField) attachmentPart.getHeader().getField("Content-Type")).getParameter("name");
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org