第5回CakePHP IRC集会の時にちらっと発言したネタです。
CakePHPにはメール送信用のコンポーネントとして、EmailComponentが存在しますが日本語の取り扱いの不備などから、あまり利用されていません。
メール送信のコンポーネントとしては、Qdmailという素晴らしいライブラリがあり、高度なメール配信も出来るのでそちらを利用されることをお勧めしますが、EmailComponentの拡張を作ってしまったので説明します。
AppEmailComponent
オリジナルからの変更点
- 日本語の折り返し処理の修正(EmailConponent::__wrap()のオーバライド)
- 設定ファイルからの読み込み機能、メール設定の一元管理(load()メソッドの追加)
ソースコード
http://gist.github.com/287836
設置方法
app/controller/components/app_email.php にコンポネートファイルを設置します。
app/config/email.php を設置し、必要に応じて書き換えます。
利用方法
メール送信を行うコントローラクラスの$componentsに追加します。
class SomeController extends AppController { $components = array('AppEmail');
メール送信を行う場合は以下のようにします。
$this->AppEmail->to = $data['User']['email']; // 送り先をセット if (! $this->AppEmail->send() ) { // メール送信 // エラー時の処理をごにょごにょ }
app/config/email.phpについて
AppEmailComponentは、デフォルトで呼び出し元コントローラ名(Controller::$name)の設定情報を読み込もうとします。
コントローラ名での設定が定義されていない場合は$config[‘Email’][‘default’]で定義される設定を読みます。
$config[‘Email’][‘default’] でも定義されていない場合、EmailComponentに定義されている値を利用します。
app/config/email.phpに定義した設定情報は、
$this->AppEmail->load('some_config_name');
で、取得・セットすることが出来ます。
例)
$config['Email'] = array( /* デフォルトの設定 */ 'default' => array( 'delivery' => 'mail', // mail関数で送信 'sendAs' => 'text', // text形式で送信 'from' => 'foo@example.com', // メールの送信元(From:) 'subject' => 'メール送信', // メールの表題(Subject:) 'lineLength' => 72, // 本文の折り返し文字数(全角は2文字としてカウント) 'xMailer' => 'CakePHP AppEmail' /* X-Mailerヘッダ */), /* コントローラ別の設定 */ 'Users' => array( 'subject' => 'ユーザ登録完了のお知らせ', 'template' => 'user_registed'), // app/views/elements/email/text/user_registed.ctp をメール内容テンプレートとして使用 'some_config_name' => array( 'sendAs' => 'html' 'subject' => 'なんとかかんとか', 'template' => 'any_template') // app/views/elements/email/html/any_template.ctp をメール内容テンプレートとして使用 );
もちろん、デフォルトのEmailComponentのように、コントローラ中でコンポーネントの属性を変更可能です。
本コンポネートの使い方等、ご質問があればコメントを入れていただくか、 twitterにて@nojimage宛につぶやいていただければ、たぶんご返答いたします。