如何在Laravel中使用SwiftMailer获取SMTP会话错误



我试图将电子邮件发送到假地址。如果这个电子邮件地址不可用,并且电子邮件无法发送,我就不会出错。在SMTP服务器日志中,我看到:

Fri 2020-12-11 12:08:58.582: 03: --> 250-STARTTLS
Fri 2020-12-11 12:08:58.582: 03: --> 250 SIZE
Fri 2020-12-11 12:08:58.582: 02: <-- MAIL FROM:<my_email@mydomain.com>
Fri 2020-12-11 12:08:58.583: 03: --> 250 2.1.0 Sender OK
Fri 2020-12-11 12:08:58.583: 02: <-- RCPT TO:<somefakeaddress@mydomain.com>
Fri 2020-12-11 12:08:58.584: 03: --> 550 5.1.1 Recipient unknown <mi@f
Fri 2020-12-11 12:08:58.585: 02: <-- RSET
Fri 2020-12-11 12:08:58.585: 03: --> 250 2.0.0 RSET? Well, OK
Fri 2020-12-11 12:08:58.586: 02: <-- QUIT
Fri 2020-12-11 12:08:58.586: 03: --> 221 2.0.0 See ya in cyberspace
Fri 2020-12-11 12:08:58.586: 04: SMTP session terminated (Bytes in/out

但在我的Laravel应用程序中,即使我使用事件监听器,我也无法捕捉到这个错误https://laravel.com/docs/7.x/mail#events

当然,代码

Mail::to('somefakeaddress@mydomain.com')->send(new Mailable($mail_data));

不返回任何内容。

是否知道如何在Laravel中捕获SMTP会话的错误

找到了这个解决方案:

将SwiftMailer插件添加到mailer

$mailer = Mail::getSwiftMailer();
$logger = new Swift_Plugins_Loggers_ArrayLogger();
$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));

然后我们可以像往常一样发送邮件:

Mail::to(...)->send(new Mailable($data_for_mailable_class));

之后,我们可以在$logger数组中搜索任何错误消息。

测试I使用dump($logger);

这帮助我找到了一个解决方案:如何在使用Laravel邮件类时设置SwifMailer插件?

最新更新