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 ad...@apache.org on 2016/07/12 11:31:05 UTC
[1/2] james-project git commit: JAMES-1794 Handle correctly binary
attachments when sending a message
Repository: james-project
Updated Branches:
refs/heads/master c3d7956eb -> 0afefc0bd
JAMES-1794 Handle correctly binary attachments when sending a message
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cb8d4e41
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cb8d4e41
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cb8d4e41
Branch: refs/heads/master
Commit: cb8d4e41e3cf32852e9a2ae1d7bc50f0bb280823
Parents: 03be8a46
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jul 12 12:37:51 2016 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Jul 12 13:30:13 2016 +0200
----------------------------------------------------------------------
.../integration/SetMessagesMethodTest.java | 77 +++++++++++++++++++-
.../jmap/methods/MIMEMessageConverter.java | 7 +-
2 files changed, 79 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/cb8d4e41/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 306c070..4d2726a 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -1692,7 +1692,79 @@ public abstract class SetMessagesMethodTest {
}
@Test
- public void attachmentsShouldBeRetrievedWhenChainingSetMessagesAndGetMessages() throws Exception {
+ public void attachmentsShouldBeRetrievedWhenChainingSetMessagesAndGetMessagesBinaryAttachment() throws Exception {
+ jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "sent");
+
+ byte[] rawBytes = new byte[]{-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,
+ -99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,
+ -50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,
+ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,
+ 50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+ 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127};
+
+ Attachment attachment = Attachment.builder()
+ .bytes(rawBytes)
+ .type("application/octet-stream")
+ .build();
+ uploadAttachment(attachment);
+ String expectedBlobId = attachment.getAttachmentId().getId();
+
+ String messageCreationId = "creationId";
+ String fromAddress = username;
+ String outboxId = getOutboxId(accessToken);
+ String requestBody = "[" +
+ " [" +
+ " \"setMessages\","+
+ " {" +
+ " \"create\": { \"" + messageCreationId + "\" : {" +
+ " \"from\": { \"name\": \"Me\", \"email\": \"" + fromAddress + "\"}," +
+ " \"to\": [{ \"name\": \"Me\", \"email\": \"" + fromAddress + "\"}]," +
+ " \"subject\": \"Message with an attachment\"," +
+ " \"textBody\": \"Test body\"," +
+ " \"mailboxIds\": [\"" + outboxId + "\"], " +
+ " \"attachments\": [" +
+ " {\"blobId\" : \"" + attachment.getAttachmentId().getId() + "\", " +
+ " \"type\" : \"" + attachment.getType() + "\", " +
+ " \"size\" : " + attachment.getSize() + ", " +
+ " \"cid\" : \"123456789\", " +
+ " \"isInline\" : true }" +
+ " ]" +
+ " }}" +
+ " }," +
+ " \"#0\"" +
+ " ]" +
+ "]";
+
+ given()
+ .header("Authorization", accessToken.serialize())
+ .body(requestBody)
+ .when()
+ .post("/jmap");
+
+ calmlyAwait.atMost(30, TimeUnit.SECONDS).until( () -> isAnyMessageFoundInInbox(accessToken));
+
+ String firstMessage = ARGUMENTS + ".list[0]";
+ String firstAttachment = firstMessage + ".attachments[0]";
+ String presumedMessageId = "username@domain.tld|INBOX|1";
+ given()
+ .header("Authorization", accessToken.serialize())
+ .body("[[\"getMessages\", {\"ids\": [\"" + presumedMessageId + "\"]}, \"#0\"]]")
+ .when()
+ .post("/jmap")
+ .then()
+ .statusCode(200)
+ .body(NAME, equalTo("messages"))
+ .body(ARGUMENTS + ".list", hasSize(1))
+ .body(firstMessage + ".attachments", hasSize(1))
+ .body(firstAttachment + ".blobId", equalTo(expectedBlobId))
+ .body(firstAttachment + ".type", equalTo("application/octet-stream"))
+ .body(firstAttachment + ".size", equalTo((int) attachment.getSize()))
+ .body(firstAttachment + ".cid", equalTo("123456789"))
+ .body(firstAttachment + ".isInline", equalTo(true));
+ }
+
+ @Test
+ public void attachmentsShouldBeRetrievedWhenChainingSetMessagesAndGetMessagesTextAttachment() throws Exception {
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "sent");
Attachment attachment = Attachment.builder()
@@ -1700,6 +1772,7 @@ public abstract class SetMessagesMethodTest {
.type("application/octet-stream")
.build();
uploadAttachment(attachment);
+ String expectedBlobId = attachment.getAttachmentId().getId();
String messageCreationId = "creationId";
String fromAddress = username;
@@ -1748,7 +1821,7 @@ public abstract class SetMessagesMethodTest {
.body(NAME, equalTo("messages"))
.body(ARGUMENTS + ".list", hasSize(1))
.body(firstMessage + ".attachments", hasSize(1))
- .body(firstAttachment + ".blobId", equalTo(attachment.getAttachmentId().getId()))
+ .body(firstAttachment + ".blobId", equalTo(expectedBlobId))
.body(firstAttachment + ".type", equalTo("application/octet-stream"))
.body(firstAttachment + ".size", equalTo((int) attachment.getSize()))
.body(firstAttachment + ".cid", equalTo("123456789"))
http://git-wip-us.apache.org/repos/asf/james-project/blob/cb8d4e41/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 7a50287..f598d98 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
@@ -27,7 +27,6 @@ import java.util.TimeZone;
import java.util.function.Consumer;
import java.util.stream.Collectors;
-import org.apache.commons.io.IOUtils;
import org.apache.james.jmap.model.CreationMessage;
import org.apache.james.jmap.model.CreationMessage.DraftEmailer;
import org.apache.james.jmap.model.CreationMessageId;
@@ -63,6 +62,7 @@ import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.io.ByteStreams;
import com.google.common.net.MediaType;
public class MIMEMessageConverter {
@@ -237,9 +237,10 @@ public class MIMEMessageConverter {
private BodyPart attachmentBodyPart(MessageAttachment att) throws IOException {
BodyPartBuilder builder = BodyPartBuilder.create()
.use(bodyFactory)
- .setBody(IOUtils.toString(att.getAttachment().getStream()), Charsets.UTF_8)
+ .setBody(new BasicBodyFactory().binaryBody(ByteStreams.toByteArray(att.getAttachment().getStream())))
.setField(contentTypeField(att))
- .setField(contentDispositionField(att.isInline()));
+ .setField(contentDispositionField(att.isInline()))
+ .setContentTransferEncoding("base64");
contentId(builder, att);
return builder.build();
}
---------------------------------------------------------------------
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 branch 'JAMES-1794-2'
Posted by ad...@apache.org.
Merge branch 'JAMES-1794-2'
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0afefc0b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0afefc0b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0afefc0b
Branch: refs/heads/master
Commit: 0afefc0bdca69b5c5f571fa93fe274f5d326ce2a
Parents: c3d7956 cb8d4e4
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jul 12 13:30:35 2016 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Jul 12 13:30:35 2016 +0200
----------------------------------------------------------------------
.../integration/SetMessagesMethodTest.java | 77 +++++++++++++++++++-
.../jmap/methods/MIMEMessageConverter.java | 7 +-
2 files changed, 79 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0afefc0b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org