Repository: camel Updated Branches: refs/heads/camel-2.16.x 8828c9dc7 -> 06de3796e
CAMEL-10200: Mail consumer sets wrong Content-Type header for mails with attachment Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/06de3796 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/06de3796 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/06de3796 Branch: refs/heads/camel-2.16.x Commit: 06de3796eb625c24cdfbd101f69efb70f010a182 Parents: 8828c9d Author: Stephan Siano <stephan.si...@sap.com> Authored: Thu Jul 28 21:04:11 2016 +0200 Committer: Stephan Siano <stephan.si...@sap.com> Committed: Fri Jul 29 07:39:11 2016 +0200 ---------------------------------------------------------------------- .../camel/component/mail/MailBinding.java | 20 ++++++++++++++++++-- .../camel/component/mail/MailMessage.java | 3 +++ .../component/mail/MimeMessageConsumeTest.java | 3 ++- 3 files changed, 23 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/06de3796/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java index 9b46695..8a2ee0a 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java @@ -26,6 +26,8 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.TreeMap; + import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.Address; @@ -562,8 +564,8 @@ public class MailBinding { return true; } - protected Map<String, Object> extractHeadersFromMail(Message mailMessage, Exchange exchange) throws MessagingException { - Map<String, Object> answer = new HashMap<String, Object>(); + protected Map<String, Object> extractHeadersFromMail(Message mailMessage, Exchange exchange) throws MessagingException, IOException { + Map<String, Object> answer = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER); Enumeration<?> names = mailMessage.getAllHeaders(); while (names.hasMoreElements()) { @@ -573,6 +575,20 @@ public class MailBinding { CollectionHelper.appendValue(answer, header.getName(), value); } } + // if the message is a multipart message, do not set the content type to multipart/* + if (((MailEndpoint)exchange.getFromEndpoint()).getConfiguration().isMapMailMessage()) { + Object content = mailMessage.getContent(); + if (content instanceof MimeMultipart) { + MimeMultipart multipart = (MimeMultipart)content; + int size = multipart.getCount(); + for (int i = 0; i < size; i++) { + BodyPart part = multipart.getBodyPart(i); + if (part.getContentType().toLowerCase().startsWith("text")) { + answer.put(Exchange.CONTENT_TYPE, part.getContentType()); + } + } + } + } return answer; } http://git-wip-us.apache.org/repos/asf/camel/blob/06de3796/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java index 949b0aa..c6d14e9 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.mail; +import java.io.IOException; import java.util.Map; import javax.activation.DataHandler; import javax.mail.Message; @@ -115,6 +116,8 @@ public class MailMessage extends DefaultMessage { } } catch (MessagingException e) { throw new RuntimeCamelException("Error accessing headers due to: " + e.getMessage(), e); + } catch (IOException e) { + throw new RuntimeCamelException("Error accessing headers due to: " + e.getMessage(), e); } } } http://git-wip-us.apache.org/repos/asf/camel/blob/06de3796/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java ---------------------------------------------------------------------- diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java index 786f939..337e84e 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java @@ -135,7 +135,8 @@ public class MimeMessageConsumeTest extends CamelTestSupport { protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { - from("pop3://james3@localhost?consumer.delay=1000").convertBodyTo(String.class).to("mock:result"); + from("pop3://james3@localhost?consumer.delay=1000").removeHeader("to").to("smtp://james4@localhost"); + from("pop3://james4@localhost?consumer.delay=2000").convertBodyTo(String.class).to("mock:result"); } }; }