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.