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 bt...@apache.org on 2017/06/06 02:04:24 UTC
[1/6] james-project git commit: JAMES-1900 HasHeader should support
encoded folded values
Repository: james-project
Updated Branches:
refs/heads/master 173303649 -> 747e67154
JAMES-1900 HasHeader should support encoded folded values
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4254ac92
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4254ac92
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4254ac92
Branch: refs/heads/master
Commit: 4254ac92b6743c252edc5b3aa4e7522b7d6e8aa6
Parents: 1733036
Author: benwa <bt...@linagora.com>
Authored: Fri May 5 10:10:38 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Jun 5 20:23:28 2017 +0700
----------------------------------------------------------------------
.../james/transport/matchers/HasHeader.java | 11 +-
.../james/transport/matchers/HasHeaderTest.java | 29 ++++
.../src/test/resources/mime/headerFolded.mime | 154 +++++++++++++++++++
3 files changed, 193 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/4254ac92/mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeader.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeader.java b/mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeader.java
index c8484d9..d982a61 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeader.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeader.java
@@ -20,6 +20,9 @@
package org.apache.james.transport.matchers;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
+import org.apache.james.mime4j.util.MimeUtil;
import org.apache.mailet.Mail;
import org.apache.mailet.MailAddress;
import org.apache.mailet.base.GenericMatcher;
@@ -40,6 +43,12 @@ import java.util.StringTokenizer;
*/
public class HasHeader extends GenericMatcher {
+ private static String sanitizeHeaderField(String headerName) {
+ return DecoderUtil.decodeEncodedWords(
+ MimeUtil.unfold(headerName),
+ DecodeMonitor.SILENT);
+ }
+
private static final String CONDITION_SEPARATOR = "+";
private static final String HEADER_VALUE_SEPARATOR = "=";
@@ -75,7 +84,7 @@ public class HasHeader extends GenericMatcher {
String[] headerArray = mimeMessage.getHeader(headerName);
if (headerArray != null && headerArray.length > 0) {
for (String value : headerArray) {
- if (headerValue.equals(value)) {
+ if (headerValue.equals(sanitizeHeaderField(value))) {
return true;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4254ac92/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java b/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
index 49dfc9b..c6e7af0 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
@@ -33,6 +33,7 @@ import org.apache.mailet.Matcher;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMatcherConfig;
import org.apache.mailet.base.test.MailUtil;
+import org.apache.mailet.base.test.MimeMessageBuilder;
import org.junit.Before;
import org.junit.Test;
@@ -131,6 +132,34 @@ public class HasHeaderTest {
}
@Test
+ public void matchShouldSupportFoldedHeaders() throws Exception {
+ matcher.init(FakeMatcherConfig.builder()
+ .matcherName("HasHeader")
+ .condition("From=aduprat <du...@linagora.com>")
+ .build());
+
+ Mail mail = MailUtil.createMockMail2Recipients(
+ MimeMessageBuilder.mimeMessageFromStream(
+ ClassLoader.getSystemResourceAsStream("mime/headerFolded.mime")));
+
+ assertThat(matcher.match(mail)).containsAll(mail.getRecipients());
+ }
+
+ @Test
+ public void matchShouldSupportEncodedHeaders() throws Exception {
+ matcher.init(FakeMatcherConfig.builder()
+ .matcherName("HasHeader")
+ .condition("To=Benoît TELLIER <te...@linagora.com>")
+ .build());
+
+ Mail mail = MailUtil.createMockMail2Recipients(
+ MimeMessageBuilder.mimeMessageFromStream(
+ ClassLoader.getSystemResourceAsStream("mime/gmail.mime")));
+
+ assertThat(matcher.match(mail)).containsAll(mail.getRecipients());
+ }
+
+ @Test
public void matchShouldNotMatchMailsWithNoHeaderWhenValueNotSpecified() throws MessagingException {
matcher.init(FakeMatcherConfig.builder()
.matcherName("HasHeader")
http://git-wip-us.apache.org/repos/asf/james-project/blob/4254ac92/mailet/standard/src/test/resources/mime/headerFolded.mime
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/resources/mime/headerFolded.mime b/mailet/standard/src/test/resources/mime/headerFolded.mime
new file mode 100644
index 0000000..f8f44ce
--- /dev/null
+++ b/mailet/standard/src/test/resources/mime/headerFolded.mime
@@ -0,0 +1,154 @@
+Return-Path: <ad...@linagora.com>
+Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
+ (CET) (aduprat@linagora.com)
+To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <te...@linagora.com>
+From: aduprat
+ <du...@linagora.com>
+X-Forwarded-Message-Id: <00...@google.com>
+Message-ID: <f1...@linagora.com>
+Date: Thu, 19 Jan 2017 20:36:37 +0100
+MIME-Version: 1.0
+In-Reply-To: <00...@google.com>
+Content-Type: multipart/mixed;
+ boundary="------------17D96D411CBD55D8239A8C1F"
+
+This is a multi-part message in MIME format.
+--------------17D96D411CBD55D8239A8C1F
+Content-Type: multipart/alternative;
+ boundary="------------64D716A3DDAEC185D3E67448"
+
+
+--------------64D716A3DDAEC185D3E67448
+Content-Type: text/plain; charset=utf-8; format=flowed
+Content-Transfer-Encoding: 8bit
+
+
+
+
+-------- Message transéré --------
+Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
+(CET) (duprat@linagora.com)
+Date : Thu, 19 Jan 2017 19:18:23 +0000
+De : Antoine Duprat <du...@gmail.com>
+Répondre à : antduprat@gmail.com
+Pour : aduprat@linagora.com
+
+
+
+
+--------------64D716A3DDAEC185D3E67448
+Content-Type: text/html; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+<html>
+ <head>
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ </head>
+ <body bgcolor="#FFFFFF" text="#000000">
+ <p><br>
+ </p>
+ <div class="moz-forward-container"><br>
+ <br>
+ -------- Message transéré --------
+ <table class="moz-email-headers-table" border="0" cellpadding="0"
+ cellspacing="0">
+ <tbody>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Sujet :
+ </th>
+ <td>Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 -
+ 15:00 (CET) (<a class="moz-txt-link-abbreviated" href="mailto:aduprat@linagora.com">aduprat@linagora.com</a>)</td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Date : </th>
+ <td>Thu, 19 Jan 2017 19:18:23 +0000</td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">De : </th>
+ <td>Antoine Duprat <a class="moz-txt-link-rfc2396E" href="mailto:antduprat@gmail.com"><antduprat@gmail.com></a></td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Répondre
+ Ã Â : </th>
+ <td><a class="moz-txt-link-abbreviated" href="mailto:antduprat@gmail.com">antduprat@gmail.com</a></td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Pour : </th>
+ <td><a class="moz-txt-link-abbreviated" href="mailto:aduprat@linagora.com">aduprat@linagora.com</a></td>
+ </tr>
+ </tbody>
+ </table>
+ <br>
+ <br>
+ </div>
+ </body>
+</html>
+
+--------------64D716A3DDAEC185D3E67448--
+
+--------------17D96D411CBD55D8239A8C1F
+Content-Type: text/calendar;
+ name="Portion de message joint"
+Content-Transfer-Encoding: 8bit
+Content-Disposition: attachment;
+ filename="Portion de message joint"
+
+BEGIN:VCALENDAR
+PRODID:-//Google Inc//Google Calendar 70.9054//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:REQUEST
+BEGIN:VEVENT
+DTSTART:20170120T130000Z
+DTEND:20170120T140000Z
+DTSTAMP:20170119T191823Z
+ORGANIZER;CN=Antoine Duprat:mailto:duprat@gmail.com
+UID:ah86k5m342bmcrbe9khkkhln00@google.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
+ TRUE;CN=aduprat@linagora.com;X-NUM-GUESTS=0:mailto:duprat@linagora.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE
+ ;CN=Antoine Duprat;X-NUM-GUESTS=0:mailto:duprat@gmail.com
+CREATED:20170119T191823Z
+DESCRIPTION:Affichez votre evenement sur la page https://www.google.com/cal
+ endar/event?action=VIEW&eid=YWg4Nms1bTM0MmJtY3JiZTlraGtraGxuMDAgYWR1cHJhdEB
+ saW5hZ29yYS5jb20&tok=MTkjYW50ZHVwcmF0QGdtYWlsLmNvbTg1OTM5NWM4MGRlYmE1YTI4Nz
+ RjN2UyNjU0M2YyZmQ4NzRkNThhYTQ&ctz=Europe/Paris&hl=fr.
+LAST-MODIFIED:20170119T191823Z
+LOCATION:
+SEQUENCE:0
+STATUS:CONFIRMED
+SUMMARY:
+TRANSP:OPAQUE
+END:VEVENT
+END:VCALENDAR
+
+
+--------------17D96D411CBD55D8239A8C1F
+Content-Type: application/ics;
+ name="invite.ics"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="invite.ics"
+
+QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFy
+IDcwLjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6
+UkVRVUVTVA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMTcwMTIwVDEzMDAwMFoNCkRURU5E
+OjIwMTcwMTIwVDE0MDAwMFoNCkRUU1RBTVA6MjAxNzAxMTlUMTkxODIzWg0KT1JHQU5JWkVS
+O0NOPUFudG9pbmUgRHVwcmF0Om1haWx0bzphbnRkdXByYXRAZ21haWwuY29tDQpVSUQ6YWg4
+Nms1bTM0MmJtY3JiZTlraGtraGxuMDBAZ29vZ2xlLmNvbQ0KQVRURU5ERUU7Q1VUWVBFPUlO
+RElWSURVQUw7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7UEFSVFNUQVQ9TkVFRFMtQUNUSU9OO1JT
+VlA9DQogVFJVRTtDTj1hZHVwcmF0QGxpbmFnb3JhLmNvbTtYLU5VTS1HVUVTVFM9MDptYWls
+dG86YWR1cHJhdEBsaW5hZ29yYS5jb20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JP
+TEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9VFJVRQ0KIDtDTj1B
+bnRvaW5lIER1cHJhdDtYLU5VTS1HVUVTVFM9MDptYWlsdG86YW50ZHVwcmF0QGdtYWlsLmNv
+bQ0KQ1JFQVRFRDoyMDE3MDExOVQxOTE4MjNaDQpERVNDUklQVElPTjpBZmZpY2hleiB2b3Ry
+ZSDDqXbDqW5lbWVudCBzdXIgbGEgcGFnZSBodHRwczovL3d3dy5nb29nbGUuY29tL2NhbA0K
+IGVuZGFyL2V2ZW50P2FjdGlvbj1WSUVXJmVpZD1ZV2c0Tm1zMWJUTTBNbUp0WTNKaVpUbHJh
+R3RyYUd4dU1EQWdZV1IxY0hKaGRFQg0KIHNhVzVoWjI5eVlTNWpiMjAmdG9rPU1Ua2pZVzUw
+WkhWd2NtRjBRR2R0WVdsc0xtTnZiVGcxT1RNNU5XTTRNR1JsWW1FMVlUSTROeg0KIFJqTjJV
+eU5qVTBNMll5Wm1RNE56UmtOVGhoWVRRJmN0ej1FdXJvcGUvUGFyaXMmaGw9ZnIuDQpMQVNU
+LU1PRElGSUVEOjIwMTcwMTE5VDE5MTgyM1oNCkxPQ0FUSU9OOg0KU0VRVUVOQ0U6MA0KU1RB
+VFVTOkNPTkZJUk1FRA0KU1VNTUFSWToNClRSQU5TUDpPUEFRVUUNCkVORDpWRVZFTlQNCkVO
+RDpWQ0FMRU5EQVINCg==
+--------------17D96D411CBD55D8239A8C1F--
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[3/6] james-project git commit: JAMES-1900 In memory message search
should unfold and decode headers
Posted by bt...@apache.org.
JAMES-1900 In memory message search should unfold and decode headers
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/beefb43b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/beefb43b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/beefb43b
Branch: refs/heads/master
Commit: beefb43bd3c71701d189e9c70b385394b1f4f680
Parents: bf5a68c
Author: benwa <bt...@linagora.com>
Authored: Fri May 5 10:39:39 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Jun 5 20:24:51 2017 +0700
----------------------------------------------------------------------
.../james/mailbox/store/search/MessageSearches.java | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/beefb43b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
index 140b34b..7bb255c 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
@@ -51,6 +51,8 @@ import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.search.comparator.CombinedComparator;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.MimeIOException;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.dom.Message;
import org.apache.james.mime4j.dom.address.Address;
import org.apache.james.mime4j.dom.address.AddressList;
@@ -67,6 +69,7 @@ import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.apache.james.mime4j.message.DefaultMessageWriter;
import org.apache.james.mime4j.message.HeaderImpl;
import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.util.MimeUtil;
import org.apache.james.mime4j.utils.search.MessageMatcher;
import com.google.common.base.Function;
@@ -88,6 +91,12 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
.setMaxLineLen(-1)
.build();
+ private static String sanitizeHeaderField(String headerValue) {
+ return DecoderUtil.decodeEncodedWords(
+ MimeUtil.unfold(headerValue),
+ DecodeMonitor.SILENT);
+ }
+
private Iterator<MailboxMessage> messages;
private SearchQuery query;
private MailboxSession session;
@@ -470,7 +479,7 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
for (Header header : headers) {
String name = header.getName();
if (headerName.equalsIgnoreCase(name)) {
- String value = header.getValue();
+ String value = sanitizeHeaderField(header.getValue());
if (value != null) {
if (value.toUpperCase(Locale.US).contains(text)) {
result = true;
@@ -520,7 +529,7 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
for (Header header : headers) {
String name = header.getName();
if (headerName.equalsIgnoreCase(name)) {
- value = header.getValue();
+ value = sanitizeHeaderField(header.getValue());
break;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/6] james-project git commit: JAMES-1900 JSieve header instruction
should unfold and decode headers
Posted by bt...@apache.org.
JAMES-1900 JSieve header instruction should unfold and decode headers
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/110db27d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/110db27d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/110db27d
Branch: refs/heads/master
Commit: 110db27d6831b9089cb1237d104c04806e78223d
Parents: beefb43
Author: benwa <bt...@linagora.com>
Authored: Fri May 5 11:05:05 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Jun 5 20:24:51 2017 +0700
----------------------------------------------------------------------
.../mailets/delivery/SieveIntegrationTest.java | 20 +++
.../mailets/src/test/resources/eml/gmail.eml | 154 +++++++++++++++++++
.../mailets/delivery/headerEncodedFolded.script | 26 ++++
server/pom.xml | 2 +-
4 files changed, 201 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/110db27d/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
index 04a4b6c..8d7c43b 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -44,6 +44,7 @@ import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
@@ -264,6 +265,25 @@ public class SieveIntegrationTest {
assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
}
+ @Ignore("Waiting for JAMES-1900 JSieve part to be merged")
+ @Test
+ public void headerInstructionShouldSupportFoldedEncodedHeaders() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/headerEncodedFolded.script");
+
+ FakeMail mail = FakeMail.builder()
+ .mimeMessage(MimeMessageBuilder.mimeMessageFromStream(
+ ClassLoader.getSystemResourceAsStream("eml/gmail.eml")))
+ .state(Mail.DEFAULT)
+ .recipient(new MailAddress(RECEIVER_DOMAIN_COM))
+ .sender(new MailAddress("sender@any.com"))
+ .build();
+ testee.service(mail);
+
+ assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + LOCAL_PART))
+ .isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
+ }
+
+
@Test
public void headerScriptShouldWorkIfHeaderIsPresent() throws Exception {
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/header.script");
http://git-wip-us.apache.org/repos/asf/james-project/blob/110db27d/server/mailet/mailets/src/test/resources/eml/gmail.eml
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/resources/eml/gmail.eml b/server/mailet/mailets/src/test/resources/eml/gmail.eml
new file mode 100644
index 0000000..1b95cba
--- /dev/null
+++ b/server/mailet/mailets/src/test/resources/eml/gmail.eml
@@ -0,0 +1,154 @@
+Return-Path: <ad...@linagora.com>
+Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
+ (CET) (aduprat@linagora.com)
+To: =?UTF-8?Q?Beno=c3=aet_TELLIER?=
+ <te...@linagora.com>
+From: aduprat <du...@linagora.com>
+X-Forwarded-Message-Id: <00...@google.com>
+Message-ID: <f1...@linagora.com>
+Date: Thu, 19 Jan 2017 20:36:37 +0100
+MIME-Version: 1.0
+In-Reply-To: <00...@google.com>
+Content-Type: multipart/mixed;
+ boundary="------------17D96D411CBD55D8239A8C1F"
+
+This is a multi-part message in MIME format.
+--------------17D96D411CBD55D8239A8C1F
+Content-Type: multipart/alternative;
+ boundary="------------64D716A3DDAEC185D3E67448"
+
+
+--------------64D716A3DDAEC185D3E67448
+Content-Type: text/plain; charset=utf-8; format=flowed
+Content-Transfer-Encoding: 8bit
+
+
+
+
+-------- Message transéré --------
+Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
+(CET) (duprat@linagora.com)
+Date : Thu, 19 Jan 2017 19:18:23 +0000
+De : Antoine Duprat <du...@gmail.com>
+Répondre à : antduprat@gmail.com
+Pour : aduprat@linagora.com
+
+
+
+
+--------------64D716A3DDAEC185D3E67448
+Content-Type: text/html; charset=utf-8
+Content-Transfer-Encoding: 8bit
+
+<html>
+ <head>
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ </head>
+ <body bgcolor="#FFFFFF" text="#000000">
+ <p><br>
+ </p>
+ <div class="moz-forward-container"><br>
+ <br>
+ -------- Message transéré --------
+ <table class="moz-email-headers-table" border="0" cellpadding="0"
+ cellspacing="0">
+ <tbody>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Sujet :
+ </th>
+ <td>Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 -
+ 15:00 (CET) (<a class="moz-txt-link-abbreviated" href="mailto:aduprat@linagora.com">aduprat@linagora.com</a>)</td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Date : </th>
+ <td>Thu, 19 Jan 2017 19:18:23 +0000</td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">De : </th>
+ <td>Antoine Duprat <a class="moz-txt-link-rfc2396E" href="mailto:antduprat@gmail.com"><antduprat@gmail.com></a></td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Répondre
+ Ã Â : </th>
+ <td><a class="moz-txt-link-abbreviated" href="mailto:antduprat@gmail.com">antduprat@gmail.com</a></td>
+ </tr>
+ <tr>
+ <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Pour : </th>
+ <td><a class="moz-txt-link-abbreviated" href="mailto:aduprat@linagora.com">aduprat@linagora.com</a></td>
+ </tr>
+ </tbody>
+ </table>
+ <br>
+ <br>
+ </div>
+ </body>
+</html>
+
+--------------64D716A3DDAEC185D3E67448--
+
+--------------17D96D411CBD55D8239A8C1F
+Content-Type: text/calendar;
+ name="Portion de message joint"
+Content-Transfer-Encoding: 8bit
+Content-Disposition: attachment;
+ filename="Portion de message joint"
+
+BEGIN:VCALENDAR
+PRODID:-//Google Inc//Google Calendar 70.9054//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:REQUEST
+BEGIN:VEVENT
+DTSTART:20170120T130000Z
+DTEND:20170120T140000Z
+DTSTAMP:20170119T191823Z
+ORGANIZER;CN=Antoine Duprat:mailto:duprat@gmail.com
+UID:ah86k5m342bmcrbe9khkkhln00@google.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
+ TRUE;CN=aduprat@linagora.com;X-NUM-GUESTS=0:mailto:duprat@linagora.com
+ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE
+ ;CN=Antoine Duprat;X-NUM-GUESTS=0:mailto:duprat@gmail.com
+CREATED:20170119T191823Z
+DESCRIPTION:Affichez votre evenement sur la page https://www.google.com/cal
+ endar/event?action=VIEW&eid=YWg4Nms1bTM0MmJtY3JiZTlraGtraGxuMDAgYWR1cHJhdEB
+ saW5hZ29yYS5jb20&tok=MTkjYW50ZHVwcmF0QGdtYWlsLmNvbTg1OTM5NWM4MGRlYmE1YTI4Nz
+ RjN2UyNjU0M2YyZmQ4NzRkNThhYTQ&ctz=Europe/Paris&hl=fr.
+LAST-MODIFIED:20170119T191823Z
+LOCATION:
+SEQUENCE:0
+STATUS:CONFIRMED
+SUMMARY:
+TRANSP:OPAQUE
+END:VEVENT
+END:VCALENDAR
+
+
+--------------17D96D411CBD55D8239A8C1F
+Content-Type: application/ics;
+ name="invite.ics"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="invite.ics"
+
+QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFy
+IDcwLjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6
+UkVRVUVTVA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMTcwMTIwVDEzMDAwMFoNCkRURU5E
+OjIwMTcwMTIwVDE0MDAwMFoNCkRUU1RBTVA6MjAxNzAxMTlUMTkxODIzWg0KT1JHQU5JWkVS
+O0NOPUFudG9pbmUgRHVwcmF0Om1haWx0bzphbnRkdXByYXRAZ21haWwuY29tDQpVSUQ6YWg4
+Nms1bTM0MmJtY3JiZTlraGtraGxuMDBAZ29vZ2xlLmNvbQ0KQVRURU5ERUU7Q1VUWVBFPUlO
+RElWSURVQUw7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7UEFSVFNUQVQ9TkVFRFMtQUNUSU9OO1JT
+VlA9DQogVFJVRTtDTj1hZHVwcmF0QGxpbmFnb3JhLmNvbTtYLU5VTS1HVUVTVFM9MDptYWls
+dG86YWR1cHJhdEBsaW5hZ29yYS5jb20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JP
+TEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9VFJVRQ0KIDtDTj1B
+bnRvaW5lIER1cHJhdDtYLU5VTS1HVUVTVFM9MDptYWlsdG86YW50ZHVwcmF0QGdtYWlsLmNv
+bQ0KQ1JFQVRFRDoyMDE3MDExOVQxOTE4MjNaDQpERVNDUklQVElPTjpBZmZpY2hleiB2b3Ry
+ZSDDqXbDqW5lbWVudCBzdXIgbGEgcGFnZSBodHRwczovL3d3dy5nb29nbGUuY29tL2NhbA0K
+IGVuZGFyL2V2ZW50P2FjdGlvbj1WSUVXJmVpZD1ZV2c0Tm1zMWJUTTBNbUp0WTNKaVpUbHJh
+R3RyYUd4dU1EQWdZV1IxY0hKaGRFQg0KIHNhVzVoWjI5eVlTNWpiMjAmdG9rPU1Ua2pZVzUw
+WkhWd2NtRjBRR2R0WVdsc0xtTnZiVGcxT1RNNU5XTTRNR1JsWW1FMVlUSTROeg0KIFJqTjJV
+eU5qVTBNMll5Wm1RNE56UmtOVGhoWVRRJmN0ej1FdXJvcGUvUGFyaXMmaGw9ZnIuDQpMQVNU
+LU1PRElGSUVEOjIwMTcwMTE5VDE5MTgyM1oNCkxPQ0FUSU9OOg0KU0VRVUVOQ0U6MA0KU1RB
+VFVTOkNPTkZJUk1FRA0KU1VNTUFSWToNClRSQU5TUDpPUEFRVUUNCkVORDpWRVZFTlQNCkVO
+RDpWQ0FMRU5EQVINCg==
+--------------17D96D411CBD55D8239A8C1F--
http://git-wip-us.apache.org/repos/asf/james-project/blob/110db27d/server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/headerEncodedFolded.script
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/headerEncodedFolded.script b/server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/headerEncodedFolded.script
new file mode 100644
index 0000000..b9f506d
--- /dev/null
+++ b/server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/headerEncodedFolded.script
@@ -0,0 +1,26 @@
+################################################################
+# Licensed to the Apache Software Foundation (ASF) under one #
+# or more contributor license agreements. See the NOTICE file #
+# distributed with this work for additional information #
+# regarding copyright ownership. The ASF licenses this file #
+# to you under the Apache License, Version 2.0 (the #
+# "License"); you may not use this file except in compliance #
+# with the License. You may obtain a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, #
+# software distributed under the License is distributed on an #
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY #
+# KIND, either express or implied. See the License for the #
+# specific language governing permissions and limitations #
+# under the License. #
+################################################################
+
+require "fileinto";
+
+if header :contains ["To"] ["Benoît TELLIER <te...@linagora.com>"] {
+ fileinto "INBOX.select";
+} else {
+ fileinto "INBOX.not.selected";
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/110db27d/server/pom.xml
----------------------------------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index f2749ee..f9cb099 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -128,7 +128,7 @@
<javax.activation.groupId>javax.activation</javax.activation.groupId>
<javax.activation.artifactId>activation</javax.activation.artifactId>
<jackrabbit.version>2.5.2</jackrabbit.version>
- <jsieve.version>0.6</jsieve.version>
+ <jsieve.version>0.7-SNAPSHOT</jsieve.version>
<spring.version>3.2.14.RELEASE</spring.version>
<geronimo-jms-spec.version>1.1.1</geronimo-jms-spec.version>
<h2.version>1.3.170</h2.version>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[4/6] james-project git commit: JAMES-1900 Headers should be decoded
and unfolded
Posted by bt...@apache.org.
JAMES-1900 Headers should be decoded and unfolded
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bf5a68c0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bf5a68c0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bf5a68c0
Branch: refs/heads/master
Commit: bf5a68c0d7b7ea2851cd556dd57d88008d9f8628
Parents: 4254ac9
Author: benwa <bt...@linagora.com>
Authored: Fri May 5 10:32:01 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Jun 5 20:24:51 2017 +0700
----------------------------------------------------------------------
.../apache/james/jmap/model/MessageFactory.java | 13 +++++
.../james/jmap/model/MessageFactoryTest.java | 50 ++++++++++++++++++++
2 files changed, 63 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/bf5a68c0/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
index cbcdbcd..e0eb1c9 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
@@ -21,6 +21,7 @@ package org.apache.james.jmap.model;
import java.io.IOException;
import java.io.InputStream;
import java.time.Instant;
+import java.time.ZoneId;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -43,11 +44,14 @@ import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageAttachment;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.MessageResult;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.dom.address.AddressList;
import org.apache.james.mime4j.dom.address.Mailbox;
import org.apache.james.mime4j.dom.address.MailboxList;
import org.apache.james.mime4j.stream.Field;
import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.util.MimeUtil;
import org.apache.james.util.mime.MessageContentExtractor;
import org.apache.james.util.mime.MessageContentExtractor.MessageContent;
@@ -69,6 +73,14 @@ public class MessageFactory {
.setMaxLineLen(-1)
.build();
+ private static String sanitizeHeaderField(String headerValue) {
+ return DecoderUtil.decodeEncodedWords(
+ MimeUtil.unfold(headerValue),
+ DecodeMonitor.SILENT);
+ }
+
+ private static final ZoneId UTC_ZONE_ID = ZoneId.of("Z");
+
private final MessagePreviewGenerator messagePreview;
private final MessageContentExtractor messageContentExtractor;
private final HtmlTextExtractor htmlTextExtractor;
@@ -192,6 +204,7 @@ public class MessageFactory {
Function<Entry<String, Collection<Field>>, String> bodyConcatenator = fieldListEntry -> fieldListEntry.getValue()
.stream()
.map(Field::getBody)
+ .map(MessageFactory::sanitizeHeaderField)
.collect(Collectors.toList())
.stream()
.collect(Collectors.joining(","));
http://git-wip-us.apache.org/repos/asf/james-project/blob/bf5a68c0/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
index 76e3cd5..5076774 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
@@ -169,6 +169,56 @@ public class MessageFactoryTest {
}
@Test
+ public void headersShouldBeUnfoldedAndDecoded() throws Exception {
+ String headers = "From: user <us...@domain>\n"
+ + "Subject: test subject\n"
+ + "To: user1 <us...@domain>,\r\n"
+ + " user2 <us...@domain>\n"
+ + "Cc: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <te...@linagora.com>";
+ MetaDataWithContent testMail = MetaDataWithContent.builder()
+ .uid(MessageUid.of(2))
+ .flags(new Flags(Flag.SEEN))
+ .size(headers.length())
+ .internalDate(INTERNAL_DATE)
+ .content(new ByteArrayInputStream(headers.getBytes(Charsets.UTF_8)))
+ .attachments(ImmutableList.of())
+ .mailboxId(MAILBOX_ID)
+ .messageId(TestMessageId.of(2))
+ .build();
+
+ Emailer user = Emailer.builder().name("user").email("user@domain").build();
+ Emailer user1 = Emailer.builder().name("user1").email("user1@domain").build();
+ Emailer user2 = Emailer.builder().name("user2").email("user2@domain").build();
+ Emailer usercc = Emailer.builder().name("Benoît TELLIER").email("tellier@linagora.com").build();
+ ImmutableMap<String, String> headersMap = ImmutableMap.<String, String>builder()
+ .put("Cc", "Benoît TELLIER <te...@linagora.com>")
+ .put("Subject", "test subject")
+ .put("From", "user <us...@domain>")
+ .put("To", "user1 <us...@domain>, user2 <us...@domain>")
+ .put("Date", "Tue, 14 Jul 2015 12:30:42 +0000")
+ .put("MIME-Version", "1.0")
+ .build();
+ Message testee = messageFactory.fromMetaDataWithContent(testMail);
+ Message expected = Message.builder()
+ .id(TestMessageId.of(2))
+ .blobId(BlobId.of("2"))
+ .threadId("2")
+ .mailboxId(MAILBOX_ID)
+ .headers(headersMap)
+ .from(user)
+ .to(ImmutableList.of(user1, user2))
+ .cc(ImmutableList.of(usercc))
+ .subject("test subject")
+ .date(ZONED_DATE)
+ .size(headers.length())
+ .preview("(Empty)")
+ .textBody(Optional.of(""))
+ .htmlBody(Optional.empty())
+ .build();
+ assertThat(testee).isEqualToComparingFieldByField(expected);
+ }
+
+ @Test
public void textBodyShouldBeSetIntoMessage() throws Exception {
String headers = "Subject: test subject\n";
String body = "Mail body";
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[6/6] james-project git commit: JAMES-1900 Enable header unscrambling
testing with JSieve
Posted by bt...@apache.org.
JAMES-1900 Enable header unscrambling testing with JSieve
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/747e6715
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/747e6715
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/747e6715
Branch: refs/heads/master
Commit: 747e671547cdb99b4d26774021b89fc9e4addc8c
Parents: f832b99
Author: benwa <bt...@linagora.com>
Authored: Fri May 5 17:06:49 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Jun 5 21:18:39 2017 +0700
----------------------------------------------------------------------
.../james/transport/mailets/delivery/SieveIntegrationTest.java | 2 --
.../src/main/java/org/apache/james/jmap/model/MessageFactory.java | 2 --
.../test/java/org/apache/james/jmap/model/MessageFactoryTest.java | 3 +--
3 files changed, 1 insertion(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/747e6715/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
index 8d7c43b..3d26130 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -44,7 +44,6 @@ import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
@@ -265,7 +264,6 @@ public class SieveIntegrationTest {
assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
}
- @Ignore("Waiting for JAMES-1900 JSieve part to be merged")
@Test
public void headerInstructionShouldSupportFoldedEncodedHeaders() throws Exception {
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/headerEncodedFolded.script");
http://git-wip-us.apache.org/repos/asf/james-project/blob/747e6715/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
index e39e78e..18f4695 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
@@ -71,8 +71,6 @@ public class MessageFactory {
.setMaxLineLen(-1)
.build();
- private static final ZoneId UTC_ZONE_ID = ZoneId.of("Z");
-
private final MessagePreviewGenerator messagePreview;
private final MessageContentExtractor messageContentExtractor;
private final HtmlTextExtractor htmlTextExtractor;
http://git-wip-us.apache.org/repos/asf/james-project/blob/747e6715/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
index 5076774..bd08b57 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
@@ -195,7 +195,6 @@ public class MessageFactoryTest {
.put("Subject", "test subject")
.put("From", "user <us...@domain>")
.put("To", "user1 <us...@domain>, user2 <us...@domain>")
- .put("Date", "Tue, 14 Jul 2015 12:30:42 +0000")
.put("MIME-Version", "1.0")
.build();
Message testee = messageFactory.fromMetaDataWithContent(testMail);
@@ -209,7 +208,7 @@ public class MessageFactoryTest {
.to(ImmutableList.of(user1, user2))
.cc(ImmutableList.of(usercc))
.subject("test subject")
- .date(ZONED_DATE)
+ .date(Instant.parse("2012-02-03T14:30:42.000Z"))
.size(headers.length())
.preview("(Empty)")
.textBody(Optional.of(""))
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[5/6] james-project git commit: JAMES-1900 Extract header sanitizing
to mime4j
Posted by bt...@apache.org.
JAMES-1900 Extract header sanitizing to mime4j
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f832b99a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f832b99a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f832b99a
Branch: refs/heads/master
Commit: f832b99a7253c45716d0f2a64f6e918fb00e3b8d
Parents: 110db27
Author: benwa <bt...@linagora.com>
Authored: Fri May 5 16:56:30 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Jun 5 20:25:21 2017 +0700
----------------------------------------------------------------------
.../mailbox/elasticsearch/json/HeaderCollection.java | 10 +---------
.../james/mailbox/store/search/MessageSearches.java | 12 ++----------
.../standard/src/test/resources/mime/headerFolded.mime | 4 ++--
.../org/apache/james/jmap/model/MessageFactory.java | 10 +---------
4 files changed, 6 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/f832b99a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java
index eef245c..3db1c9a 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java
@@ -31,8 +31,6 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.james.mailbox.store.search.SearchUtil;
-import org.apache.james.mime4j.codec.DecodeMonitor;
-import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.dom.address.Address;
import org.apache.james.mime4j.dom.address.Group;
import org.apache.james.mime4j.dom.address.Mailbox;
@@ -51,12 +49,6 @@ import com.google.common.collect.Multimap;
public class HeaderCollection {
- private static String sanitizeHeaderField(String headerName) {
- return DecoderUtil.decodeEncodedWords(
- MimeUtil.unfold(headerName),
- DecodeMonitor.SILENT);
- }
-
public static class Builder {
// Some sent e-mail have this form : Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
@@ -90,7 +82,7 @@ public class HeaderCollection {
public Builder add(Field field) {
Preconditions.checkNotNull(field);
String headerName = field.getName().toLowerCase(Locale.US);
- String sanitizedValue = sanitizeHeaderField(field.getBody());
+ String sanitizedValue = MimeUtil.unscrambleHeaderValue(field.getBody());
headers.put(headerName, sanitizedValue);
handleSpecificHeader(headerName, sanitizedValue);
http://git-wip-us.apache.org/repos/asf/james-project/blob/f832b99a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
index 7bb255c..9516717 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
@@ -51,8 +51,6 @@ import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.search.comparator.CombinedComparator;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.MimeIOException;
-import org.apache.james.mime4j.codec.DecodeMonitor;
-import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.dom.Message;
import org.apache.james.mime4j.dom.address.Address;
import org.apache.james.mime4j.dom.address.AddressList;
@@ -91,12 +89,6 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
.setMaxLineLen(-1)
.build();
- private static String sanitizeHeaderField(String headerValue) {
- return DecoderUtil.decodeEncodedWords(
- MimeUtil.unfold(headerValue),
- DecodeMonitor.SILENT);
- }
-
private Iterator<MailboxMessage> messages;
private SearchQuery query;
private MailboxSession session;
@@ -479,7 +471,7 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
for (Header header : headers) {
String name = header.getName();
if (headerName.equalsIgnoreCase(name)) {
- String value = sanitizeHeaderField(header.getValue());
+ String value = MimeUtil.unscrambleHeaderValue(header.getValue());
if (value != null) {
if (value.toUpperCase(Locale.US).contains(text)) {
result = true;
@@ -529,7 +521,7 @@ public class MessageSearches implements Iterable<SimpleMessageSearchIndex.Search
for (Header header : headers) {
String name = header.getName();
if (headerName.equalsIgnoreCase(name)) {
- value = sanitizeHeaderField(header.getValue());
+ value = MimeUtil.unscrambleHeaderValue(header.getValue());
break;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f832b99a/mailet/standard/src/test/resources/mime/headerFolded.mime
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/resources/mime/headerFolded.mime b/mailet/standard/src/test/resources/mime/headerFolded.mime
index f8f44ce..409bb0c 100644
--- a/mailet/standard/src/test/resources/mime/headerFolded.mime
+++ b/mailet/standard/src/test/resources/mime/headerFolded.mime
@@ -1,6 +1,6 @@
-Return-Path: <ad...@linagora.com>
+Return-Path: <du...@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
- (CET) (aduprat@linagora.com)
+ (CET) (duprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <te...@linagora.com>
From: aduprat
<du...@linagora.com>
http://git-wip-us.apache.org/repos/asf/james-project/blob/f832b99a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
index e0eb1c9..e39e78e 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
@@ -44,8 +44,6 @@ import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageAttachment;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.MessageResult;
-import org.apache.james.mime4j.codec.DecodeMonitor;
-import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.dom.address.AddressList;
import org.apache.james.mime4j.dom.address.Mailbox;
import org.apache.james.mime4j.dom.address.MailboxList;
@@ -73,12 +71,6 @@ public class MessageFactory {
.setMaxLineLen(-1)
.build();
- private static String sanitizeHeaderField(String headerValue) {
- return DecoderUtil.decodeEncodedWords(
- MimeUtil.unfold(headerValue),
- DecodeMonitor.SILENT);
- }
-
private static final ZoneId UTC_ZONE_ID = ZoneId.of("Z");
private final MessagePreviewGenerator messagePreview;
@@ -204,7 +196,7 @@ public class MessageFactory {
Function<Entry<String, Collection<Field>>, String> bodyConcatenator = fieldListEntry -> fieldListEntry.getValue()
.stream()
.map(Field::getBody)
- .map(MessageFactory::sanitizeHeaderField)
+ .map(MimeUtil::unscrambleHeaderValue)
.collect(Collectors.toList())
.stream()
.collect(Collectors.joining(","));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org