http://mobilehacker.g.hatena.ne.jp/tokuhirom/20080729/1217321096
のように楽できると思って、メールから投稿できるものを作りかけてみたのだけど、問題がありました。メールは、送信時と受信時で使うエンコーディングが違う問題です。
Email::Address::JP::Mobile でたとえば au だと mail_encoding は x-sjis-kddi-auto を返しします。これは送信する時(encode)には良いのですが、受信の時(decode)はこれじゃなくて x-iso-2022-jp-kddi-auto あたりを使いたいところですよね。。
- 送信も受信と同じエンコーディングを使えばいいじゃないか。つまり、auの場合送信で x-iso-2022-jp-kddi-auto を使えばいい? →なんか理由があってこれはおすすめとは言えなかった気がします。たしかauの絵文字しか使えないからとかだったような。
- encodeはiso-2022-jpで、decodeはsjisでやるというエンコーディングをつくるのは明らかにきもいよな
- mime_encoding も送信用として MIME-Header-JP-Mobile-SJIS-Ezweb を返します。ただ受信(decode)の場合、もともとMIMEが Subject: =?iso-2022-jp?B?xxxx=?= ?shift_jis?B?xxxx=?= と一つのヘッダに複数のエンコーディグが混じることもあるためオールマイティになっているのでたまたま問題ない。
send_encoding() とかを新設するのがいいのか。
- mime_encoding() - 送信・受信用MIMEエンコーディング
- mail_encoding() - 受信用エンコーディング
- send_encoding() - 送信用エンコーディング
だんだんきもくなってくる。しかたないか。しかもこれだけがんばっても絵文字が取れるのはauだけという悲しさです。
Email::MIME::JP::Mobile とかが受信や送信で裏でうまくやってくれるといいのかもしれないすねえ。
とりあえず MobileCat では
http://coderepos.org/share/browser/websites/mobilecat/trunk/lib/MobileCat/Controller/API/Mail/Post.pm#L22
のようにエンコーディングを探してdecodeしています。