SOY Mailの件名文字化け対処法の一例
SOY CMSのメールプラグインであるSOY Mailからテストメールを送ったら文字化けが発生。 発生した環境はCORESERVERとOutlookの組み合わせ。 Gmailで受信したときは文字化けは起きていない。
Outlookで受信した際、本文は問題なかったのだが、件名が文字化け。 正確には "?ISO-2022-JP?B?..." で、エンコードされたまま。
この時のメールヘッダは次の通り。
- subjectはISO-2022-JPでエンコード。
- charsetはUTF-8を指定
Outlookはcharsetを見て、メールはUTF-8だと判断したんだと思う。 ヘッダと本文の文字コードは統一しなければならないのか?という疑問が湧いたのでRFCを見たけど、それらしいことを見つけることが出来なかった。
記憶をたどってみると、メールヘッダってASCIIで書くものだった気がする。 そうだとすれば、SubjectにはUTF-8の文字をそのまま書くことは出来ないので、ヘッダとボディは別々の文字コードでも問題ないことになる。 もし、この解釈が正しいならOutlookの動きがおかしいことになるが、そういうメールソフトである以上、仕方ない。
そんな経緯でSOY CMSのソースをコードを覗いてみた。 UTF-8と指定されている項目があったので、ISO-2022-JPに変更。
soycms/common/lib/soy2_build.php
- private $encoding = "UTF-8"; + private $encoding = "ISO-2022-JP";
これでテストメールを送ってみたところ、文字化けは解消されたので、一件落着? もう少し確認はしてみるが、大丈夫なんじゃないかなぁ〜と思っているところ。
ボディをUTF-8にするときは、ヘッダのエンコードもUTF-8にしておくべきなのか、そうした方が無難なのか疑問が残ってしまった。
今回のメールの件名の文字化けはSOY Mailの不具合ではないと思うが、現実問題、どう対処するか?という、対処法の一例でした。