Repository: camel
Updated Branches:
  refs/heads/camel-2.17.x fec3c0cbf -> 17f24adb6


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/17f24adb
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/17f24adb
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/17f24adb

Branch: refs/heads/camel-2.17.x
Commit: 17f24adb6e2b2f9da1cf244cfeb75c361cf86ab9
Parents: fec3c0c
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:36:01 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/17f24adb/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/17f24adb/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/17f24adb/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");
             }
         };
     }

Reply via email to