Author: rickette
Date: Wed Jul 13 06:58:18 2011
New Revision: 1145884

URL: http://svn.apache.org/viewvc?rev=1145884&view=rev
Log:
CAMEL-4093: introduced 'mapMailMessage' option to provide access to the 
underlying javax.mail.Message. Thanks to Dr. Martin Menzel, I was able to use 
some parts of his original patch.

Added:
    
camel/trunk/components/camel-mail/src/test/resources/SignedMailTestCaseHurz.elm
Modified:
    
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
    
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
    
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java

Modified: 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java?rev=1145884&r1=1145883&r2=1145884&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
 (original)
+++ 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
 Wed Jul 13 06:58:18 2011
@@ -223,7 +223,10 @@ public class MailBinding {
     public Object extractBodyFromMail(Exchange exchange, MailMessage 
mailMessage) {
         Message message = mailMessage.getMessage();
         try {
-            return message.getContent();
+            if 
(((MailEndpoint)exchange.getFromEndpoint()).getConfiguration().isMapMailMessage())
 {
+                return message.getContent();
+            }
+            return message; // raw message
         } catch (Exception e) {
             // try to fix message in case it has an unsupported encoding in 
the Content-Type header
             UnsupportedEncodingException uee = 
ObjectHelper.getException(UnsupportedEncodingException.class, e);

Modified: 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java?rev=1145884&r1=1145883&r2=1145884&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 (original)
+++ 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 Wed Jul 13 06:58:18 2011
@@ -46,6 +46,7 @@ public class MailConfiguration implement
     private String password;
     private String subject;
     private Session session;
+    private boolean mapMailMessage = true;
     private String defaultEncoding;
     private String from = MailConstants.MAIL_DEFAULT_FROM;
     private String folderName = MailConstants.MAIL_DEFAULT_FOLDER;
@@ -341,6 +342,14 @@ public class MailConfiguration implement
         this.delete = delete;
     }
 
+    public boolean isMapMailMessage() {
+        return mapMailMessage;
+    }
+
+    public void setMapMailMessage(boolean mapMailMessage) {
+        this.mapMailMessage = mapMailMessage;
+    }
+
     public String getFolderName() {
         return folderName;
     }

Modified: 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java?rev=1145884&r1=1145883&r2=1145884&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java
 (original)
+++ 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java
 Wed Jul 13 06:58:18 2011
@@ -16,21 +16,38 @@
  */
 package org.apache.camel.component.mail;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
+import javax.mail.Folder;
 import javax.mail.Message;
+import javax.mail.Store;
+import javax.mail.internet.MimeMessage;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 import org.jvnet.mock_javamail.Mailbox;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
 
 /**
  * Unit test for Mail using camel headers to set recipient subject.
  */
 public class RawMailMessageTest extends CamelTestSupport {
 
+    @Override
+    public void setUp() throws Exception {
+        Mailbox.clearAll();
+        prepareMailbox("jonesPop3", "pop3");
+        prepareMailbox("jonesRawPop3", "pop3");
+        prepareMailbox("jonesImap", "imap");
+        prepareMailbox("jonesRawImap", "imap");
+        super.setUp();
+    }
+
     @Test
     public void testGetRawJavaMailMessage() throws Exception {
         Mailbox.clearAll();
@@ -57,10 +74,90 @@ public class RawMailMessageTest extends 
         // END SNIPPET: e1
     }
 
+    @Test
+    public void testRawMessageConsumerPop3() throws Exception {
+        testRawMessageConsumer("Pop3");
+    }
+
+    @Test
+    public void testRawMessageConsumerImap() throws Exception {
+        testRawMessageConsumer("Imap");
+    }
+
+    private void testRawMessageConsumer(String type) throws Exception {
+        Mailbox mailboxRaw = Mailbox.get("jonesRaw" + type + "@localhost");
+        assertEquals(1, mailboxRaw.size());
+
+        MockEndpoint mock = getMockEndpoint("mock://rawMessage" + type);
+        mock.expectedMessageCount(1);
+        mock.expectedBodyReceived().body().isNotNull();
+        assertMockEndpointsSatisfied();
+
+        Message mailMessage = 
mock.getExchanges().get(0).getIn().getBody(Message.class);
+        assertNotNull("mail subject should not be null", 
mailMessage.getSubject());
+        assertEquals("mail subject should be hurz", "hurz", 
mailMessage.getSubject());
+    }
+
+    @Test
+    public void testNormalMessageConsumerPop3() throws Exception {
+        testNormalMessageConsumer("Pop3");
+    }
+
+    @Test
+    public void testNormalMessageConsumerImap() throws Exception {
+        testNormalMessageConsumer("Imap");
+    }
+
+    private void testNormalMessageConsumer(String type) throws Exception {
+        Mailbox mailbox = Mailbox.get("jones" + type + "@localhost");
+        assertEquals(1, mailbox.size());
+
+        MockEndpoint mock = getMockEndpoint("mock://normalMessage" + type);
+        mock.expectedMessageCount(1);
+        mock.expectedBodyReceived().body().isNotNull();
+        assertMockEndpointsSatisfied();
+
+        String body = mock.getExchanges().get(0).getIn().getBody(String.class);
+        MimeMessage mm = new MimeMessage(null, new 
ByteArrayInputStream(body.getBytes()));
+        String subject = mm.getSubject();
+        assertNull("mail subject should not be available", subject);
+    }
+
+    private void prepareMailbox(String user, String type) throws Exception {
+        // connect to mailbox
+        JavaMailSenderImpl sender = new JavaMailSenderImpl();
+        Store store = sender.getSession().getStore(type);
+        store.connect("localhost", 25, user, "secret");
+        Folder folder = store.getFolder("INBOX");
+        folder.open(Folder.READ_WRITE);
+        folder.expunge();
+
+        InputStream is = 
getClass().getResourceAsStream("/SignedMailTestCaseHurz.elm");
+        Message hurzMsg = new MimeMessage(sender.getSession(), is);
+        Message[] messages = new Message[] {hurzMsg};
+
+        // insert one signed message
+        folder.appendMessages(messages);
+        folder.close(true);
+    }
+
+    @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
                 from("pop3://davscl...@apache.org").to("mock:mail");
+
+                
from("pop3://jonesRawPop3@localhost?password=secret&consumer.delay=2000&delete=true&mapMailMessage=false")
+                    .to("mock://rawMessagePop3");
+
+                
from("imap://jonesRawImap@localhost?password=secret&consumer.delay=2000&delete=true&mapMailMessage=false")
+                    .to("mock://rawMessageImap");
+
+                
from("pop3://jonesPop3@localhost?password=secret&consumer.delay=2000&delete=true")
+                    .to("mock://normalMessagePop3");
+
+                
from("imap://jonesImap@localhost?password=secret&consumer.delay=2000&delete=true")
+                    .to("mock://normalMessageImap");
             }
         };
     }

Added: 
camel/trunk/components/camel-mail/src/test/resources/SignedMailTestCaseHurz.elm
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/resources/SignedMailTestCaseHurz.elm?rev=1145884&view=auto
==============================================================================
--- 
camel/trunk/components/camel-mail/src/test/resources/SignedMailTestCaseHurz.elm 
(added)
+++ 
camel/trunk/components/camel-mail/src/test/resources/SignedMailTestCaseHurz.elm 
Wed Jul 13 06:58:18 2011
@@ -0,0 +1,94 @@
+Message-ID: <4df5aca1.7050...@googlemail.com>
+Date: Mon, 13 Jun 2011 08:22:25 +0200
+From: "Dr. Martin Menzel" <apache.camel.t...@googlemail.com>
+User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.17) 
Gecko/20110414 Lightning/1.0b2 Thunderbird/3.1.10
+MIME-Version: 1.0
+To: mar...@woopi.org
+Subject: hurz
+Content-Type: multipart/signed; protocol="application/pkcs7-signature"; 
micalg=sha1; boundary="------------ms080200050303040909010307"
+
+This is a cryptographically signed message in MIME format.
+
+--------------ms080200050303040909010307
+Content-Type: text/plain; charset=ISO-8859-15; format=flowed
+Content-Transfer-Encoding: quoted-printable
+
+hurz
+
+
+--------------ms080200050303040909010307
+Content-Type: application/pkcs7-signature; name="smime.p7s"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+Content-Description: S/MIME Cryptographic Signature
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIKrDCC
+BVIwggM6oAMCAQICAwpWizANBgkqhkiG9w0BAQUFADB5MRAwDgYDVQQKEwdSb290IENBMR4w
+HAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNBIENlcnQgU2lnbmlu
+ZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRAY2FjZXJ0Lm9yZzAeFw0xMTA2
+MTMwNTQzMzZaFw0xMzA2MTIwNTQzMzZaME0xGjAYBgNVBAMTEURyLiBNYXJ0aW4gTWVuemVs
+MS8wLQYJKoZIhvcNAQkBFiBhcGFjaGUuY2FtZWwudGVzdEBnb29nbGVtYWlsLmNvbTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM34YES/yql24PA40U2tuI+L+7EGpzJd6fsH
+MgYgaDhX4gJlwN1YSpSoCPExWrzXE/VFEn8AyuZK/k1TmjKhjgywm9CeAR0iYlS1BmDzB/9h
+pBLoF12uTyJV1F1TuQdC1QKSes28gtp8Suink7YleoSvCX3nct0eyKix5oM/9ECCzCUs5pMS
+r067pd73AJjsDrP+IRfN7VPcy8O+SCrp2WyNz2N15fq4LgbpQb7jIaNrEKeu1kstnfJQEIWa
+xFrcImUcqwavNm9RER0oLIJHy6RYB9Cz9Zg1/0m8lFgPw1uTFcgNYZjOYYXRyRNeNGZ862/h
+feDv7T/z+Wr73aKp6cUCAwEAAaOCAQ0wggEJMAwGA1UdEwEB/wQCMAAwVgYJYIZIAYb4QgEN
+BEkWR1RvIGdldCB5b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSBoZWFkIG92ZXIgdG8g
+aHR0cDovL3d3dy5DQWNlcnQub3JnMEAGA1UdJQQ5MDcGCCsGAQUFBwMEBggrBgEFBQcDAgYK
+KwYBBAGCNwoDBAYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMDIGCCsGAQUFBwEBBCYwJDAiBggr
+BgEFBQcwAYYWaHR0cDovL29jc3AuY2FjZXJ0Lm9yZzArBgNVHREEJDAigSBhcGFjaGUuY2Ft
+ZWwudGVzdEBnb29nbGVtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOCAgEATCsTE7CZ5fV4032C
+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
+T+hk5b7chdO3kxc8M2lv8iyV1d27hf6elMxQB70rMYIDlDCCA5ACAQEwgYAweTEQMA4GA1UE
+ChMHUm9vdCBDQTEeMBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlD
+QSBDZXJ0IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
+dC5vcmcCAwpWizAJBgUrDgMCGgUAoIIB6DAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwG
+CSqGSIb3DQEJBTEPFw0xMTA2MTMwNjIyMjVaMCMGCSqGSIb3DQEJBDEWBBSXlYMMI3eKOB96
+rq4R4+sC+um4vzBfBgkqhkiG9w0BCQ8xUjBQMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAO
+BggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgw
+gZEGCSsGAQQBgjcQBDGBgzCBgDB5MRAwDgYDVQQKEwdSb290IENBMR4wHAYDVQQLExVodHRw
+Oi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkx
+ITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRAY2FjZXJ0Lm9yZwIDClaLMIGTBgsqhkiG9w0BCRAC
+CzGBg6CBgDB5MRAwDgYDVQQKEwdSb290IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2Vy
+dC5vcmcxIjAgBgNVBAMTGUNBIENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0B
+CQEWEnN1cHBvcnRAY2FjZXJ0Lm9yZwIDClaLMA0GCSqGSIb3DQEBAQUABIIBAGJyk3JJJan3
+tib2/xAOI3CPIjMAeFr6PzeeaCTmSxJEixaQKwlw54ZnULHDZdEf3ewLbDP8a6vP3EW32lju
+dGWiMk4a6333W8IUtHxIWFwWLoh6ZNS8WecX4vVPuaMj0Y7QcA0FEcVtqdxgUQQ5g6jvfL7c
+oo1nLRn4RpP3rcn9e3uZqRqTbd6lSh+AO181TWvQQOpT18mV7oqErZQjkcnHVGz8eypPpI+j
+A9kkI/yYQ4zg1UBclszGLuogir9bw25hxEqkBTqy14+2f2wHaxxSlwtFAm9Ev60Uslybp+lt
+ISyXjoZ+y/EVJY44y+Rs46sX8D/1sNg+/HB5YL3KKicAAAAAAAA=
+--------------ms080200050303040909010307--


Reply via email to