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--