Home Top About Help Login Search

CakePHPのEmailComponentを使い、文字コードISO-2022-JPのメールを送信する。

ID: 24
creation date: 2009/11/22 00:16
modification date: 2009/11/22 00:16
owner: naoto5959
tags: CakePHP

メールの文字コードはISO-2022-JPにしたい。

というわけで、あれこれした結果です。CakePHPのEmailコンポーネントを使って、文字コードISO-2022-JPのメールを送る際に以下のようにすると文字化けせずに送信出来ました。

$this->Email->to = '受信先<naoto5959@example.com>';
$this->Email->bcc = array('naoto5959@example.com');
$this->Email->replayTo = '返信先<naoto5959@example.com>';
$this->Email->from = '送信元<naoto5959@example.com>';
$this->Email->subject = 'メールのタイトル';
$this->Email->charset = 'ISO-2022-JP';
$this->Email->sendAs = 'text'; // html形式にしたい場合はhtmlに
$this->Email->lineLength = 1000; // 長いURLを改行しないようにする
$this->Email->template = 'hoge'; // elements/email/text/hoge.ctp
$this->Email->set('hoge', $hoge); // viewに渡す変数

// templateを使ってレンダリングされた結果を取得する
$message = $this->Email->__wrap(null);
$message = $this->Email->__renderTemplate($message);

$this->Email->template = null;
$message = mb_convert_encoding(implode("\r\n", $message), 'JIS');
$this->Email->send($message);
$this->Email->reset();

以下、はまった点。

subjectはmb_convert_encodingすると、かえって文字化けしてしまう。

ソースを読んでみると、charsetで指定したエンコードに変換する処理があるので、自分出わざわざ変換する必要はないみたいです。

lineLengthを指定しないと長いURLが改行されてしまう。

長いURLを改行するのは、RFC2822的には78文字で改行してねなので実は正しいです。ただ、お客さん的には改行しちゃだめよ、というお話にもなりがちなので難しいところなのですけど。

というわけで、ISO-2022-JPでメール送信出来るようになりました。良かった良かった。

1 comments
USA : USA (2010/08/03 21:04)
: