CakePHP4でメールを送信する

今回はCakePHP4でメールを送信する方法を紹介します。
本記事ではテンプレートを使用する方法を記載します。

また、HTMLメールとテキストメールを送信することができますが、本記事ではテキストメールを送信する例で記載します。

メールのテンプレート

メールの本文はテンプレートファイルで準備します。
テンプレートファイルのパスは「templates/email/text」となります。

以下のような形式で記述します。

<?php

echo "この度はXXXXXXXにご登録いただき、ありがとうございます。\n";
echo "\n";
echo "下記のURLにアクセスしていただくと、ユーザー登録が完了します。\n";
echo "下記のURLの有効期限は24時間です。\n";
echo $this->Url->build([
    "controller" => "users",
    "action" => "add-complete",
    "?" => ["token" => $token],
], ['fullBase' => true])."\n";

PHPの構文で記載するため、「echo」を使用して文字列で本文を記述します。
改行したい場合は「\n」となります。

メール本文中にURLを記載したい場合は、7行目のようにUrlヘルパーを使用します。
buildメソッドにて、コントローラーとアクション(メソッド)を指定しています。

GETパラメータを付与したい場合は、10行目のように「?」とパラメータの名前と値を記述します。
パラメータは変数の形式で指定すると、コントローラーから渡すことができます。

第2引数の「fullBase’ => true」を付与すると、URLが絶対URLとなり、http(https)から始まります。
この絶対URLにする指定は、CakePHP4になって変わった部分なので、ご注意ください。

Cake\View\Helper\UrlHelper::build() は第 2 引数にブール値を受け入れなくなりました。 代わりに、 ['fullBase’ => true] を使用しなければなりません。

CakePHP4.0 移行ガイド

コントローラーの処理

続いてコントローラーの処理です。
「Cake\Mailer\Mailer」クラスを使用します。

use Cake\Mailer\Mailer;

使用するクラスは、CakePHP4になって変わった部分なので、ご注意ください。

Cake\Mailer\Email クラスは非推奨になります。代わりに、 Cake\Mailer\Mailer を使用してください。

CakePHP4.0 移行ガイド

コントローラーの処理は以下のように記述します。

$mailer = new Mailer();
$mailer->setEmailFormat('text')
    ->setTo('toのメールアドレスをここに入れる')
    ->setFrom(['fromのメールアドレスをここに入れる' => 'fromの名前をここに入れる'])
    ->setSubject('件名をここに入れる')
    ->viewBuilder()
        ->setTemplate('user_added')
        ->setVar("token", $token);

$mailer->deliver();

7行目で指定しているのが上記で作成したテンプレートです。
8行目ではテンプレート中のパラメータを指定しています。

メールのデバッグ設定

開発中には、メールの送信内容を簡単に確認することができます。

「app_local.php」にてメールの設定を行っている部分を以下のように修正します。

'EmailTransport' => [
    'default' => [
        'className' => DebugTransport::class,
        'host' => 'localhost',
        'port' => 25,
        'username' => null,
        'password' => null,
        'client' => null,
        'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
    ],
],

3行目の「className」を指定しています。
DebugTransportクラスを使用すると、実際に送信されるメールの内容を「Debug Kit」にて確認することができます。

実際にメールを送信すると、画面下部の「Debug Kit」で「Mail」の部分が1となりました。

Debug Kit

「Mail」の部分をクリックすると、実際に送信されるメールの内容を確認できます。

Debug Kitでメールを確認

メールを送った後にリダイレクトをする場合は、過去のリクエストを辿って見る必要があります。
「Debug Kit」の「History」をクリックすると、過去のリクエストの内容が見れますので、以下の赤枠のようにリダイレクトしているリクエストを選択すると、メールの内容が確認できます。

Debug Kitでリクエストの履歴を確認

▼メール送信に関する詳しい内容については、以下の公式ドキュメントをご参照ください。
https://book.cakephp.org/4/ja/core-libraries/email.html