CakeEmailでメール本文が文字化けする

とっても悩んで解決したのでメモを残しておく。

CakePHPのCakeEmailを初めて使ってみたら、送信したメールの本文が文字化けする。今までQdmailを使っていたので、そんな現象には合わなかった。

Googleさんに聞いてみると

CakeEmailを使っていて本文が文字化けたらとりあえずcharsetを疑ってみる

なんて書いてあるけど、charsetにISO-2022-JPを設定しても現象は変わらない。今度はメールヘッダがも文字化けする。

しかたないので、CakeEmailをNetBeansのデバッガで追ってみる。CakeEmailの_encodeString()メソッド辺りに見当をつけてブレークポイントを設定する。デバッグしてみると何とmb_convert_encoding()を処理する前にreturnしていた。

原因はmb_convert_encoding()関数が存在しないことだった。つまり、mbstringモジュールをインストールしていないことが、そもそもの原因である。

.iniにmbstringモジュールを読み込んであげて、mbstringモジュールの設定を適当にしてphpinfo()でmbstringがサポートされていることを確認する。

今度は文字化けせずにメールを送れた。

WindowsのローカルPCに開発環境にPHPをインストールしたままで動かしたのが原因かもしれない。