cakePHP4でログイン時にメールを送信する

概要

不正ログイン防止の一環として、cakePHP4でログイン時にユーザーにメールを送信する方法について解説します。

前提環境
  • Hosting Server: さくらインターネット
  • PHP: 7.4.9
  • cakePHP: 4.1.1

コードのポイント

  • ログイン時の処理なので、UsersControllerのloginメソッドのログイン成功したあと、の箇所に記載します。
  • cakePHP4ではMailerクラスを使用するので、UsersControllerのnamespaneの後に「use Cake\Mailer\Mailer;」を記載してください。
    ※詳しくはcakePHP4のマニュアルのMailerの項を参照してください。

サンプルコード

UsersController

<?php
namespace App\Controller;
use Cake\Mailer\Mailer;  // Mailerを使用する宣言を追加

class UsersController extends AppController
{
    public function login()
    {
        $this->request->allowMethod(['get', 'post']);
        $result = $this->Authentication->getResult();
        if ($result->isValid()) {
            // ログイン成功時にメール送信処理を行います。
            // Authenticationを使ってusersテーブルのユーザー情報を取得
            $user = $this->Authentication->getIdentity();
            $mailer = new Mailer('default');
            $mailer->setEmailFormat('html')
                ->setFrom([FROM_MAIL => FROM_MAIL_NAME]) // Fromのメールアドレス等はconfig/bootstrap.phpで定数宣言しています。
                ->setTo($user->email)
                ->setSubject('ログインのお知らせ')
                ->viewBuilder()
                ->setTemplate('login') //  templates/email/html/login.php
                ->setLayout('default')  // templates/layout/email/html/default.php
                ->setVar('username', $user->username);  // usersテーブルに追加したusernameカラムの情報をテンプレートに適用
            $mailer->deliver();

            $redirect = $this->request->getQuery('redirect', [
                'controller' => 'Pages',
                'action' => 'home',
            ]);
    
            return $this->redirect($redirect);
        }

        // 認証失敗した場合は、エラーを表示します
        if ($this->request->is('post') && !$result->isValid()) {
            $this->Flash->error(__('メールアドレスパまたはパスワードに誤りがあります。'));
        }
    }

// 以下省略

コメントする

CAPTCHA