【问题标题】:How to get SMTP sesion error with SwiftMailer in Laravel如何在 Laravel 中使用 SwiftMailer 获取 SMTP 会话错误
【发布时间】:2020-12-11 10:44:01
【问题描述】:

我尝试向虚假地址发送电子邮件。如果此电子邮件地址不可用并且无法发送电子邮件,我将无法捕获错误。 在 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 会话的错误?

【问题讨论】:

  • 你的laravel日志有没有错误
  • Laravel 日志中没有错误
  • 尝试使用 Swift_TransportException

标签: laravel email smtp swiftmailer


【解决方案1】:

找到了这个解决方案:

将 SwiftMailer 插件添加到邮件程序

$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 数组中搜索任何错误消息。

为了测试我使用dump($logger);

这帮助我找到了解决方案: How to set SwifMailer plugins when using the Laravel mail class?

【讨论】:

  • 很好,虽然你也可以使用 try catch & catch 所有的 Swift_TransportException
  • 谢谢,我也试试
猜你喜欢
  • 2018-01-30
  • 2013-05-24
  • 2012-11-16
  • 2017-03-15
  • 1970-01-01
  • 2012-10-26
  • 2011-11-02
  • 2020-05-30
  • 1970-01-01
相关资源
最近更新 更多