我正在使用 Yii2 使用 yii2-symfonymailer 发送电子邮件。
如果出现错误,它会从
false
方法返回 send()
,这样我就可以检查 sendind 是否成功。
我的问题是: 发送失败时如何获取错误消息?
这是发送代码。
$message = Yii::$app->mailer->compose()
->setFrom('[email protected]')
->setTo('[email protected]')
->setSubject('Message subject')
->setTextBody('Plain text content')
->setHtmlBody('<b>HTML content</b>');
if (!$message->send()) {
// handle the errors
}
为了调试,我需要一种方法来获取来自 send() 方法的错误信息的异常,就像在 php 邮件程序中一样(https://stackoverflow.com/a/2386576/2377961)。
或者一种“询问”邮件程序有关“lastErrors”的方法,例如像这样:
if (!$message->send()) {
echo "Could not send: " . Yii::$app->mailer->getLastError();
}
我在另一个 yii2 邮件程序中发现了类似的问题(请参阅 Yii 2 的基本邮件程序中返回错误)。
但这不适用于我的邮件程序,并且无法更改邮件程序。
当
$message->send()
返回 false
时,尝试从邮件程序获取最后一个错误是没有意义的。
这是因为当邮件程序本身发送失败时,
$message->send()
永远不会返回 false。成功时它将返回 true
,失败时会抛出异常。
sendMessage()
邮件程序中的功能实现。
$message->send()
方法返回false
的唯一情况是当beforeSend()
回调返回false
时。只有在 yii\mail\MailEvent::$isValid
事件期间将 yii\mail\BaseMailer::EVENT_BEFORE_SEND
属性设置为 false 时才会发生这种情况。