Author: tn
Date: Tue Oct 15 21:13:11 2013
New Revision: 1532531

URL: http://svn.apache.org/r1532531
Log:
[EMAIL-104] Add support for default mime charset when added text content to 
SimpleEmail or HtmlEmail.

Modified:
    commons/proper/email/trunk/src/changes/changes.xml
    commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java
    
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java
    
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/HtmlEmail.java
    
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/HtmlEmailTest.java
    
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/SimpleEmailTest.java

Modified: commons/proper/email/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/email/trunk/src/changes/changes.xml?rev=1532531&r1=1532530&r2=1532531&view=diff
==============================================================================
--- commons/proper/email/trunk/src/changes/changes.xml (original)
+++ commons/proper/email/trunk/src/changes/changes.xml Tue Oct 15 21:13:11 2013
@@ -23,6 +23,10 @@
 
   <body>
     <release version="1.3.2" date="TBD">
+      <action dev="tn" type="fix" issue="EMAIL-104" date="2013-10-15" 
due-to="Hiroshi Ikeda">
+        Support default mime charset property "mail.mime.charset" when adding 
text content
+        to instances of either SimpleEmail or HtmlEmail.
+      </action>
       <action dev="tn" type="add" issue="EMAIL-132" date="2013-10-10" 
due-to="Allen Xudong Cheng">
         Added support for sending partial emails in case of invalid addresses.
       </action>

Modified: 
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java
URL: 
http://svn.apache.org/viewvc/commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java?rev=1532531&r1=1532530&r2=1532531&view=diff
==============================================================================
--- commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java 
(original)
+++ commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java 
Tue Oct 15 21:13:11 2013
@@ -1284,7 +1284,17 @@ public abstract class Email
 
             if (this.content != null)
             {
-                this.message.setContent(this.content, this.contentType);
+                if 
(EmailConstants.TEXT_PLAIN.equalsIgnoreCase(this.contentType)
+                        && this.content instanceof String)
+                {
+                    // EMAIL-104: call explicitly setText to use default mime 
charset
+                    //            (property "mail.mime.charset") in case none 
has been set
+                    this.message.setText(this.content.toString(), 
this.charset);
+                }
+                else
+                {
+                    this.message.setContent(this.content, this.contentType);
+                }
             }
             else if (this.emailBody != null)
             {
@@ -1299,7 +1309,7 @@ public abstract class Email
             }
             else
             {
-                this.message.setContent("", Email.TEXT_PLAIN);
+                this.message.setText("");
             }
 
             if (this.fromAddress != null)

Modified: 
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java
URL: 
http://svn.apache.org/viewvc/commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java?rev=1532531&r1=1532530&r2=1532531&view=diff
==============================================================================
--- 
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java
 (original)
+++ 
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java
 Tue Oct 15 21:13:11 2013
@@ -107,6 +107,9 @@ public final class EmailConstants
     /** defines the text/html content type */
     public static final String TEXT_HTML = "text/html";
 
+    /** defines the html subtype */
+    public static final String TEXT_SUBTYPE_HTML = "html";
+
     /** defines the text/plain content type */
     public static final String TEXT_PLAIN = "text/plain";
 
@@ -221,6 +224,12 @@ public final class EmailConstants
      */
     public static final String MAIL_SMTPS_SEND_PARTIAL = 
"mail.smtps.sendpartial";
 
+    /**
+     * Defines the default mime charset to use when none has been specified 
for the message.
+     * @since 1.3.2
+     */
+    public static final String MAIL_MIME_CHARSET = "mail.mime.charset";
+
     /** Hide constructor. */
     private EmailConstants()
     {

Modified: 
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/HtmlEmail.java
URL: 
http://svn.apache.org/viewvc/commons/proper/email/trunk/src/main/java/org/apache/commons/mail/HtmlEmail.java?rev=1532531&r1=1532530&r2=1532531&view=diff
==============================================================================
--- 
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/HtmlEmail.java 
(original)
+++ 
commons/proper/email/trunk/src/main/java/org/apache/commons/mail/HtmlEmail.java 
Tue Oct 15 21:13:11 2013
@@ -534,8 +534,8 @@ public class HtmlEmail extends MultiPart
         MimeMultipart rootContainer = this.getContainer();
         MimeMultipart bodyEmbedsContainer = rootContainer;
         MimeMultipart bodyContainer = rootContainer;
-        BodyPart msgHtml = null;
-        BodyPart msgText = null;
+        MimeBodyPart msgHtml = null;
+        MimeBodyPart msgText = null;
 
         rootContainer.setSubType("mixed");
 
@@ -576,17 +576,9 @@ public class HtmlEmail extends MultiPart
             msgHtml = new MimeBodyPart();
             bodyContainer.addBodyPart(msgHtml, 0);
 
-            // apply default charset if one has been set
-            if (EmailUtils.isNotEmpty(this.charset))
-            {
-                msgHtml.setContent(
-                    this.html,
-                    EmailConstants.TEXT_HTML + "; charset=" + this.charset);
-            }
-            else
-            {
-                msgHtml.setContent(this.html, EmailConstants.TEXT_HTML);
-            }
+            // EMAIL-104: call explicitly setText to use default mime charset
+            //            (property "mail.mime.charset") in case none has been 
set
+            msgHtml.setText(this.html, this.charset, 
EmailConstants.TEXT_SUBTYPE_HTML);
 
             for (InlineImage image : this.inlineEmbeds.values())
             {
@@ -599,17 +591,9 @@ public class HtmlEmail extends MultiPart
             msgText = new MimeBodyPart();
             bodyContainer.addBodyPart(msgText, 0);
 
-            // apply default charset if one has been set
-            if (EmailUtils.isNotEmpty(this.charset))
-            {
-                msgText.setContent(
-                    this.text,
-                    EmailConstants.TEXT_PLAIN + "; charset=" + this.charset);
-            }
-            else
-            {
-                msgText.setContent(this.text, EmailConstants.TEXT_PLAIN);
-            }
+            // EMAIL-104: call explicitly setText to use default mime charset
+            //            (property "mail.mime.charset") in case none has been 
set
+            msgText.setText(this.text, this.charset);
         }
     }
 

Modified: 
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/HtmlEmailTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/email/trunk/src/test/java/org/apache/commons/mail/HtmlEmailTest.java?rev=1532531&r1=1532530&r2=1532531&view=diff
==============================================================================
--- 
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/HtmlEmailTest.java
 (original)
+++ 
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/HtmlEmailTest.java
 Tue Oct 15 21:13:11 2013
@@ -21,7 +21,9 @@ import static org.junit.Assert.*;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.activation.DataSource;
 import javax.activation.FileDataSource;
@@ -30,7 +32,6 @@ import javax.mail.internet.MimeMessage;
 import org.apache.commons.mail.mocks.MockHtmlEmailConcrete;
 import org.apache.commons.mail.settings.EmailConfiguration;
 import org.apache.commons.mail.util.MimeMessageParser;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -497,6 +498,51 @@ public class HtmlEmailTest extends Abstr
 
     }
 
+    @Test
+    public void testSendWithDefaultCharset() throws Exception
+    {
+        // ====================================================================
+        // Test Success
+        // ====================================================================
+
+        System.setProperty(EmailConstants.MAIL_MIME_CHARSET, "iso-8859-15");
+
+        this.getMailServer();
+
+        this.email = new MockHtmlEmailConcrete();
+        this.email.setHostName(this.strTestMailServer);
+        this.email.setSmtpPort(this.getMailServerPort());
+        this.email.setFrom(this.strTestMailFrom);
+        this.email.addTo(this.strTestMailTo);
+
+        if (this.strTestUser != null && this.strTestPasswd != null)
+        {
+            this.email.setAuthentication(
+                this.strTestUser,
+                this.strTestPasswd);
+        }
+
+        String strSubject = "Test HTML Send Subject (w default charset)";
+        this.email.setSubject(strSubject);
+        this.email.setMsg("Test txt msg ä"); // add non-ascii character, 
otherwise us-ascii will be used
+
+        this.email.send();
+        this.fakeMailServer.stop();
+        // validate charset
+        validateSend(
+            this.fakeMailServer,
+            strSubject,
+            "charset=iso-8859-15",
+            this.email.getFromAddress(),
+            this.email.getToAddresses(),
+            this.email.getCcAddresses(),
+            this.email.getBccAddresses(),
+            true);
+
+        System.clearProperty(EmailConstants.MAIL_MIME_CHARSET);
+
+    }
+
     /**
      * Create a HTML email containing an URL pointing to a ZIP file
      * to be downloaded. According to EMAIL-93 the resulting URL

Modified: 
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/SimpleEmailTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/email/trunk/src/test/java/org/apache/commons/mail/SimpleEmailTest.java?rev=1532531&r1=1532530&r2=1532531&view=diff
==============================================================================
--- 
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/SimpleEmailTest.java
 (original)
+++ 
commons/proper/email/trunk/src/test/java/org/apache/commons/mail/SimpleEmailTest.java
 Tue Oct 15 21:13:11 2013
@@ -119,4 +119,49 @@ public class SimpleEmailTest extends Abs
             this.email.getBccAddresses(),
             true);
     }
+
+    @Test
+    public void testDefaultMimeCharset() throws EmailException, IOException
+    {
+        System.setProperty(EmailConstants.MAIL_MIME_CHARSET, "utf-8");
+
+        // ====================================================================
+        // Test Success
+        // ====================================================================
+        this.getMailServer();
+
+        this.email = new MockSimpleEmail();
+        this.email.setHostName(this.strTestMailServer);
+        this.email.setSmtpPort(this.getMailServerPort());
+        this.email.setFrom(this.strTestMailFrom);
+        this.email.addTo(this.strTestMailTo);
+
+        if (this.strTestUser != null && this.strTestPasswd != null)
+        {
+            this.email.setAuthentication(
+                this.strTestUser,
+                this.strTestPasswd);
+        }
+
+        String strSubject = "Test Msg Subject";
+        String strMessage = "Test Msg Body グ ケ ゲ コ ゴ";
+
+        this.email.setSubject(strSubject);
+        this.email.setMsg(strMessage);
+
+        this.email.send();
+
+        this.fakeMailServer.stop();
+        validateSend(
+            this.fakeMailServer,
+            strSubject,
+            this.email.getMsg(),
+            this.email.getFromAddress(),
+            this.email.getToAddresses(),
+            this.email.getCcAddresses(),
+            this.email.getBccAddresses(),
+            true);
+
+        System.clearProperty(EmailConstants.MAIL_MIME_CHARSET);
+    }
 }


Reply via email to