CakePHP 3.x - электронная почта для входа вместо отправки во время отладки - PullRequest
0 голосов
/ 10 января 2019

Я хотел бы переключить свое приложение на конфигурацию, в которой электронная почта фактически не отправляется, а вместо этого сохраняется в файле журнала.
Таким образом, я смогу протестировать свое приложение в обычном режиме, не боясь случайно по электронной почте сотням пользователей и не спамя сам.

Я подумал, что с EmailTransports может быть решение. Например, при использовании DebugTransport электронные письма вообще не отправляются, вместо этого содержимое почты возвращается только функцией ->send().

Недостатком этого транспорта является то, что мне нужно изменить код контроллера для отображения содержимого, которого я хотел бы избежать.

Итак, есть ли такая конфигурация, чтобы электронная почта сохранялась в файлах, а не отправлялась, например ::

[root]
    logs/
         emails/
             2019-10-01_15:32_email@example.com.txt
             2019-10-01_16:54_another_recipient@example.com.txt
             ...

1 Ответ

0 голосов
/ 11 января 2019

Нет такой встроенной конфигурации, нет, но вы можете легко создать свой собственный транспорт, который записывает электронные письма в файлы вместо их отправки.

Вот очень простой пример транспорта, который расширяет транспорт отладки и записывает данные в пользовательскую область ведения журнала :

namespace App\Mailer\Transport;

use Cake\Log\LogTrait;
use Cake\Mailer\Email;
use Cake\Mailer\Transport\DebugTransport;
use Psr\Log\LogLevel;

class TestTransport extends DebugTransport
{
    use LogTrait;

    public function send(Email $email)
    {
        $data = parent::send($email);
        $this->log(json_encode($data), LogLevel::DEBUG, ['scope' => ['emails']]);

        return $data;
    }
}

Смотри также

...