UTF-8以外でメール送信

Play! frameworkメール送信は、2009年11月4日22時現在、文字コードUTF-8に固定されてしまっています。このままだと、日本で使う場合は何かと不都合があるので、libs/Mail.javamvc/Mailer.javaに対し、メールのタイトルと本文の文字コード(character-set)を設定できるパッチを作り、本家に提案しました。また、送信元の個人名(例えば、foo )やメールヘッダの追加機能も。

[Patch]New functions for libs/Mail.java and mvc/Mailer.java to set character-set and etc.

このパッチは、

 public class Mails extends Mailer {
     public static void commented(Post post) {
         setSubject("こんにちは");
         setSubjectCharset("iso-2022-jp");
         setBodyCharset("iso-2022-jp");
         setPersonal("yabe");
         addHeader("Content-Transfer-Encoding", "7bit");
         addRecipient(post.author.email);
         send(post);
     }
 }

といったように、ISO-2022-JPに変換した形で送信できます。

余談ですが。バグ修正や新しい提案が次々に組み込まれているので、Play! Frameworkのバグ管理サイト(play framework in Launchpad)は必見だと思いました。


[追記:11/12 0:55]
r678で一部を除いて(setPersonalは不要、且つ、setSubjectCharsetとsetBodyCharsetはsetCharsetに統一)コミットされたのですが、バグがあって(修正依頼済み)まだきちんと動きません。それにしても、疲れている時に慣れない英文を書くものではありませんね。文法間違い大杉...orz

[追記:11/22 11:24]
r695でr678のバグが修正されました。これで、setCharsetにより文字コード、addHeaderによるヘッダ追加できるようにようになり、iso-2022-jpなメールも以下のようにして送れます。libs/Mailのsendメソッドを文字コード(String)とヘッダ(Map)で呼んでもいいです。

 public class Mails extends Mailer {
     public static void commented(Post post) {
         setSubject("こんにちは");
         setCharset("iso-2022-jp");
         addHeader("Content-Transfer-Encoding", "7bit");
         addRecipient(post.author.email);
         send(post);
     }
 }