EmailComponent 日本語拡張

標準

第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宛につぶやいていただければ、たぶんご返答いたします。

コメントを残す

Page optimized by WP Minify WordPress Plugin