Skip to main content

SOY Mailの件名文字化け対処法の一例

· 3 min read

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の不具合ではないと思うが、現実問題、どう対処するか?という、対処法の一例でした。