CakePHP 3.x-电子邮件记录而不是在调试期间发送

时间:2019-01-10 15:42:29

标签: email cakephp logging cakephp-3.0

我想将我的应用程序切换到实际上不发送电子邮件,而是保存到日志文件的配置。
这样,我可以正常测试我的应用程序,而不必担心会意外地向数百个用户发送电子邮件并且不会向自己发送垃圾邮件。

我认为使用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 :(得分:2)

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

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

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

另请参见