【CakePHP】Mailerクラスによるメール送信

#PHP
written by みよしや

こんにちは、みよしやです。

今回は、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クラスを使用するようにしましょう。