Emailの機能はたくさんの場面で利用されます。Cakephpのメール機能には専用のレイアウトを用意することができます。
※実際のメール送信には app.php などで EmailTransport メール送信設定も必要です。
以下、メール機能の実装例です(ほぼマニュアル通り)
use Cake\Mailer\Mailer; // クラス内かつ、メソッド内で $mailer = new Mailer(); $mailer ->setEmailFormat('text') ->setTo('bob@example.com') ->setFrom('app@domain.com') ->viewBuilder() ->setTemplate('welcome') ->setLayout('fancy') ->setViewVars(['hoges' => $hoges]); $mailer->deliver();
メールの専用レイアウトは setLayout()
で指定できます。ちなみにCake2時代では template()
メソッドの第二引数でレイアウトを指定する形になっていました。
あとは、templates/layout/email/text/fancy.php でヘッダーやフッター部分など、使いまわすテンプレートを記述しておけばOKです。
必要なメールテンプレートファイルとしては、
- templates/email/text/welcome.php
- templates/layout/email/text/fancy.php
の2つになるかと思います。
メールレイアウトテンプレートの中身(fancy.php)は、
// ヘッダー内容 // 個別テンプレートファイル $this->fetch('content'); // フッター内容 -------------------------- 連絡先とか --------------------------
$this->fetch('content')
することで、各テンプレートファイルを読み込んでくれます。
ちょっと話は脱線するけど、setViewVars()
はコントローラー処理でフェッチしたデータ群の変数を送りこむことができます。これも良く使うと思うのでついでに記述しました。
■ Cakephp4: テンプレートメールの送信
https://book.cakephp.org/4/ja/core-libraries/email.html#id6