Author: matthieu
Date: Fri Dec 11 12:34:47 2015
New Revision: 1719391
URL: http://svn.apache.org/viewvc?rev=1719391&view=rev
Log:
JAMES-1644 Convert Messages to JMAP Message
Added:
james/project/trunk/server/protocols/jmap/src/test/resources/spamMail.eml
Modified:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Emailer.java
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
Modified:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Emailer.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Emailer.java?rev=1719391&r1=1719390&r2=1719391&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Emailer.java
(original)
+++
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Emailer.java
Fri Dec 11 12:34:47 2015
@@ -19,6 +19,8 @@
package org.apache.james.jmap.model;
+import java.util.Objects;
+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.google.common.annotations.VisibleForTesting;
@@ -70,4 +72,27 @@ public class Emailer {
public String getEmail() {
return email;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (o instanceof Emailer) {
+ Emailer otherEMailer = (Emailer) o;
+ return Objects.equals(name, otherEMailer.name)
+ && Objects.equals(email, otherEMailer.email);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, email);
+ }
+
+ @Override
+ public String toString() {
+ return com.google.common.base.Objects.toStringHelper(this)
+ .add("name", name)
+ .add("email", email)
+ .toString();
+ }
}
Modified:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java?rev=1719391&r1=1719390&r2=1719391&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
(original)
+++
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
Fri Dec 11 12:34:47 2015
@@ -19,10 +19,19 @@
package org.apache.james.jmap.model;
+import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.jmap.model.message.EMailer;
+import org.apache.james.jmap.model.message.IndexableMessage;
+import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
@@ -31,14 +40,113 @@ import com.google.common.base.Preconditi
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Multimap;
@JsonDeserialize(builder = Message.Builder.class)
public class Message {
+ public static final String NO_SUBJECT = "(No subject)";
+ public static final String MULTIVALUED_HEADERS_SEPARATOR = ", ";
+ public static final String NO_BODY = "(Empty)";
+ public static final ZoneId UTC_ZONE_ID = ZoneId.of("Z");
public static Builder builder() {
return new Builder();
}
+ public static Message
fromMailboxMessage(org.apache.james.mailbox.store.mail.model.Message<? extends
MailboxId> mailboxMessage) {
+ IndexableMessage im = IndexableMessage.from(mailboxMessage, new
DefaultTextExtractor(), UTC_ZONE_ID);
+ if (im.getHasAttachment()) {
+ throw new NotImplementedException();
+ }
+ return builder()
+ .id(String.valueOf(im.getId()))
+ .blobId(String.valueOf(im.getId()))
+ .threadId(String.valueOf(im.getId()))
+ .mailboxIds(ImmutableList.of(im.getMailboxId()))
+ .inReplyToMessageId(getHeaderAsSingleValue(im, "in-reply-to"))
+ .isUnread(im.isUnRead())
+ .isFlagged(im.isFlagged())
+ .isAnswered(im.isAnswered())
+ .isDraft(im.isDraft())
+ .subject(getSubject(im))
+ .headers(toMap(im.getHeaders()))
+ .from(firstElasticSearchEmailers(im.getFrom()))
+ .to(fromElasticSearchEmailers(im.getTo()))
+ .cc(fromElasticSearchEmailers(im.getCc()))
+ .bcc(fromElasticSearchEmailers(im.getBcc()))
+ .replyTo(fromElasticSearchEmailers(im.getReplyTo()))
+ .size(im.getSize())
+ .date(getInternalDate(mailboxMessage, im))
+ .preview(getPreview(im))
+
.textBody(im.getBodyText().map(Strings::emptyToNull).orElse(null))
+ .build();
+ }
+
+ private static String getSubject(IndexableMessage im) {
+ return Optional.ofNullable(
+ Strings.emptyToNull(
+ im.getSubjects()
+ .stream()
+
.collect(Collectors.joining(MULTIVALUED_HEADERS_SEPARATOR))))
+ .orElse(NO_SUBJECT);
+ }
+
+ private static Emailer firstElasticSearchEmailers(Set<EMailer> emailers) {
+ return emailers.stream()
+ .findFirst()
+ .map(Message::fromElasticSearchEmailer)
+ .orElse(null);
+ }
+
+ private static ImmutableList<Emailer>
fromElasticSearchEmailers(Set<EMailer> emailers) {
+ return emailers.stream()
+ .map(Message::fromElasticSearchEmailer)
+
.collect(org.apache.james.util.streams.Collectors.toImmutableList());
+ }
+
+ private static Emailer fromElasticSearchEmailer(EMailer emailer) {
+ return Emailer.builder()
+ .name(emailer.getName())
+ .email(emailer.getAddress())
+ .build();
+ }
+
+ private static String getPreview(IndexableMessage im) {
+ return Optional.ofNullable(
+ Strings.emptyToNull(
+ im.getBodyText()
+ .map(Message::computePreview)
+ .orElse(NO_BODY)))
+ .orElse(NO_BODY);
+ }
+
+ @VisibleForTesting static String computePreview(String body) {
+ if (body.length() <= 256) {
+ return body;
+ }
+ return body.substring(0, 253) + "...";
+ }
+
+ private static ImmutableMap<String, String> toMap(Multimap<String, String>
multimap) {
+ return multimap
+ .asMap()
+ .entrySet()
+ .stream()
+
.collect(org.apache.james.util.streams.Collectors.toImmutableMap(Map.Entry::getKey,
x -> joinOnComma(x.getValue())));
+ }
+
+ private static String getHeaderAsSingleValue(IndexableMessage im, String
header) {
+ return Strings.emptyToNull(joinOnComma(im.getHeaders().get(header)));
+ }
+
+ private static String joinOnComma(Iterable<String> iterable) {
+ return String.join(MULTIVALUED_HEADERS_SEPARATOR, iterable);
+ }
+
+ private static ZonedDateTime
getInternalDate(org.apache.james.mailbox.store.mail.model.Message<? extends
MailboxId> mailboxMessage, IndexableMessage im) {
+ return
ZonedDateTime.ofInstant(mailboxMessage.getInternalDate().toInstant(),
UTC_ZONE_ID);
+ }
+
@JsonPOJOBuilder(withPrefix = "")
public static class Builder {
private String id;
Modified:
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java?rev=1719391&r1=1719390&r2=1719391&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
(original)
+++
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
Fri Dec 11 12:34:47 2015
@@ -20,15 +20,32 @@ package org.apache.james.jmap.model;
import static org.assertj.core.api.Assertions.assertThat;
+import java.time.ZoneId;
import java.time.ZonedDateTime;
+import java.util.Date;
import java.util.Optional;
+import javax.mail.Flags;
+import javax.mail.Flags.Flag;
+import javax.mail.util.SharedByteArrayInputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.mailbox.store.TestId;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMessage;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
public class MessageTest {
+ private static final TestId MAILBOX_ID = TestId.of(18L);
+ private static final long MOD_SEQ = 42L;
+ private static final ZoneId UTC_ZONE_ID = ZoneId.of("Z");
+ private static final ZonedDateTime ZONED_DATE = ZonedDateTime.of(2015, 07,
14, 12, 30, 42, 0, UTC_ZONE_ID);
+ private static final Date INTERNAL_DATE =
Date.from(ZONED_DATE.toInstant());
+
@Test(expected=IllegalStateException.class)
public void buildShouldThrowWhenIdIsNull() {
Message.builder().build();
@@ -217,4 +234,229 @@ public class MessageTest {
.build();
assertThat(tested).isEqualToComparingFieldByField(expected);
}
+
+ @Test
+ public void emptyMailShouldBeLoadedIntoMessage() throws Exception {
+ org.apache.james.mailbox.store.mail.model.Message<TestId> testMail =
new SimpleMessage<>(
+ INTERNAL_DATE,
+ 0,
+ 0,
+ new SharedByteArrayInputStream("".getBytes()),
+ new Flags(Flag.SEEN),
+ new PropertyBuilder(),
+ MAILBOX_ID);
+ testMail.setModSeq(MOD_SEQ);
+
+ Message testee = Message.fromMailboxMessage(testMail);
+ Message expected = Message.builder()
+ .id("0")
+ .blobId("0")
+ .threadId("0")
+ .mailboxIds(ImmutableList.of(MAILBOX_ID.serialize()))
+ .headers(ImmutableMap.of())
+ .subject("(No subject)")
+ .size(0)
+ .date(ZONED_DATE)
+ .preview("(Empty)")
+ .build();
+ assertThat(testee).isEqualToComparingFieldByField(expected);
+ }
+
+ @Test
+ public void flagsShouldBeSetIntoMessage() throws Exception {
+ Flags flags = new Flags();
+ flags.add(Flag.ANSWERED);
+ flags.add(Flag.FLAGGED);
+ flags.add(Flag.DRAFT);
+ org.apache.james.mailbox.store.mail.model.Message<TestId> testMail =
new SimpleMessage<>(
+ INTERNAL_DATE,
+ 0,
+ 0,
+ new SharedByteArrayInputStream("".getBytes()),
+ flags,
+ new PropertyBuilder(),
+ MAILBOX_ID);
+ testMail.setModSeq(MOD_SEQ);
+
+ Message testee = Message.fromMailboxMessage(testMail);
+ Message expected = Message.builder()
+ .id("0")
+ .blobId("0")
+ .threadId("0")
+ .mailboxIds(ImmutableList.of(MAILBOX_ID.serialize()))
+ .isUnread(true)
+ .isFlagged(true)
+ .isAnswered(true)
+ .isDraft(true)
+ .headers(ImmutableMap.of())
+ .subject("(No subject)")
+ .size(0)
+ .date(ZONED_DATE)
+ .preview("(Empty)")
+ .build();
+ assertThat(testee).isEqualToComparingFieldByField(expected);
+ }
+
+ @Test
+ public void headersShouldBeSetIntoMessage() throws Exception {
+ String headers = "From: user <user@domain>\n"
+ + "Subject: test subject\n"
+ + "To: user1 <user1@domain>, user2 <user2@domain>\n"
+ + "Cc: usercc <usercc@domain>\n"
+ + "Bcc: userbcc <userbcc@domain>\n"
+ + "Reply-To: \"user to reply to\" <user.reply.to@domain>\n"
+ + "In-Reply-To:
<[email protected]>\n"
+ + "Other-header: other header value";
+ org.apache.james.mailbox.store.mail.model.Message<TestId> testMail =
new SimpleMessage<>(
+ INTERNAL_DATE,
+ headers.length(),
+ headers.length(),
+ new SharedByteArrayInputStream(headers.getBytes()),
+ new Flags(Flag.SEEN),
+ new PropertyBuilder(),
+ MAILBOX_ID);
+ testMail.setModSeq(MOD_SEQ);
+
+ 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("usercc").email("usercc@domain").build();
+ Emailer userbcc =
Emailer.builder().name("userbcc").email("userbcc@domain").build();
+ Emailer userRT = Emailer.builder().name("user to reply
to").email("user.reply.to@domain").build();
+ ImmutableMap<String, String> headersMap = ImmutableMap.<String,
String>builder()
+ .put("cc", "usercc <usercc@domain>")
+ .put("bcc", "userbcc <userbcc@domain>")
+ .put("subject", "test subject")
+ .put("from", "user <user@domain>")
+ .put("to", "user1 <user1@domain>, user2 <user2@domain>")
+ .put("reply-to", "\"user to reply to\" <user.reply.to@domain>")
+ .put("in-reply-to",
"<[email protected]>")
+ .put("other-header", "other header value")
+ .build();
+ Message testee = Message.fromMailboxMessage(testMail);
+ Message expected = Message.builder()
+ .id("0")
+ .blobId("0")
+ .threadId("0")
+ .mailboxIds(ImmutableList.of(MAILBOX_ID.serialize()))
+
.inReplyToMessageId("<[email protected]>")
+ .headers(headersMap)
+ .from(user)
+ .to(ImmutableList.of(user1, user2))
+ .cc(ImmutableList.of(usercc))
+ .bcc(ImmutableList.of(userbcc))
+ .replyTo(ImmutableList.of(userRT))
+ .subject("test subject")
+ .date(ZONED_DATE)
+ .size(headers.length())
+ .preview("(Empty)")
+ .build();
+ assertThat(testee).isEqualToComparingFieldByField(expected);
+ }
+
+ @Test
+ public void textBodyShouldBeSetIntoMessage() throws Exception {
+ String headers = "Subject: test subject\n";
+ String body = "Mail body";
+ String mail = headers + "\n" + body;
+ org.apache.james.mailbox.store.mail.model.Message<TestId> testMail =
new SimpleMessage<>(
+ INTERNAL_DATE,
+ mail.length(),
+ headers.length(),
+ new SharedByteArrayInputStream(mail.getBytes()),
+ new Flags(Flag.SEEN),
+ new PropertyBuilder(),
+ MAILBOX_ID);
+ testMail.setModSeq(MOD_SEQ);
+
+ Message testee = Message.fromMailboxMessage(testMail);
+ Message expected = Message.builder()
+ .id("0")
+ .blobId("0")
+ .threadId("0")
+ .mailboxIds(ImmutableList.of(MAILBOX_ID.serialize()))
+ .headers(ImmutableMap.of("subject", "test subject"))
+ .subject("test subject")
+ .size(mail.length())
+ .date(ZONED_DATE)
+ .preview("Mail body")
+ .textBody("Mail body")
+ .build();
+ assertThat(testee).isEqualToComparingFieldByField(expected);
+ }
+
+ @Test
+ public void bodyWith256LengthShouldNotBeTruncated() {
+ String body256 =
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ +
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ + "00000000001111111111222222222233333333334444444444555555";
+ assertThat(body256.length()).isEqualTo(256);
+ assertThat(Message.computePreview(body256)).isEqualTo(body256);
+ }
+
+ @Test
+ public void bodyWith257LengthShouldBeTruncated() {
+ String body257 =
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ +
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ + "000000000011111111112222222222333333333344444444445555555";
+ String expected =
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ +
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ + "00000000001111111111222222222233333333334444444444555...";
+ assertThat(body257.length()).isEqualTo(257);
+ assertThat(expected.length()).isEqualTo(256);
+ assertThat(Message.computePreview(body257)).isEqualTo(expected);
+ }
+
+ @Test
+ public void previewShouldBeLimitedTo256Length() throws Exception {
+ String headers = "Subject: test subject\n";
+ String body300 =
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ +
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ +
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999";
+ String expectedPreview =
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ +
"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
+ + "00000000001111111111222222222233333333334444444444555...";
+ assertThat(body300.length()).isEqualTo(300);
+ assertThat(expectedPreview.length()).isEqualTo(256);
+ String mail = headers + "\n" + body300;
+ org.apache.james.mailbox.store.mail.model.Message<TestId> testMail =
new SimpleMessage<>(
+ INTERNAL_DATE,
+ mail.length(),
+ headers.length(),
+ new SharedByteArrayInputStream(mail.getBytes()),
+ new Flags(Flag.SEEN),
+ new PropertyBuilder(),
+ MAILBOX_ID);
+ testMail.setModSeq(MOD_SEQ);
+
+ Message testee = Message.fromMailboxMessage(testMail);
+ Message expected = Message.builder()
+ .id("0")
+ .blobId("0")
+ .threadId("0")
+ .mailboxIds(ImmutableList.of(MAILBOX_ID.serialize()))
+ .headers(ImmutableMap.of("subject", "test subject"))
+ .subject("test subject")
+ .size(mail.length())
+ .date(ZONED_DATE)
+ .preview(expectedPreview)
+ .textBody(body300)
+ .build();
+ assertThat(testee).isEqualToComparingFieldByField(expected);
+ }
+
+ @Test(expected=NotImplementedException.class)
+ public void attachmentsShouldNotBeHandledForNow() throws Exception {
+ org.apache.james.mailbox.store.mail.model.Message<TestId> testMail =
new SimpleMessage<>(
+ INTERNAL_DATE,
+ 0,
+ 0,
+ new
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("spamMail.eml"))),
+ new Flags(Flag.SEEN),
+ new PropertyBuilder(),
+ MAILBOX_ID);
+ testMail.setModSeq(MOD_SEQ);
+
+ Message.fromMailboxMessage(testMail);
+ }
}
Added: james/project/trunk/server/protocols/jmap/src/test/resources/spamMail.eml
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/resources/spamMail.eml?rev=1719391&view=auto
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/test/resources/spamMail.eml
(added)
+++ james/project/trunk/server/protocols/jmap/src/test/resources/spamMail.eml
Fri Dec 11 12:34:47 2015
@@ -0,0 +1,143 @@
+Return-Path: <[email protected]>
+Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
+ by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
+ Wed, 03 Jun 2015 11:05:45 +0200
+X-Sieve: CMU Sieve 2.4
+Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
+ by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
+ Wed, 3 Jun 2015 11:05:48 +0200 (CEST)
+Received: from listes.minet.net (listes.minet.net [192.168.102.29])
+ by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
+ Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
+ t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
+ h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
+ List-Subscribe:From;
+ b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
+ EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
+ 4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
+Received: from listes.minet.net (listes.minet.net [127.0.0.1])
+ by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
+ Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
+X-Original-To: [email protected]
+Delivered-To: [email protected]
+Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
+ by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
+ for <[email protected]>; Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
+Received: from localhost (spam.minet.net [192.168.102.97])
+ by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
+ for <[email protected]>; Wed, 3 Jun 2015 11:05:46 +0200 (CEST)
+Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
+Content-Transfer-Encoding: 7bit
+MIME-Version: 1.0
+From: "Content-filter at spam.minet.net" <[email protected]>
+Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
+To: <[email protected]>
+Message-ID: <[email protected]>
+Subject: [root] UNCHECKED contents in mail FROM <[email protected]>
+X-BeenThere: [email protected]
+X-Mailman-Version: 2.1.15
+Precedence: list
+List-Id: <root.listes.minet.net>
+List-Unsubscribe: <https://listes.minet.net/cgi-bin/mailman/options/root>,
+ <mailto:[email protected]?subject=unsubscribe>
+List-Post: <mailto:[email protected]>
+List-Help: <mailto:[email protected]?subject=help>
+List-Subscribe: <https://listes.minet.net/cgi-bin/mailman/listinfo/root>,
+ <mailto:[email protected]?subject=subscribe>
+Errors-To: [email protected]
+Sender: "root" <[email protected]>
+
+This is a multi-part message in MIME format...
+
+------------=_1433322346-12583-0
+Content-Type: text/plain; charset="UTF-8"
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+
+No viruses were found.
+
+Content type: Unchecked
+Internal reference code for the message is 12583-16/Ss-IZaXqmZao
+
+According to a 'Received:' trace, the message apparently originated at:
+ [198.252.153.129], [127.0.0.1] localhost [127.0.0.1] Authenticated sender:
+ quentin.h
+
+Return-Path: <[email protected]>
+From: Quentin <[email protected]>
+Message-ID: <[email protected]>
+Subject: =?UTF-8?B?UmU6IEZ3ZDogW1RtcGxhYl0gW0FQUEVMIEEgUEFSVElDSVBBVElPTl0=?=
+ =?UTF-8?B?IFdvb3QgZGV2aWNlcyAjMiAgOiB2ZW5leiBmYWlyZSBsZXVyIGhhY2tmw6p0ZSA=?=
+ =?UTF-8?B?YXV4IHBldGl0ZXMgbWFjaGluZXMgcHJvZ3JhbW1hYmxlcyBsZXMgNi03IGp1aW4=?=
+ =?UTF-8?B?IGF1IEphcmRpbiBkJ2FsaWNlL0JsYWNrbG9vcA==?=
+Not quarantined.
+
+The message WILL BE relayed to:
+<[email protected]>
+
+
+------------=_1433322346-12583-0
+Content-Type: text/rfc822-headers; name="header"
+Content-Disposition: inline; filename="header"
+Content-Transfer-Encoding: 7bit
+Content-Description: Message header section
+
+Return-Path: <[email protected]>
+Received-SPF: Pass (sender SPF authorized) identity=mailfrom;
client-ip=198.252.153.129; helo=mx1.riseup.net;
[email protected]; [email protected]
+Authentication-Results: mx2.minet.net; dkim=pass
+ reason="1024-bit key; insecure key"
+ header.d=riseup.net [email protected] header.b=RVs2xP3R;
+ dkim-adsp=pass; dkim-atps=neutral
+Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129])
+ (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
+ (No client certificate requested)
+ by mx2.minet.net (Postfix) with ESMTPS id 6D9E0A27FCA
+ for <[email protected]>; Wed, 3 Jun 2015 11:05:44 +0200 (CEST)
+Received: from plantcutter.riseup.net (plantcutter-pn.riseup.net [10.0.1.121])
+ (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
+ (Client CN "*.riseup.net", Issuer "COMODO RSA Domain Validation Secure
Server CA" (verified OK))
+ by mx1.riseup.net (Postfix) with ESMTPS id 5CC6541A75;
+ Wed, 3 Jun 2015 09:05:42 +0000 (UTC)
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=riseup.net; s=squak;
+ t=1433322342; bh=Lz3x5ntYzOhQOpyviKamr5VE0TinfpBCnsivvJzojYk=;
+ h=Date:From:To:Subject:References:In-Reply-To:From;
+ b=RVs2xP3RV4zWi3Jbs6p85cO8s44yLq1LXxwe6NQvgZjsHQdWaMY16jQzSbCRRdCRY
+ IesTpg1mncqIinhXxL9grw2+0MgO+E0HM0ZPZzXM/xNTGZpALI1X6tDM0rxB+GEnHa
+ NfGRbWnesWFLyba7am02KbTKeKq7svIBBmSbaFsE=
+Received: from [127.0.0.1] (localhost [127.0.0.1])
+ (Authenticated sender: quentin.h)
+ with ESMTPSA id 6DBAC20827
+Message-ID: <[email protected]>
+Date: Wed, 03 Jun 2015 11:05:37 +0200
+From: Quentin <[email protected]>
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101
Thunderbird/31.7.0
+MIME-Version: 1.0
+To: Yann Sionneau <[email protected]>, =?UTF-8?B?U3TDqXBoYW5pZSBPdWlsbG9u?=
+ <[email protected]>, =?UTF-8?B?TmF0YWxpYSBDYWxkZXJvbiBCZWx0csOhbg==?=
+ <[email protected]>
+Subject: =?UTF-8?B?UmU6IEZ3ZDogW1RtcGxhYl0gW0FQUEVMIEEgUEFSVElDSVBBVElPTl0=?=
+ =?UTF-8?B?IFdvb3QgZGV2aWNlcyAjMiAgOiB2ZW5leiBmYWlyZSBsZXVyIGhhY2tmw6p0ZSA=?=
+ =?UTF-8?B?YXV4IHBldGl0ZXMgbWFjaGluZXMgcHJvZ3JhbW1hYmxlcyBsZXMgNi03IGp1aW4=?=
+ =?UTF-8?B?IGF1IEphcmRpbiBkJ2FsaWNlL0JsYWNrbG9vcA==?=
+References: <[email protected]> <[email protected]>
+In-Reply-To: <[email protected]>
+OpenPGP: id=AA5EE4B4EA20E2BEAA70B98E49CBF006922B990A;
+ url=pgp.mit.edu
+Content-Type: multipart/encrypted;
+ protocol="application/pgp-encrypted";
+ boundary="M0xVhKIvXqi85dG57o5RfCUAoFwhAw1Nh"
+X-Virus-Scanned: clamav-milter 0.98.7 at mx1
+X-Virus-Status: Clean
+
+------------=_1433322346-12583-0
+Content-Type: text/plain; charset="iso-8859-1"
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+_______________________________________________
+root mailing list
[email protected]
+https://listes.minet.net/cgi-bin/mailman/listinfo/root
+------------=_1433322346-12583-0--
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]