You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/05/27 14:33:50 UTC

svn commit: r779143 - in /camel/trunk/components/camel-mail/src: main/java/org/apache/camel/component/mail/MailBinding.java test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java

Author: davsclaus
Date: Wed May 27 12:33:50 2009
New Revision: 779143

URL: http://svn.apache.org/viewvc?rev=779143&view=rev
Log:
CAMEL-1645: camel-mail. Setting ContentType improved to allow charset, and provided in exchange message header as well.

Added:
    camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java
      - copied, changed from r779124, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java
Modified:
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.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=779143&r1=779142&r2=779143&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 May 27 12:33:50 2009
@@ -99,17 +99,39 @@
             if (exchange.getIn().hasAttachments()) {
                 appendAttachmentsFromCamel(mimeMessage, exchange.getIn(), endpoint.getConfiguration());
             } else {
-                if ("text/html".equals(endpoint.getConfiguration().getContentType())) {                  
-                    DataSource ds = new ByteArrayDataSource(exchange.getIn().getBody(String.class), "text/html");
-                    mimeMessage.setDataHandler(new DataHandler(ds));
-                } else {
-                    // its just text/plain
+                String contentType = populateContentType(endpoint, mimeMessage, exchange);
+                if (contentType == null) {
                     mimeMessage.setText(exchange.getIn().getBody(String.class));
+                } else if (contentType.startsWith("text/plain")) {
+                    String charset = ObjectHelper.after(contentType, "charset=");
+                    if (charset != null) {
+                        mimeMessage.setText(exchange.getIn().getBody(String.class), charset);
+                    } else {
+                        mimeMessage.setText(exchange.getIn().getBody(String.class));
+                    }
+                } else {
+                    // store content in a byte array data store
+                    DataSource ds = new ByteArrayDataSource(exchange.getIn().getBody(String.class), contentType);
+                    mimeMessage.setDataHandler(new DataHandler(ds));
                 }
             }
         }
     }
 
+    protected String populateContentType(MailEndpoint endpoint, MimeMessage mimeMessage, Exchange exchange) throws MessagingException {
+        // see if we got any content type set
+        String contentType = endpoint.getConfiguration().getContentType();
+        if (exchange.getIn().getHeader("contentType") != null) {
+            contentType = exchange.getIn().getHeader("contentType", String.class);
+        } else if (exchange.getIn().getHeader(Exchange.CONTENT_TYPE) != null) {
+            contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
+        }
+        if (contentType != null) {
+            mimeMessage.setHeader("Content-Type", contentType);
+        }
+        return contentType;
+    }
+
     /**
      * Extracts the body from the Mail message
      */

Copied: camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java (from r779124, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java?p2=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java&p1=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java&r1=779124&r2=779143&rev=779143&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java (original)
+++ camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java Wed May 27 12:33:50 2009
@@ -19,13 +19,14 @@
 import javax.mail.Message;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.jvnet.mock_javamail.Mailbox;
 
 /**
  * Unit test for contentType option.
  */
-public class MailContentTypeTest extends ContextTestSupport {
+public class MailCustomContentTypeTest extends ContextTestSupport {
 
     public void testSendHtmlMail() throws Exception {
         Mailbox.clearAll();
@@ -36,25 +37,51 @@
         Message msg = box.get(0);
 
         assertTrue(msg.getContentType().startsWith("text/html"));
+        assertEquals("text/html;charset=UTF-8", msg.getContentType());
         assertEquals("<html><body><h1>Hello</h1>World</body></html>", msg.getContent());
     }
 
-    public void testSendPlainMail() throws Exception {
+    public void testSendHtmlMailIso88591() throws Exception {
         Mailbox.clearAll();
 
-        sendBody("direct:b", "Hello World");
+        sendBody("direct:c", "<html><body><h1>Hello</h1>World</body></html>");
 
         Mailbox box = Mailbox.get("claus@localhost");
         Message msg = box.get(0);
-        assertTrue(msg.getContentType().startsWith("text/plain"));
+
+        assertTrue(msg.getContentType().startsWith("text/html"));
+        assertEquals("text/html;charset=iso-8859-1", msg.getContentType());
+        assertEquals("<html><body><h1>Hello</h1>World</body></html>", msg.getContent());
+    }
+
+    public void testSendPlainMailContentTypeInHeader() throws Exception {
+        Mailbox.clearAll();
+
+        template.sendBodyAndHeader("direct:b", "Hello World", "contentType", "text/plain;charset=iso-8859-1");
+
+        Mailbox box = Mailbox.get("claus@localhost");
+        Message msg = box.get(0);
+        assertEquals("text/plain; charset=iso-8859-1", msg.getContentType());
+        assertEquals("Hello World", msg.getContent());
+    }
+
+    public void testSendPlainMailContentTypeInHeader2() throws Exception {
+        Mailbox.clearAll();
+
+        template.sendBodyAndHeader("direct:b", "Hello World", Exchange.CONTENT_TYPE, "text/plain;charset=iso-8859-1");
+
+        Mailbox box = Mailbox.get("claus@localhost");
+        Message msg = box.get(0);
+        assertEquals("text/plain; charset=iso-8859-1", msg.getContentType());
         assertEquals("Hello World", msg.getContent());
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("direct:a").to("smtp://claus@localhost?contentType=text/html");
-                from("direct:b").to("smtp://claus@localhost?contentType=text/plain");
+                from("direct:a").to("smtp://claus@localhost?contentType=text/html;charset=UTF-8");
+                from("direct:b").to("smtp://claus@localhost");
+                from("direct:c").to("smtp://claus@localhost?contentType=text/html;charset=iso-8859-1");
             }
         };
     }