Yii2 BaseMailer测试环境未保存或发送

时间:2018-09-06 10:01:47

标签: yii2 swiftmailer codeception

我正在运行一些单元测试,其中一项测试检查是否生成并发送了电子邮件。

我已经检查了文档,以强制Yii将电子邮件保存到文件中,而不是发送,我已按如下方式配置mailer组件:

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@common/mail',
        // send all mails to a file by default. You have to set
        // 'useFileTransport' to false and configure a transport
        // for the mailer to send real emails.
        'useFileTransport' => true
    ],

运行测试时,我看到Yii::info函数发出的BaseMailer send()消息。

  

[yii \ mail \ BaseMailer :: send]“将电子邮件“直接付款通知”发送到“ test@test.co.uk””

但是电子邮件没有保存在任何地方,应该为runtime/mail,也不会发送到任何地方。

我尝试使用以下命令在运行时设置useFileTransport

$mailer = Yii::$app->mailer;
$mailer->useFileTransport = true;
$mailer->composer... 

但是没有任何变化,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

查看文档yii\mail\BaseMailer::useFileTransport(如果启用),则该选项将强制将邮件数据保存到本地文件中,而不是定期发送。这些文件将保存在yii\mail\BaseMailer::fileTransportPath下,默认情况下为@runtime/mail

因此,请检查您的目录权限(如果可以),可以使用fileTransportPath将其更改为您知道不会有权限问题的任何其他目录。

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@common/mail',
        // send all mails to a file by default. You have to set
        // 'useFileTransport' to false and configure a transport
        // for the mailer to send real emails.
        'useFileTransport' => true,
        'fileTransportPath'=>'your/path',
    ],

答案 1 :(得分:1)

密码接收器会覆盖您的邮件收发器设置([1] [2])来使用custom mailer,它不会发送或保存任何内容。这很有意义-您不想在测试期间发送一堆电子邮件。

您可以使用Codeception自定义断言或方法来测试已发送的电子邮件:

$I->seeEmailIsSent(3); // Test that three emails was sent

$messages = $I->grabSentEmails();
$I->assertEquals('admin@site,com', $messages[0]->getTo());