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]

Reply via email to