Yii2 BaseMailer 测试环境不保存或发送
Yii2 BaseMailer test environment not saving or sending
我正在 运行 一些单元测试,其中一项测试检查电子邮件是否已生成和发送。
我已经检查了文档,强制 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] 'Sending email "Direct Debit Payment Notification" to "test@test.co.uk"'
但是电子邮件没有保存到任何地方,应该是 runtime/mail
,它也没有被发送到任何地方。
我尝试在运行时设置 useFileTransport
使用:
$mailer = Yii::$app->mailer;
$mailer->useFileTransport = true;
$mailer->composer...
但没有任何变化,我们将不胜感激。
查看文档,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',
],
Codeception 会覆盖您的邮件程序设置([1] [2]) to use custom mailer,它不会发送或保存任何内容。这是有道理的 - 您不想在测试期间发送一堆电子邮件。
您可以使用 Codeception 自定义断言或方法来测试已发送的电子邮件:
$I->seeEmailIsSent(3); // Test that three emails was sent
$messages = $I->grabSentEmails();
$I->assertEquals('admin@site,com', $messages[0]->getTo());
我正在 运行 一些单元测试,其中一项测试检查电子邮件是否已生成和发送。
我已经检查了文档,强制 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] 'Sending email "Direct Debit Payment Notification" to "test@test.co.uk"'
但是电子邮件没有保存到任何地方,应该是 runtime/mail
,它也没有被发送到任何地方。
我尝试在运行时设置 useFileTransport
使用:
$mailer = Yii::$app->mailer;
$mailer->useFileTransport = true;
$mailer->composer...
但没有任何变化,我们将不胜感激。
查看文档,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',
],
Codeception 会覆盖您的邮件程序设置([1] [2]) to use custom mailer,它不会发送或保存任何内容。这是有道理的 - 您不想在测试期间发送一堆电子邮件。
您可以使用 Codeception 自定义断言或方法来测试已发送的电子邮件:
$I->seeEmailIsSent(3); // Test that three emails was sent
$messages = $I->grabSentEmails();
$I->assertEquals('admin@site,com', $messages[0]->getTo());