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

CakePHP2系からCakeEmailが使えるようになったってのは、以前「CakePHP2でのメール送信(CakeEmailを使ってみる)」で書いたのだが、文字コード関連で上手く行かない部分があったのでそのときの対応のメモ。

CakeEmailのデフォルトのcharestはUTF-8

特定のウェブメールを使ったときに、件名とか入力パラメータは意図した通り表示されているけどテンプレートの文字が文字化けしているという現象が起きた。
調べてみるとlib/Cake/Network/Email/CakeEmail.phpの242行目付近に以下のような記述を発見

/**
 * Charset the email body is sent in
 *
 *
 * @var string
 */
	public $charset = 'utf-8';

どうやらデフォルトの文字コードはUTF-8になっているようなので、ここをISO-2022-JPに変更してみる。
こんな感じに修正。

App:: uses('CakeEmail', 'Network/Email');
$email = new CakeEmail();
$email->charset = 'ISO-2022-JP';
...
$sent = $email->send();
if ($sent) {
     echo 'メール送信成功!' ;
}
else {
     echo 'メール送信失敗' ;
}

これでUTF-8に対応していないメーラーでもとりあえず対応できた。