Предпросмотр электронной почты в DebugKit CakePHP 3



Вступление

Тестирование панели Email плагина DebugKit мы начнем с развертывания самого приложения на базе фреймворка CakePHP 3. Создадим в нем самую простую логику управления статьями и организуем отправку сообщения при переходе, например, на страницу списка статей (пусть в нашем случае это будут контроллер ArticlesController и экшен index). Как это сделать смотрим тут, организация отправки email сообщений подробно описана тут. Далее включаем DebugKit и приступаем к работе.

Я вышеуказанные манипуляции выполнил на своем тестовом домене (не локальном) с целью организации отправки реальных сообщений. Если вы все правильно сделали и при переходе на страницу со списком статей было отправлено сообщение, то на вкладке рядом с надписью Email плагина DebugKit вы увидите цифру, которая будет обозначать, сколько сообщений было отправлено при текущем запросе. В моем случае сообщение было отправлено одно:

panel-email

Открыв вкладку Email, слева в сайтбаре можно увидеть список тем отправленных сообщений (если их было больше одного), а справа от сайтбара отражается выбранное сообщение. Сначала список View As (смотреть как: text или html), ниже заголовки сервера и в самом низу тело сообщения в формате, который выбран выше:

email-body

Email previews (предпросмотр сообщений)

На картинке выше, под шапкой сайта, можно увидеть следующую надпись со ссылкой: Why not test your emails interactively instead? Go to the Email previews page. Таким образом, если вы желаете протестировать свои электронные сообщения вместо отправки, то просто перейдите по ссылке. Сделав это, вы попадете на страницу ваш-домен/debug-kit/mail-preview, на которой найдете инструкцию по организации предпросмотра сообщений.

А именно, выполнить нужно следующее. Допустим у вас в классе Mailer (класс предпросмотра MailPreview используется в приложении CakePHP именно с классом Mailer) выполнена настройка отправки сообщений:

<?php
namespace App\Mailer;

use Cake\Mailer\Mailer;
use Cake\Event\EventListenerInterface;  

class SendEmailMailer extends Mailer implements EventListenerInterface 
{
    static public $name = 'SendEmail';
    
    public function sendEmail($user)
    {
        return $this
        ->setTo('User.email@mail.ru')
        ->setSubject('Пример отправки сообщения пользователю')
        ->setEmailFormat('both')  
        ->setLayout('send_email', 'send_email')
        ->setTemplate('default', 'default')
        ->set(['content'=>'<h1>'.sprintf('Здравствуйте %s', $user).'</h1><br> <p>Это тестовое сообщение, отправленное Вам при изучении урока <strong>Предпросмотр электронной почты в DebugKit CakePHP 3</strong></p>']); 
    }
}

Создаете класс MailPreview (файл src/Mailer/Preview/UserMailPreview.php), в котором можно будет передать некоторые фиктивные значения:

<?php
namespace App\Mailer\Preview;

use DebugKit\Mailer\MailPreview;

class SendEmailPreview extends MailPreview
{
    public function welcome()
    {
        $user = 'Иван';
        //Либо вы можете подгрузить какого нибудь пользователя именно для теста:
        //$this->loadModel("Users");
        //$user = $this->Users->find()->first(); 
        return $this->getMailer("SendEmail")
            ->sendEmail($user)
            ->setSubject('Тестовая отправка')
            ->set(['content'=>'<h1>'.sprintf('Здравствуйте %s', $user).'</h1><br> <p>Это предпросмотр тестового сообщения</p>']);
    }
}

Теперь просто обновите страницу ваш-домен/debug-kit/mail-preview и под шапкой, выше инструкции, вы увидите ссылку на просмотр созданного тестового сообщения.

А на этом у меня всё, надеюсь данная информация была для вас полезной!