UTF-8以外でメール送信
Play! frameworkのメール送信は、2009年11月4日22時現在、文字コードがUTF-8に固定されてしまっています。このままだと、日本で使う場合は何かと不都合があるので、libs/Mail.javaとmvc/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); } }