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に対応していないメーラーでもとりあえず対応できた。