【CakePHP】Mailerクラスによるメール送信
こんにちは、みよしやです。
今回は、CakePHP4でテキストメールを送信する方法について書こうと思います。
CakePHPとは
CakePHPは、オープンソースのPHPフレームワークです。
Webアプリケーション開発に向いているため、主にブログやECサイトの作成に使用されています。
今回使用するCakePHPのバージョンは4.x系となります。
前提条件について
CakePHP4には、Mailerというメール送信用のクラスがあらかじめ用意されているため、
こちらのクラスを使用してメール処理を実装していきます。
コントローラー内でメール本文を設定することも可能ですが、あまり実用的ではないため、
今回は、メール本文のテンプレートファイルを作成し、そのテンプレートをコントローラーで読み込む形で実装します。
メール本文のテンプレートを作成
【当選者の氏名】
姓: <?= "$lastName\n" ?>
名: <?= "$firstName\n" ?>
※本メールは自動送信です。
本メールには返信しないでください。
ファイル名:sample.php
改行やスペースなどをエスケープシーケンスで記述しないといけなくなるため
PHP構文では書かず、プレーンテキストとして書くほうがおすすめです。
変数を使用する場合は、本文の中にecho出力を記述します。
※末尾が変数の行で改行する場合は、echo内で改行エスケープする必要があります。
Mailerクラスの使用方法
本文のテンプレートファイルの作成が終わったため、
次は、コントローラー内でメールの設定&送信処理を実装します。
use Cake\Mailer\Mailer;
まずは、Mailerクラスをロードします。
$mailer = new Mailer();
Mailerクラスのインスタンスを生成します。
$mailer->setFrom('from@goat-inc.co.jp');
送信元のメールアドレスを設定します。
$mailer->setTo('to@goat-inc.co.jp');
$mailer->setCc('cc@goat-inc.co.jp');
$mailer->setBcc('bcc@goat-inc.co.jp');
送信先のメールアドレスを設定します。
$mailer->setEmailFormat('text');
メールの書式を指定します(HTMLメールの場合は’html’)
$mailer->setSubject('サンプルメールについて');
メールの件名を入力します。
$mailer->viewBuilder()
->setTemplate('sample')
->setVars([
'lastName' => '山田',
'firstName' => '太郎'
]);
setTemplateには使用するテンプレートのファイル名(拡張子無し)を指定し、
setVarsでは、そのテンプレート内で使用する変数の値を設定します。
$mailer->deliver();
メール送信を実行します。
$mailer
->setFrom('from@goat-inc.co.jp')
->setTo('to@goat-inc.co.jp')
->setCc('cc@goat-inc.co.jp')
->setBcc('bcc@goat-inc.co.jp')
->setEmailFormat('text')
->setSubject('サンプルメールについて')
->viewBuilder()
->setTemplate('sample')
->setVars([
'lastName' => '山田',
'firstName' => '太郎'
])
->deliver();
このように全て繋げて記述することも可能です。
最後に
以前まで使用されていたCake\Mailer\Emailクラスは、公式では非推奨となっているため、
今後メール送信を行う場合は、Cake\Mailer\Mailerクラスを使用するようにしましょう。