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.