2011年12月1日木曜日

[CakePHP2.0]CakeEmailでテンプレートを使ってメール送信

まだCakePHPのことはあまり分かってないのですが、どうやら2.0からはCakeEmailというクラスを使ってメール送信できるようです。
CakePHPサイト参照(英語)

以前のバージョンではEmailComponentとかいうのがあったようですが、僕がCakePHPの1.1か1.2かどちらかを使った時はPHPMailerをVendorに入れてメール送信処理を書いていたように記憶しています。
というか、EmailComponentなんて存在を当時は知りませんでした(^^;

簡単そうなので、そのままコードをコピペしてちょちょいといじれば普通にできました。

今回の案件では、ViewのEmailテンプレートを利用してSMTPで送信するという流れでやってます。
メールの形式はtextにしてます。

まず、ベースのレイアウトを
View/Layouts/Emails/text/my_layout.ctp
に設定します。
会社名とか必ず書いておきたい内容を設定しておけばいいと思います。
$content_for_layoutにメールの内容が入るようです。

#ベースレイアウト(my_layout.ctp)

<?php echo $content_for_layout; ?>


会社名:〇〇株式会社
住所:〇〇市〇〇町
メールアドレス:info@example.com
URL:http://www.example.com/



そして、送信内容のテンプレートを
View/Emails/text/my_template.ctp
に設定します。
ここの変数は送信処理のviewVarsでセットします。

#テンプレート(my_template.ctp)

<?php echo $name; ?> 様

<?php echo $msg; ?>>





メール送信は以下のような感じ
最初の$configってのはSMTPを使う為の設定で、CakeEmailクラスをインスタンス化する時に引数で渡せばいいようです。
マニュアルではEmailConfigクラスに直接設定を書きこむ方法も書いてありますが、どっちでやるかは好みの問題です。

    // SMTP用設定
    $config = array (
        'host'      => 'smtp.example.com',
        'port'      => 587,
        'username'  => 'username',
        'password'  => 'password',
        'transport' => 'Smtp'
    );
    $subject = '件名';

    // テンプレートに送る変数
    $ary_vars = array (
        'name' => $this->data['Mail']['name'],
        'msg'    => 'ありがとうございました。';
    );

    // 送受信者設定
    $from_mail = 'info@example.com';
    $from_name = 'My Company';
    $to_mail = $this->data['Mail']['mail'];
    $to_name = $this->data['Mail']['name'];

    // 送信処理
    $email = new CakeEmail($config);
    $email
                ->template('my_template', 'my_layout')
                ->viewVars($ary_vars)
                ->emailFormat('text')
                ->from(array($from_mail => $from_name))
                ->to(array($to_mail => $to_name))
                ->subject($subject)
                ->send();


jQueryみたいに数珠つなぎな感じでできるようです。

ここの処理の流れは
  1. templateでテンプレートとレイアウト名を設定
  2. viewVarsでテンプレートに変数をセット
  3. emailFormatで'text'形式に設定(他に'html'、'both'があるらしい)
  4. fromで送信者を設定
  5. toで受信者を設定
  6. subjectで件名を設定
  7. sendで送信
という感じですね。

これを実行すると以下のようなメールが届くと思います。

◯◯ 様

ありがとうございました。


会社名:〇〇株式会社
住所:〇〇市〇〇町
メールアドレス:info@example.com
URL:http://www.example.com/


テンプレートを利用しない場合は、template関数とかviewVars関数は不要で、send関数の引数に送信内容を入れればいいようです。
まぁテンプレ使った方がコードがスッキリしますね。

0 件のコメント:

コメントを投稿