You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by si...@apache.org on 2016/07/29 05:33:18 UTC

camel git commit: CAMEL-10200: Mail consumer sets wrong Content-Type header for mails with attachment

Repository: camel
Updated Branches:
  refs/heads/master 1e52c44c0 -> f7b152a77


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

Branch: refs/heads/master
Commit: f7b152a77b9fd02c46e1eeb83e22e510a2fcdb51
Parents: 1e52c44
Author: Stephan Siano <st...@sap.com>
Authored: Thu Jul 28 21:04:11 2016 +0200
Committer: Stephan Siano <st...@sap.com>
Committed: Fri Jul 29 07:31:51 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/f7b152a7/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 0596d61..fccca6a 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;
@@ -593,8 +595,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()) {
@@ -604,6 +606,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/f7b152a7/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 5e0615b..bd83a48 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;
@@ -116,6 +117,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/f7b152a7/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");
             }
         };
     }