CakePHP2から「CakeEmail」というコアライブラリが追加され、簡単にメール送信ができるようになりました。メール送信のためのコンフィギュレーションファイルは「email.php.default」、テンプレートファイルは「page_mail.ctp」をそれぞれ使用し、コントローラでコアライブラリ「CakeEmail」を呼び出して、コンフィギュレーションファイルとテンプレートファイルに従って、メールを作成して送信します。
開発環境
- cakephp-2.5.2
コンフィギュレーション「email.php.default」の設定
Configフォルダの「email.php.default」を「email.php」にリネームして次のように編集します。
app/Config/email.php
class EmailConfig { public $tomosend = array( 'transport' => 'Mail', 'from' => 'you@localhost', 'sendAs' => 'text', ); }
これだけのコンフィギュレーションで、メールの送信が可能になります。
コントローラの設定-CakeEmailのインスタンス化
モデルはメール送信に関係ないので省略し、次はコントローラです。
app/Controller/PagesController.php
class PagesController extends AppController { public function index() { // テンプレートに送る変数 $ary_body = array ( 'name' => 'TomoSoft', 'msg' => 'ありがとうございました。', ); // 設定読み込み $email = new CakeEmail('tomosend'); // 送信! $email->template('page_mail', 'page_lyout') ->viewVars($ary_body) ->to('to@localhost') ->subject(mb_convert_encoding( 'Re:', 'UTF-8','auto')) ->send(); } }
$ary_bodyの中にテンプレートで表示する内容を設定します。設定した$ary_bodyはviewVarsの引数として渡します。これでテンプレートpage_mailで読み込まれます。「new CakeEmail(‘tomosend’)」でConfigのemail.phpで設定したtomosendの内容を読み込みます。どのテンプレートを使うかは、「template(‘page_mail’, ‘page_lyout’)」で設定しています。最初の引数がViewで、2つ目がLayoutです。
テンプレート「page_mail.ctp」の設定
「template(‘page_mail’, ‘page_lyout’)」で設定されたテンプレートファイルを次に示します。それぞれすでにフォルダはあるので、page_mail.ctpとpage_lyout.ctpのテンプレートファイルを作成します。
app\View\Emails\text\page_mail.ctp
メール本文を記述します。記述します。本文を直接記述してもいいですが、動的に変わる部分は変数にし、viewVarsの引数でテンプレートに渡します。
<?php echo $name; ?> 様 <?php echo $msg; ?>
app\View\Layouts\Emails\text\page_lyout.ctp
中身は何でもいいのですが、共通して表示するようなフッターが一般的です。ただ、$content_for_layout という記述だけはしておいてください。ここに、実際のメールの内容、page_mail.ctpで記述した内容が入ってきます。
<?php echo $content_for_layout; ?> This email was sent using the CakePHP Framework, http://cakephp.org.