OSDN Git Service

Fixed #23561 SendMailImpl#setCharset で指定したエンコーディングが無視される。
authorIwao AVE! <harawata@gmail.com>
Tue, 22 Nov 2011 17:02:52 +0000 (02:02 +0900)
committerIwao AVE! <harawata@gmail.com>
Tue, 22 Nov 2011 17:02:52 +0000 (02:02 +0900)
src/main/java/com/ozacc/mail/Mail.java
src/test/java/com/ozacc/mail/impl/SendMailImplTest.java

index c2f70f3..0515736 100644 (file)
@@ -40,7 +40,7 @@ public class Mail {
 
        public static final String DOCTYPE_SYSTEM_MULTIPLE = "http://www.ozacc.com/library/dtd/ozacc-multiple-mails.dtd";
 
-       private String charset = JIS_CHARSET;
+       private String charset;
 
        protected String text;
 
index 63491d5..537dc4c 100644 (file)
@@ -1,6 +1,7 @@
 package com.ozacc.mail.impl;
 
 import javax.mail.Message;
+import javax.mail.internet.InternetAddress;
 
 import junit.framework.TestCase;
 
@@ -64,18 +65,19 @@ public class SendMailImplTest extends TestCase {
 
                Message email = inbox.get(0);
 
-               assertEquals("2", mail.getTo()[0].toString(), email.getHeader("To")[0]);
-               assertEquals("3", mail.getFrom().toString(), email.getHeader("From")[0]);
+               assertEquals("2", to, email.getHeader("To")[0]);
+               assertEquals("3",
+                               new InternetAddress(from, fromName, Mail.JIS_CHARSET)
+                                               .toString(), email.getHeader("From")[0]);
 
                assertEquals("4", mail.getSubject(), email.getSubject());
                assertEquals("5", mail.getText() + "\n", email.getContent());
+               assertEquals("6", "text/plain; charset=ISO-2022-JP",
+                               email.getContentType());
        }
 
        /**
         * 複数メールの一括送信テスト。
-        * 同一接続内の複数メッセージを送信するとDumbsterがエラーを吐くので、
-        * とりあえず1つのMailインスタンスの配列でテスト。
-        * 実際のSMTPサーバ(qmail)で正常に送信できることは確認済み。
         * 
         * @throws Exception
         */
@@ -112,11 +114,13 @@ public class SendMailImplTest extends TestCase {
 
                Message email1 = inbox.get(0);
 
-               assertEquals("2", mail1.getTo()[0].toString(), email1.getHeader("To")[0]);
-               assertEquals("3", mail1.getFrom().toString(), email1.getHeader("From")[0]);
+               assertEquals("2", to, email1.getHeader("To")[0]);
+               assertEquals("3",
+                               new InternetAddress(from, fromName, Mail.JIS_CHARSET)
+                                               .toString(), email1.getHeader("From")[0]);
 
-               assertEquals("4", mail1.getSubject(), email1.getSubject());
-               assertEquals("5", mail1.getText() + "\n", email1.getContent());
+               assertEquals("4", subject, email1.getSubject());
+               assertEquals("5", text + "\n", email1.getContent());
        }
 
        public void testSendMailWithReturnPath() throws Exception {
@@ -146,18 +150,20 @@ public class SendMailImplTest extends TestCase {
                // Enumeration headers = email.getAllHeaders();
                // while (headers.hasMoreElements()) {
                // Header header = (Header)headers.nextElement();
-               // System.out.println(header.getName() + "='" + header.getValue() + "'");
+               // System.out.println(header.getName() + "='" + header.getValue() +
+               // "'");
                // }
 
                // Mock JavaMail では Return-Path ヘッダは付加されないようだ。
-               // assertEquals(mail.getReturnPath().toString(), email.getHeader("Return-Path"));
+               // assertEquals(mail.getReturnPath().toString(),
+               // email.getHeader("Return-Path"));
                // 重要度を確認
                assertEquals(mail.getImportance(), email.getHeader("Importance")[0]);
                assertEquals("1", email.getHeader("X-Priority")[0]);
        }
 
        /**
-        * 宛先を一件も指定していないためsend()時に例外をスロー。
+        * 宛先を一件も指定していないためsend()時に例外をスロー。<br>
         * To、Cc、Bccを一件でも指定すれば、この例外は起こらない。
         * 
         * @throws Exception
@@ -181,4 +187,54 @@ public class SendMailImplTest extends TestCase {
                }
        }
 
-}
\ No newline at end of file
+       /**
+        * エンコーディングを SendMail#setCharset() で指定して送信するテスト。
+        */
+       public void testSendMailSetCharset1() throws Exception {
+               String from = "from@example.com";
+               String fromName = "差出人";
+               String to = "info@example.com";
+               String subject = "件名";
+               String text = "テスト成功";
+
+               Mail mail = new Mail();
+               mail.setFrom(from, fromName);
+               mail.addTo(to);
+               mail.setSubject(subject);
+               mail.setText(text);
+
+               sendMail.setCharset("UTF-8");
+               sendMail.send(mail);
+
+               Mailbox inbox = Mailbox.get("info@example.com");
+               assertEquals("1", 1, inbox.size());
+
+               Message email = inbox.get(0);
+               assertEquals("text/plain; charset=UTF-8", email.getContentType());
+       }
+
+       /**
+        * エンコーディングを Mail のコンストラクタで指定して送信するテスト。
+        */
+       public void testSendMailSetCharset2() throws Exception {
+               String from = "from@example.com";
+               String fromName = "差出人";
+               String to = "info@example.com";
+               String subject = "件名";
+               String text = "テスト成功";
+
+               Mail mail = new Mail("UTF-8");
+               mail.setFrom(from, fromName);
+               mail.addTo(to);
+               mail.setSubject(subject);
+               mail.setText(text);
+
+               sendMail.send(mail);
+
+               Mailbox inbox = Mailbox.get("info@example.com");
+               assertEquals("1", 1, inbox.size());
+
+               Message email = inbox.get(0);
+               assertEquals("text/plain; charset=UTF-8", email.getContentType());
+       }
+}