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/11 14:09:20 UTC

james-project git commit: JAMES-1794 Handle attachments in alternative part

Repository: james-project
Updated Branches:
  refs/heads/master b87c93905 -> 03be8a460


JAMES-1794 Handle attachments in alternative part


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

Branch: refs/heads/master
Commit: 03be8a46003b2958da5cf74e9d7b19a71c79c3ad
Parents: b87c939
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Mon Jul 11 14:01:57 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Jul 11 14:36:49 2016 +0200

----------------------------------------------------------------------
 .../store/mail/model/impl/MessageParser.java    |  64 +++-
 .../mail/model/impl/MessageParserTest.java      |   7 +
 .../resources/eml/invitationEmailFromOP.eml     | 341 +++++++++++++++++++
 3 files changed, 401 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/03be8a46/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
index ff4e28c..ba407bb 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
@@ -45,7 +45,7 @@ import com.google.common.collect.ImmutableList;
 
 public class MessageParser {
 
-    private static final String MULTIPART_ALTERNATIVE = "multipart/alternative";
+    private static final String TEXT_MEDIA_TYPE = "text";
     private static final String CONTENT_TYPE = "Content-Type";
     private static final String CONTENT_ID = "Content-ID";
     private static final String CONTENT_DISPOSITION = "Content-Disposition";
@@ -60,7 +60,8 @@ public class MessageParser {
                 .getBody();
         try {
             if (body instanceof Multipart) {
-                return listAttachments((Multipart)body);
+                Multipart multipartBody = (Multipart)body;
+                return listAttachments(multipartBody, Context.fromSubType(multipartBody.getSubType()));
             } else {
                 return ImmutableList.of();
             }
@@ -69,14 +70,14 @@ public class MessageParser {
         }
     }
 
-    private List<MessageAttachment> listAttachments(Multipart multipart) throws IOException {
+    private List<MessageAttachment> listAttachments(Multipart multipart, Context context) throws IOException {
         ImmutableList.Builder<MessageAttachment> attachments = ImmutableList.builder();
         MessageWriter messageWriter = new DefaultMessageWriter();
         for (Entity entity : multipart.getBodyParts()) {
-            if (isMultipart(entity) && !isMainBody(entity)) {
-                attachments.addAll(listAttachments((Multipart) entity.getBody()));
+            if (isMultipart(entity)) {
+                attachments.addAll(listAttachments((Multipart) entity.getBody(), Context.fromEntity(entity)));
             } else {
-                if (isAttachment(entity)) {
+                if (isAttachment(entity, context)) {
                     attachments.add(retrieveAttachment(messageWriter, entity));
                 }
             }
@@ -152,10 +153,6 @@ public class MessageParser {
         return entity.isMultipart() && entity.getBody() instanceof Multipart;
     }
 
-    private boolean isMainBody(Entity entity) {
-        return entity.getMimeType().equalsIgnoreCase(MULTIPART_ALTERNATIVE);
-    }
-
     private boolean isInline(Optional<ContentDispositionField> contentDispositionField) {
         return contentDispositionField.transform(new Function<ContentDispositionField, Boolean>() {
             @Override
@@ -165,7 +162,10 @@ public class MessageParser {
         }).or(false);
     }
 
-    private boolean isAttachment(Entity part) {
+    private boolean isAttachment(Entity part, Context context) {
+        if (context == Context.BODY && isTextPart(part)) {
+            return false;
+        }
         return Optional.fromNullable(part.getDispositionType())
                 .transform(new Function<String, Boolean>() {
 
@@ -176,9 +176,51 @@ public class MessageParser {
                 }).isPresent();
     }
 
+    private boolean isTextPart(Entity part) {
+        Optional<ContentTypeField> contentTypeField = getContentTypeField(part);
+        if (contentTypeField.isPresent()) {
+            String mediaType = contentTypeField.get().getMediaType();
+            if (mediaType != null && mediaType.equals(TEXT_MEDIA_TYPE)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private byte[] getBytes(MessageWriter messageWriter, Body body) throws IOException {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         messageWriter.writeBody(body, out);
         return out.toByteArray();
     }
+
+    private static enum Context {
+        BODY,
+        OTHER;
+
+        private static final String ALTERNATIVE_SUB_TYPE = "alternative";
+        private static final String MULTIPART_ALTERNATIVE = "multipart/" + ALTERNATIVE_SUB_TYPE;
+
+        public static Context fromEntity(Entity entity) {
+            if (isMultipartAlternative(entity)) {
+                return BODY;
+            }
+            return OTHER;
+        }
+
+        public static Context fromSubType(String subPart) {
+            if (isAlternative(subPart)) {
+                return BODY;
+            }
+            return OTHER;
+        }
+
+        private static boolean isMultipartAlternative(Entity entity) {
+            return entity.getMimeType().equalsIgnoreCase(MULTIPART_ALTERNATIVE);
+        }
+
+        private static boolean isAlternative(String subPart) {
+            return subPart.equalsIgnoreCase(ALTERNATIVE_SUB_TYPE);
+        }
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/03be8a46/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
index b5d0f5c..ca5354e 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
@@ -161,4 +161,11 @@ public class MessageParserTest {
 
         assertThat(attachments).hasSize(1);
     }
+
+    @Test
+    public void getAttachementsShouldRetrieveAttachmentsWhenSomeAreInTheMultipartAlternative() throws Exception {
+        List<MessageAttachment> attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/invitationEmailFromOP.eml"));
+        
+        assertThat(attachments).hasSize(6);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/03be8a46/mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml b/mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
new file mode 100644
index 0000000..531c6af
--- /dev/null
+++ b/mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
@@ -0,0 +1,341 @@
+Return-Path: <rb...@linagora.com>
+Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
+	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
+	 Tue, 05 Jul 2016 17:33:42 +0200
+X-Sieve: CMU Sieve 2.2
+Received: from [127.0.0.1] (openpaas-rse.linagora.dc1 [172.16.18.188])
+	by alderaan.linagora.com (Postfix) with ESMTP id 1F72974B
+	for <dd...@linagora.com>; Tue,  5 Jul 2016 17:33:42 +0200 (CEST)
+Content-Type: multipart/mixed;
+ boundary="----sinikael-?=_1-14677328221140.595814419677481"
+From: rbevillard@linagora.com
+To: ddolcimascolo@linagora.com
+Subject: New event from Romain BEVILLARD: test event
+X-Mailer: nodemailer (1.3.4; +http://www.nodemailer.com;
+ SMTP/1.1.0[client:1.3.8])
+Date: Tue, 05 Jul 2016 15:33:42 +0000
+Message-Id: <14...@linagora.com>
+MIME-Version: 1.0
+
+------sinikael-?=_1-14677328221140.595814419677481
+Content-Type: multipart/alternative;
+ boundary="----sinikael-?=_2-14677328221140.595814419677481"
+
+------sinikael-?=_2-14677328221140.595814419677481
+Content-Type: multipart/related; type="text/html";
+ boundary="----sinikael-?=_3-14677328221140.595814419677481"
+
+------sinikael-?=_3-14677328221140.595814419677481
+Content-Type: text/html
+Content-Transfer-Encoding: base64
+
+PCFET0NUWVBFIGh0bWw+CjxodG1sIGNsYXNzPSJtYWlsIj4KICA8aGVhZD4KICAgIDxtZXRhIGNo
+YXJzZXQ9InV0Zi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1k
+ZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICA8c3R5bGU+QG1lZGlhIChtYXgtd2lk
+dGg6IDc2OHB4KSB7CiAgLmNvbnRlbnQgewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAg
+IGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDsKICB9Cn0KCiAgICA8L3N0eWxlPgogIDwvaGVh
+ZD4KICA8Ym9keSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsiPgogICAgPGRpdiBj
+bGFzcz0id3JhcHBlciIgc3R5bGU9IndpZHRoOiA3MDBweDsgbWFyZ2luLWxlZnQ6IGF1dG87IG1h
+cmdpbi1yaWdodDogYXV0bzsiPjxicj4KICAgICAgPGRpdiBjbGFzcz0ibWFpbC1jb250ZW50IiBz
+dHlsZT0icGFkZGluZzogMTBweCAxM3B4OyBib3JkZXItcmFkaXVzOiA1cHg7IHRleHQtYWxpZ246
+IGp1c3RpZnk7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+CiAgICAgICAgPHRhYmxlIHN0eWxl
+PSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTsgY29sb3I6ICMzMzMzMzM7
+Ij4KICAgICAgICAgIDx0ciBjbGFzcz0idGFibGUtaGVhZGVyIiBzdHlsZT0idGV4dC1hbGlnbjog
+cmlnaHQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDZkN2Q5OyI+CiAgICAgICAgICAgIDx0
+ZCBjb2xzcGFuPSIyIiBjbGFzcz0ibG9nbyIgc3R5bGU9InBhZGRpbmctYm90dG9tOiAxMHB4OyBw
+YWRkaW5nLXRvcDogNXB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICAgICAgICA8ZGl2
+PjxhIGhyZWY9Imh0dHBzOi8vZGV2Lm9wZW4tcGFhcy5vcmciPjxpbWcgc3JjPSJjaWQ6bG9nbyIg
+YWx0PSJvcGVuLXBhYXMgbG9nbyI+PC9hPjwvZGl2PgogICAgICAgICAgICA8L3RkPgogICAgICAg
+ICAgICA8dGQgY29sc3Bhbj0iMyIgY2xhc3M9Im9yZ2FuaXplciIgc3R5bGU9InBhZGRpbmctYm90
+dG9tOiAxMHB4OyBwYWRkaW5nLXRvcDogNXB4OyB0ZXh0LWFsaWduOiByaWdodDsgdHJhbnNmb3Jt
+OiB0cmFuc2xhdGUoODBweCk7IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoODBweCk7IC1t
+b3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoODBweCk7Ij4KICAgICAgICAgICAgICA8aDUgc3R5bGU9
+InBhZGRpbmc6IDA7IG1hcmdpbjogMDsiPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdp
+bjogMDsgcGFkZGluZzogMDsiPlJvbWFpbiBCRVZJTExBUkQgKDxzcGFuIGNsYXNzPSJzbWFsbCIg
+c3R5bGU9ImNvbG9yOiBncmV5OyI+PGEgaHJlZj0ibWFpbHRvOnJiZXZpbGxhcmRAbGluYWdvcmEu
+Y29tIj48aW1nIHNyYz0iY2lkOmVtYWlsIiBhbHQ9Ik9yZ2FuaXplciBtYWlsIiBzdHlsZT0ibWFy
+Z2luOiAwOyBwYWRkaW5nOiAwOyI+PC9hPik8L3NwYW4+PC9wPgogICAgICAgICAgICAgICAgPHAg
+Y2xhc3M9ImJpZyIgc3R5bGU9Im1hcmdpbjogMDsgcGFkZGluZzogMDsgZm9udC1zaXplOiAxLjNl
+bTsiPmhhcyBpbnZpdGVkIHlvdSB0byBhIG1lZXRpbmchPC9wPgogICAgICAgICAgICAgIDwvaDU+
+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iYXZhdGFyIGluZGVudC1y
+aWdodCIgc3R5bGU9InBhZGRpbmctYm90dG9tOiAxMHB4OyBwYWRkaW5nLXRvcDogNXB4OyB0ZXh0
+LWFsaWduOiByaWdodDsgcGFkZGluZy1yaWdodDogMTVweDsiPjxpbWcgc3JjPSJodHRwczovL2Rl
+di5vcGVuLXBhYXMub3JnL2FwaS9hdmF0YXJzP29iamVjdFR5cGU9dXNlciZhbXA7ZW1haWw9cmJl
+dmlsbGFyZEBsaW5hZ29yYS5jb20iIGFsdD0ib3JnYW5pemVyIGF2YXRhciIgd2lkdGg9IjQ1cHgi
+IGhlaWdodD0iNDJweCIgc3R5bGU9IndpZHRoOiA1NHB4OyBoZWlnaHQ6IDUwcHg7IHBhZGRpbmc6
+IDBweDsiPjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8
+dGggY29sc3Bhbj0iNiIgY2xhc3M9InRpdGxlIGluZGVudCIgc3R5bGU9ImZvbnQtc2l6ZTogMS4z
+ZW07IHBhZGRpbmctYm90dG9tOiAxMHB4OyBwYWRkaW5nLXRvcDogMjBweDsgdGV4dC1hbGlnbjog
+bGVmdDsgcGFkZGluZy1sZWZ0OiAxMHB4OyI+dGVzdCBldmVudDwvdGg+CiAgICAgICAgICA8L3Ry
+PgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImluZGVudCIgc3R5bGU9InBh
+ZGRpbmctdG9wOiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogMTBweDsgcGFkZGluZy1sZWZ0OiAxMHB4
+OyI+PGltZyBzcmM9ImNpZDpjbG9jayIgYWx0PSJGcm9tIj4KICAgICAgICAgICAgPC90ZD4KICAg
+ICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLXRvcDogMTBweDsgcGFkZGluZy1ib3R0b206IDEw
+cHg7Ij4KICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOiAwOyBwYWRkaW5nOiAwOyI+MDcv
+MDYvMjAxNjwvcD4KICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOiAwOyBwYWRkaW5nOiAw
+OyI+MTE6MDAgQU08L3A+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0i
+cGFkZGluZy10b3A6IDEwcHg7IHBhZGRpbmctYm90dG9tOiAxMHB4OyI+PGltZyBzcmM9ImNpZDpj
+aGVjayIgYWx0PSJUbyIgY2xhc3M9ImNoZWNrLXRyYW5zZm9ybSIgc3R5bGU9InRyYW5zZm9ybTog
+cm90YXRlKC05MGRlZyk7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsgLW1vei10
+cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOyI+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAg
+IDx0ZCBzdHlsZT0icGFkZGluZy10b3A6IDEwcHg7IHBhZGRpbmctYm90dG9tOiAxMHB4OyI+CiAg
+ICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjogMDsgcGFkZGluZzogMDsiPjA3LzA2LzIwMTY8
+L3A+CiAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjogMDsgcGFkZGluZzogMDsiPjEyOjAw
+IFBNPC9wPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQgY2xhc3M9InJlY3VycmVu
+Y2UiIHN0eWxlPSJwYWRkaW5nLXRvcDogMTBweDsgcGFkZGluZy1ib3R0b206IDEwcHg7Ij48L3Rk
+PgogICAgICAgICAgICA8dGQgY2xhc3M9ImluZGVudC1yaWdodCIgc3R5bGU9InBhZGRpbmctdG9w
+OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogMTBweDsgdGV4dC1hbGlnbjogcmlnaHQ7IHBhZGRpbmct
+cmlnaHQ6IDE1cHg7Ij48YSBocmVmPSJodHRwczovL2Rldi5vcGVuLXBhYXMub3JnLyMvY2FsZW5k
+YXIiPlNlZSBpbiBjYWxlbmRhcjwvYT48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0
+cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJpbmRlbnQiIHN0eWxlPSJwYWRkaW5nLXRvcDogMTBw
+eDsgcGFkZGluZy1ib3R0b206IDEwcHg7IHBhZGRpbmctbGVmdDogMTBweDsiPjxpbWcgc3JjPSJj
+aWQ6YWNjb3VudC1tdWx0aXBsZSIgYWx0PSJBdHRlbmRlZXMiPjwvdGQ+CiAgICAgICAgICAgIDx0
+ZCBjb2xzcGFuPSI1IiBzdHlsZT0icGFkZGluZy10b3A6IDEwcHg7IHBhZGRpbmctYm90dG9tOiAx
+MHB4OyI+PHNwYW4+CiAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuIGNsYXNzPSJzbWFsbCIgc3R5
+bGU9ImNvbG9yOiBncmV5OyI+cmJldmlsbGFyZEBsaW5hZ29yYS5jb208L3NwYW4+CiAgICAgICAg
+ICAgICAgICA8L2Rpdj48L3NwYW4+PHNwYW4+CiAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPkRh
+dmlkIERPTENJTUFTQ09MTyA8PHNwYW4gY2xhc3M9InNtYWxsIiBzdHlsZT0iY29sb3I6IGdyZXk7
+Ij5kZG9sY2ltYXNjb2xvQGxpbmFnb3JhLmNvbTwvc3Bhbj48L3NwYW4+PiwKICAgICAgICAgICAg
+ICAgIDwvZGl2Pjwvc3Bhbj4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAg
+ICAgICA8dHIgY2xhc3M9InRhYmxlLWZvb3RlciIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsg
+Zm9udC1zaXplOiAxLjJlbTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkNmQ3ZDk7Ij4KICAgICAg
+ICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJhdHRlbmQtcXVlc3Rpb24iIHN0eWxlPSJwYWRk
+aW5nLWJvdHRvbTogMTBweDsgcGFkZGluZy10b3A6IDIwcHg7IGNvbG9yOiBncmV5OyI+V2lsbCB5
+b3UgYXR0ZW5kID88L3RkPgogICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgc3R5bGU9InBhZGRp
+bmctYm90dG9tOiAxMHB4OyBwYWRkaW5nLXRvcDogMjBweDsiPjxhIGhyZWY9Imh0dHBzOi8vZGV2
+Lm9wZW4tcGFhcy5vcmcvY2FsZW5kYXIvYXBpL2NhbGVuZGFycy9ldmVudC9wYXJ0aWNpcGF0aW9u
+P2p3dD1leUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpTVXpJMU5pSjkuZXlKaGRIUmxibVJsWlVW
+dFlXbHNJam9pWkdSdmJHTnBiV0Z6WTI5c2IwQnNhVzVoWjI5eVlTNWpiMjBpTENKdmNtZGhibWw2
+WlhKRmJXRnBiQ0k2SW5KaVpYWnBiR3hoY21SQWJHbHVZV2R2Y21FdVkyOXRJaXdpZFdsa0lqb2la
+RFF4WTJVeE1qWXROV1U1WXkwME5XRTJMV0U1TnprdE5HSmpOV1JpTnpjNU1UUmxJaXdpWTJGc1pX
+NWtZWEpWVWtraU9pSmxkbVZ1ZEhNaUxDSmhZM1JwYjI0aU9pSkJRME5GVUZSRlJDSXNJbWxoZENJ
+Nk1UUTJOemN6TWpneU1YMC5kalVSSTR0LV9FSUpaTVVnNmM4TjRBeEpUYU9SYlZrQXFNSlVKRV9m
+VVRUb3ZneVV1TDhXbWExWlpqVnFjNDZzR1JBNktwWUp6ZHNUVmVzX1JiTDRwUkF5V0JvZlRPalFP
+Sk0zbU42OVVYcGNwQlZYT09JaXVXc1hiWG5JUUJwbzk1NXdUN2VvZlAtdDVOaGdnZkZvSFdTaVpj
+ZWl4VU5oTWZobWFYdm9iRGdWcVc1MVlvZ0lXQ2swWnR5WGdXY1h6OW9sYWFYQjlwYl9aNmZYbHJ4
+UGJTRFhyWGNLQUUxMmtlS3p0cnhsYkRRbmpISElMZEkteFFjV3BEVm9qbi01S3RYYjZEN3lHbzFL
+X2QtMlIxLXY3UXQ1dUk3eFJkVjdILUtsYkJMdGZGU2hkU1Q5ak1GTkFscWZySk0zX21MMDJWYkRp
+dmtoeGNhY0RwT3pCTXQxQ3ciIGNsYXNzPSJncmVlbiIgc3R5bGU9ImNvbG9yOiBncmVlbjsgdGV4
+dC1kZWNvcmF0aW9uOiBub25lOyI+WWVzPC9hPjwvdGQ+CiAgICAgICAgICAgIDx0ZCBjb2xzcGFu
+PSIxIiBzdHlsZT0icGFkZGluZy1ib3R0b206IDEwcHg7IHBhZGRpbmctdG9wOiAyMHB4OyI+PGEg
+aHJlZj0iaHR0cHM6Ly9kZXYub3Blbi1wYWFzLm9yZy9jYWxlbmRhci9hcGkvY2FsZW5kYXJzL2V2
+ZW50L3BhcnRpY2lwYXRpb24/and0PWV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlK
+OS5leUpoZEhSbGJtUmxaVVZ0WVdsc0lqb2laR1J2YkdOcGJXRnpZMjlzYjBCc2FXNWhaMjl5WVM1
+amIyMGlMQ0p2Y21kaGJtbDZaWEpGYldGcGJDSTZJbkppWlhacGJHeGhjbVJBYkdsdVlXZHZjbUV1
+WTI5dElpd2lkV2xrSWpvaVpEUXhZMlV4TWpZdE5XVTVZeTAwTldFMkxXRTVOemt0TkdKak5XUmlO
+emM1TVRSbElpd2lZMkZzWlc1a1lYSlZVa2tpT2lKbGRtVnVkSE1pTENKaFkzUnBiMjRpT2lKVVJV
+NVVRVlJKVmtVaUxDSnBZWFFpT2pFME5qYzNNekk0TWpGOS5pSFBrV0lLUTZfazBGMlNMd0ZWMUVI
+Sk9UVml3NGRvYTJhSzFMVHRQZTRpUktRVmprUTFDMDUzYzFWUDJOeVd1SUhwQU1ZWm0wbEd5N2pM
+TmZ1Q0Qzek85QUpvLUVqcjF2Y3VqN3BpTEhHNTYyWVdfcnh1bmgtNlpBV0QzNS1taTZhbkFpVGFG
+U2NlZWFIOERDM1RiTzdHbEw5TXZZcEpVWnBFZU1BTWM4NnRLN2I5eDBaWlpNN2pWTmpJVjJtdndr
+OFBSdW1qSDRNVTYzTnZnUFlkdXhLTm0xMHV0RlhFejBtbGFXZnliWWExdng1SlFZekJPaGlHYWF4
+UGp2bllSOU9pc05nRkVUcVhsaWJyd1VRS01GbTFXakczeEN0V01vRVczMGc2czM1WHVOdDZEaFM0
+LVdCUTZ1Zm0wX0J1Yk14VWtJaVNjUko2dGZVNENwNGxJQXciIGNsYXNzPSJibHVlIiBzdHlsZT0i
+Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsiPk1heWJlPC9hPjwvdGQ+CiAgICAg
+ICAgICAgIDx0ZCBjb2xzcGFuPSIxIiBzdHlsZT0icGFkZGluZy1ib3R0b206IDEwcHg7IHBhZGRp
+bmctdG9wOiAyMHB4OyI+PGEgaHJlZj0iaHR0cHM6Ly9kZXYub3Blbi1wYWFzLm9yZy9jYWxlbmRh
+ci9hcGkvY2FsZW5kYXJzL2V2ZW50L3BhcnRpY2lwYXRpb24/and0PWV5SjBlWEFpT2lKS1YxUWlM
+Q0poYkdjaU9pSlNVekkxTmlKOS5leUpoZEhSbGJtUmxaVVZ0WVdsc0lqb2laR1J2YkdOcGJXRnpZ
+MjlzYjBCc2FXNWhaMjl5WVM1amIyMGlMQ0p2Y21kaGJtbDZaWEpGYldGcGJDSTZJbkppWlhacGJH
+eGhjbVJBYkdsdVlXZHZjbUV1WTI5dElpd2lkV2xrSWpvaVpEUXhZMlV4TWpZdE5XVTVZeTAwTldF
+MkxXRTVOemt0TkdKak5XUmlOemM1TVRSbElpd2lZMkZzWlc1a1lYSlZVa2tpT2lKbGRtVnVkSE1p
+TENKaFkzUnBiMjRpT2lKRVJVTk1TVTVGUkNJc0ltbGhkQ0k2TVRRMk56Y3pNamd5TVgwLm5UbENE
+ZUNEakozbkQxWlQyZ1pkbFFTV2RvVUszSXk0TGxxNml5S1Nja2o4S1RPb1FaWWJfSmVWZXdfUEtr
+MnJQV21aOTNXTUhNLVNjM2xteC1nazlRUEl5X0psSVFYOGp6cDYwM3VZQWtoVW5FcG5UVm5DN0FN
+RTM2YjVkamxZYVdSRmlGcEQ3eWIzNzVOTHF3RkRiQ0MtTzFTYW5CUmRuLXZ4NXdnUXprMnJKVGw3
+WlktNkxjc2VxeWd1c3BDbWdnaEhMMlNuR0U0SlI5Um13VG9sMTVzUzdxVjZpdlJFVEYwejVyaTE4
+RE5HVGJLdTlwazJEZXg3b29xd0NJR3ZlLUpTVXJiSEtiYVgtZktpZHNpc1YwNXhnNUlHdzhjRE42
+aU1MQjA1cm8wUXRZZzJBOWdEd0VnbGhkZGZaUU1tSGF1cXdjRmU0TGlIX3lDbExlRVZGdyIgY2xh
+c3M9InJlZCIgc3R5bGU9ImNvbG9yOiByZWQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsiPk5vPC9h
+PjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZGl2PgogICAg
+ICA8Zm9vdGVyIHN0eWxlPSJtYXJnaW4tcmlnaHQ6IDNweDsgbWFyZ2luLXRvcDogMTBweDsiPgog
+ICAgICAgIDxkaXYgY2xhc3M9ImZvb3RlciIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PGEg
+aHJlZj0iaHR0cHM6Ly9kZXYub3Blbi1wYWFzLm9yZy8jL2NhbGVuZGFyLzU3NjhmYTYyYmQxY2Vi
+Y2YyZWI2OTM5MC9ldmVudC9kNDFjZTEyNi01ZTljLTQ1YTYtYTk3OS00YmM1ZGI3NzkxNGUvY29u
+c3VsdCI+TW9yZSBkZXRhaWxzLi4uPC9hPjwvZGl2PgogICAgICA8L2Zvb3Rlcj4KICAgIDwvZGl2
+PgogIDwvYm9keT4KPC9odG1sPg==
+------sinikael-?=_3-14677328221140.595814419677481
+Content-Type: image/png; name=account-multiple.png
+Content-Id: <account-multiple>
+Content-Disposition: inline; filename=account-multiple.png
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
+WXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAwAAAAMADO7oxXAAABRElEQVRo3u3XMUoDQRTG8X9C
+iKSxFoKlYGNn7SVS24pN7DyEnTdIZ+MhAjbbCAmIlRAIHiCwGOyMzYzEdRN38mUG17wfvGZ3vnkz
+zcwuGGOMMaZe2sAVkAFvrjL3rJ0gL+kCI2CxokZuTKy8ZA8Yr2nua+zGbjsv61do7qsfIS/LAhaQ
+RcjL8oAF5BHypZoxdppSyAaexbFqXt7AnThWzctqf4xCzS8yr9afEsb8N42K4zrAKXAGnABHwCGw
+797nwCvwAjwBD8Aj8L5mzkvgVsj/qgX0gHtgTvXvGF9zl+25ucqcAx9CvlQTuAAmGyx6VU3cnGU3
+/42Y/6YLDLe48GIN+XlRtYCpkP9yEDCRUlPXa9m1mAdgkGDxvgaF3sdiHoBZwg3MCr07m+aXj9EF
+aRWP8ND+DdixP7I/yTZgjDHGmF32CXySfkMcBQhTAAAAAElFTkSuQmCC
+------sinikael-?=_3-14677328221140.595814419677481
+Content-Type: image/png; name=check.png
+Content-Id: <check>
+Content-Disposition: inline; filename=check.png
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
+WXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAwAAAAMADO7oxXAAAAuklEQVRo3u3UsQ2DMBRF0ZtM
+wDAJZDJa2CtD4Q1IAUgkcjCY4vujdyU3ND4PIUAppZRS6pI9gNYacQY/ACPQWWPO4Jfzd8TdWhvB
+v4Hq5/nNGrYXH/h+8yPQW8OELznX+Kfwwh+vFj6zlumP4RLfzZcNmSOKwC8nHBxh/s33kcsD058k
+VWONT42oPeBzRhSHT41oPOBTI17zKRqfGuECvzXCDX7PiOLxWyPc4GMj3OHXI9zilVJKKZXbB6A3
+sIWtLgl8AAAAAElFTkSuQmCC
+------sinikael-?=_3-14677328221140.595814419677481
+Content-Type: image/png; name=clock.png
+Content-Id: <clock>
+Content-Disposition: inline; filename=clock.png
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
+WXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAwAAAAMADO7oxXAAACr0lEQVRo3u2Zv08UQRTHP55w
+idIhFOp1JvIHiHdURu0tSbA/aOwsLpRWYo1KKGyNJNoQEjv9B4wxkc4fhWIgARITL6gUosW+0/Ht
+3N3M7NyuG++bTLG3+/1+31uGmfdmYYgh/m8ci6RTAS4CV4ELwHmgBozJ/QPgE/AGeAk8B14AR0W/
+gBpwB9gCfnqOLeHWigh8ArgPHAYErsehaE3kFfx1YC9C4HrsifbAMAqs9gigDTwCFoA6MAlUZUzK
+bwvyTLuHziowEjv4k8BGF8O3QFOe8dFrCtemueGp1/fNr1tMvgEtuZ9FuyVaWn89o/Zv2KbNNjAT
+6w2J1jb26ZQJcxbRTQaz9NVEW/vNhQqeAvaV2M6AgjeT2FGe+xKLN1aU0Heg4cE3uT5oiJfJXwl5
+E3qTanlqhCaAeOnNzusvv6QE3uG/ImRJYFQ8TY0lV3KFdG3TDAgiSwKIp66dKi7EGUX8wp+qMs8E
+xsTb1Ekt3baMLqvrpyTlcN44EO9esVkTmFbXzwoIvpu3js2awJS6fl1gAtp7yoWkN6/QOj3r/wDi
+rTe1vtDrf7XABKqk94O/4LQsRUA9Jx9gMFPoB/AgQCtoCumK0Kf+MXENeK+0PgM3cO+4Goq/6UJ6
+rEjzgQkAnABuAV+V5ivgkgN/XvGeuJguKtJahgQ6OEe6JT0CHgKne/DWFGfRxaxOnFLCBtu0agM3
+Lc86lRI2VICPihhSzHWDbVrZWsfgYg7gtiKHlNP90JlWu8C4upepnAY4Q7or8m1ofLw0Mjc0AHeV
+iG9LGYooLSUkjfSuEipVUw8wq8RKdazSwbJFtDQHWwDHKfnRIiRrd2kPdzsYAe51Mfznj9dNzFLS
+Dxwmxkn2Cb1eh4zcPzGZOEuyxX8ICDzKR77Yn1mvkBx9lOYz6xBDlB2/AIYi3dBcDTVMAAAAAElF
+TkSuQmCC
+------sinikael-?=_3-14677328221140.595814419677481
+Content-Type: image/png; name=email.png
+Content-Id: <email>
+Content-Disposition: inline; filename=email.png
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAhElEQVR4Ab3OsW2DUBiF0SO91iPg
+zsIDMIi9iXENBSN4EzOIs0IUkg1Ci/Sb6klIkC7crz3Ftf/OBrHRoARa4WOVvIQG6ISkNi7Ar5sk
+dBnpFXN9Jk+Fo36JwqiWXP34dpHcjWKB8ofKYa7KH1dQmDzmJrGNcv+J2j9RA5S+Nsmnk733Blrx
+n3mshZR3AAAAAElFTkSuQmCC
+------sinikael-?=_3-14677328221140.595814419677481
+Content-Type: image/png; name=logo.png
+Content-Id: <logo>
+Content-Disposition: inline; filename=logo.png
+Content-Transfer-Encoding: base64
+
+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
+dhP8HwMsQYPp8vZfAAAAAElFTkSuQmCC
+------sinikael-?=_3-14677328221140.595814419677481--
+
+------sinikael-?=_2-14677328221140.595814419677481
+Content-Type: text/calendar; charset=UTF-8; method=REQUEST
+Content-Transfer-Encoding: base64
+
+QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL1NhYnJlLy9TYWJyZSBWT2Jq
+ZWN0IDQuMS4wLy9FTg0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6UkVRVUVTVA0KQkVHSU46
+VlRJTUVaT05FDQpUWklEOkV1cm9wZS9CZXJsaW4NCkJFR0lOOkRBWUxJR0hUDQpUWk9GRlNFVEZS
+T006KzAxMDANClRaT0ZGU0VUVE86KzAyMDANClRaTkFNRTpDRVNUDQpEVFNUQVJUOjE5NzAwMzI5
+VDAyMDAwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7QllNT05USD0zO0JZREFZPS0xU1UNCkVORDpEQVlM
+SUdIVA0KQkVHSU46U1RBTkRBUkQNClRaT0ZGU0VURlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEw
+MA0KVFpOQU1FOkNFVA0KRFRTVEFSVDoxOTcwMTAyNVQwMzAwMDANClJSVUxFOkZSRVE9WUVBUkxZ
+O0JZTU9OVEg9MTA7QllEQVk9LTFTVQ0KRU5EOlNUQU5EQVJEDQpFTkQ6VlRJTUVaT05FDQpCRUdJ
+TjpWRVZFTlQNClVJRDpkNDFjZTEyNi01ZTljLTQ1YTYtYTk3OS00YmM1ZGI3NzkxNGUNClRSQU5T
+UDpPUEFRVUUNCkRUU1RBUlQ7VFpJRD1FdXJvcGUvQmVybGluOjIwMTYwNzA2VDExMDAwMA0KRFRF
+TkQ7VFpJRD1FdXJvcGUvQmVybGluOjIwMTYwNzA2VDEyMDAwMA0KT1JHQU5JWkVSO0NOPVJvbWFp
+biBCRVZJTExBUkQ6bWFpbHRvOnJiZXZpbGxhcmRAbGluYWdvcmEuY29tDQpTVU1NQVJZOnRlc3Qg
+ZXZlbnQNCkFUVEVOREVFO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9RkFMU0U7Uk9MRT1DSEFJUjpt
+YWlsdG86cmJldmlsbGFyZEBsaW5hZ29yYQ0KIC5jb20NCkFUVEVOREVFO1BBUlRTVEFUPU5FRURT
+LUFDVElPTjtSU1ZQPVRSVUU7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7Q049RGF2aWQgRE9MQw0KIElN
+QVNDT0xPOm1haWx0bzpkZG9sY2ltYXNjb2xvQGxpbmFnb3JhLmNvbQ0KRU5EOlZFVkVOVA0KRU5E
+OlZDQUxFTkRBUg0K
+------sinikael-?=_2-14677328221140.595814419677481--
+
+------sinikael-?=_1-14677328221140.595814419677481
+Content-Type: application/ics; name=meeting.ics
+Content-Disposition: attachment; filename=meeting.ics
+Content-Transfer-Encoding: base64
+
+QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL1NhYnJlLy9TYWJyZSBWT2Jq
+ZWN0IDQuMS4wLy9FTg0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6UkVRVUVTVA0KQkVHSU46
+VlRJTUVaT05FDQpUWklEOkV1cm9wZS9CZXJsaW4NCkJFR0lOOkRBWUxJR0hUDQpUWk9GRlNFVEZS
+T006KzAxMDANClRaT0ZGU0VUVE86KzAyMDANClRaTkFNRTpDRVNUDQpEVFNUQVJUOjE5NzAwMzI5
+VDAyMDAwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7QllNT05USD0zO0JZREFZPS0xU1UNCkVORDpEQVlM
+SUdIVA0KQkVHSU46U1RBTkRBUkQNClRaT0ZGU0VURlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEw
+MA0KVFpOQU1FOkNFVA0KRFRTVEFSVDoxOTcwMTAyNVQwMzAwMDANClJSVUxFOkZSRVE9WUVBUkxZ
+O0JZTU9OVEg9MTA7QllEQVk9LTFTVQ0KRU5EOlNUQU5EQVJEDQpFTkQ6VlRJTUVaT05FDQpCRUdJ
+TjpWRVZFTlQNClVJRDpkNDFjZTEyNi01ZTljLTQ1YTYtYTk3OS00YmM1ZGI3NzkxNGUNClRSQU5T
+UDpPUEFRVUUNCkRUU1RBUlQ7VFpJRD1FdXJvcGUvQmVybGluOjIwMTYwNzA2VDExMDAwMA0KRFRF
+TkQ7VFpJRD1FdXJvcGUvQmVybGluOjIwMTYwNzA2VDEyMDAwMA0KT1JHQU5JWkVSO0NOPVJvbWFp
+biBCRVZJTExBUkQ6bWFpbHRvOnJiZXZpbGxhcmRAbGluYWdvcmEuY29tDQpTVU1NQVJZOnRlc3Qg
+ZXZlbnQNCkFUVEVOREVFO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9RkFMU0U7Uk9MRT1DSEFJUjpt
+YWlsdG86cmJldmlsbGFyZEBsaW5hZ29yYQ0KIC5jb20NCkFUVEVOREVFO1BBUlRTVEFUPU5FRURT
+LUFDVElPTjtSU1ZQPVRSVUU7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7Q049RGF2aWQgRE9MQw0KIElN
+QVNDT0xPOm1haWx0bzpkZG9sY2ltYXNjb2xvQGxpbmFnb3JhLmNvbQ0KRU5EOlZFVkVOVA0KRU5E
+OlZDQUxFTkRBUg0K
+------sinikael-?=_1-14677328221140.595814419677481--


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