Email CakePHP 3.x-在调试期间通过电子邮件发送日志,而不是发送

Email CakePHP 3.x-在调试期间通过电子邮件发送日志,而不是发送,email,cakephp,logging,cakephp-3.0,Email,Cakephp,Logging,Cakephp 3.0,我想将我的应用程序切换到一种配置,在该配置中,电子邮件不会实际发送,而是保存到日志文件中。 通过这种方式,我可以正常测试我的应用程序,而不用担心意外地向数百名用户发送电子邮件,也不用自己发送垃圾邮件 我想用电子邮件传输可以解决问题。例如,当使用DebugTransport时,根本不发送电子邮件,而是只通过->send()函数返回邮件内容 这种传输的缺点是我必须修改控制器代码以显示内容,这是我想要避免的 那么是否有这样一种配置,即电子邮件存储到文件中而不是发送,例如: [root] log

我想将我的应用程序切换到一种配置,在该配置中,电子邮件不会实际发送,而是保存到日志文件中。
通过这种方式,我可以正常测试我的应用程序,而不用担心意外地向数百名用户发送电子邮件,也不用自己发送垃圾邮件

我想用
电子邮件传输
可以解决问题。例如,当使用
DebugTransport
时,根本不发送电子邮件,而是只通过
->send()
函数返回邮件内容

这种传输的缺点是我必须修改控制器代码以显示内容,这是我想要避免的

那么是否有这样一种配置,即电子邮件存储到文件中而不是发送,例如:

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

没有这样的内置配置,但您可以轻松创建自己的自定义传输,将电子邮件记录到文件中,而不是发送它们

下面是一个非常基本的示例传输,它扩展了调试传输,并将数据写入自定义的:

另见


    • 没有这种内置配置,但您可以轻松创建自己的自定义传输,将电子邮件记录到文件中,而不是发送它们

      下面是一个非常基本的示例传输,它扩展了调试传输,并将数据写入自定义的:

      另见

      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;
          }
      }