Amazon SES(Simple Email Service)で日本語メールを出す
Amazon SESを使って日本語メールを出してみた。
Amazon SESのメールは、デフォルトではUTF-8をMIME64エンコードされて送られるようだ。
SubjectはISO-2022-JPのBase64で渡せば大丈夫そうだけど、本文はそのままだと文字化けした(UTF-8で渡しても)。
$ cat mbody.utf8 これはテストです $ ./ses-send-email.pl -k aws-credentials -s "=?ISO-2022-JP?B?GyRCJDMkbCRPJUYlOSVIJWEhPCVrJEckORsoQg==?=" -f foo@example.com bar@example.com < mbody.utf8
届いたメール本文は...
〓 “〓‚〓〓 〓〓ƒ†〓‚¹〓ƒˆ〓 §〓 〓(文字化け)
そこでRawモードを使い、メール本文をファイルとして渡してみた(sandbox環境の場合、送受信アドレスはverifyされている必要があります)
$ cat mbody From: foo <foo@example.com> Date: Wed, 26 Jan 2011 16:58:54 +0900 Subject: =?ISO-2022-JP?B?GyRCJDMkbCRPJUYlOSVIJWEhPCVrJEckORsoQg==?= To: bar@example.com Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit $3$l$O%F%9%H%a!<%k$G$9!# $ ./ses-send-email.pl -k aws-credentials -r < mbody
届いたメール本文は...
これはテストメールです。
文字化けせずに届きました!
APIで送る場合には、SendRawEmail で送る必要がありそうです。
追記
下記の情報も頂きました!
@t_tanaka_wap AWS SDK for JavaのAPI使ったら日本語メール正しく送れましたよ。 RT @j3tm0t0 Amazon SESを使って日本語メールを出してみた http://d.hatena.ne.jp/j3tm0t0/20110126/1296030520 #jawsug
追記2
@zembutsu Amazon SES Developer Tools 付属の ses-send-email.pl で日本後が化けるのは、スクリプト中で「binmode STDIN, ":utf8";」を書いておけば回避できますた。単純にマルチバイト環境を想定していなかったのかな #jawsug
ということで、トライ。
$ diff org/ses-send-email.pl ses-send-email.pl 32a33 > binmode STDIN, ":utf8"; $ ./ses-send-email.pl -k aws-credentials -s "=?ISO-2022-JP?B?GyRCJDMkbCRPJUYlOSVIJWEhPCVrJEckORsoQg==?=" -f foo@example.com bar@example.com < mbody.utf8
届いたメールは、
これはテストです
とちゃんと読めました(Gmailでは)。UTF-8だと昔ながらのメーラーの場合読めない気がするので、JISで送るのが無難な気がします。