Silex Swiftmailer Swift_TransportException 无法捕获

Silex Swiftmailer Swift_TransportException uncatchable

我正在开发一个基于 silex 框架的 web 应用程序,具有不错的邮件功能。发送邮件在基本配置和与邮件服务器建立连接的情况下工作正常。在错误的情况下,例如由于连接丢失,我想记录原因并防止将它们发送给客户端。但是我无法捕获邮件程序错误,尤其是 Swift_TransportException。我封装了 'send' 函数的调用并添加了一个错误处理程序,但都没有成功。这是一个错误,还是我遗漏了什么?

错误处理程序:

    $app->error(function (\Swift_TransportException $e, Request $request, $code) {
      //TODO log
    });

发送函数的用法:

        try{
            $message = \Swift_Message::newInstance()
                ->setSubject($mail->getSubject())
                ->setFrom($mail->getFrom())
                ->setTo($mail->getTo())
                ->setBody($mail->getBody());

            $app['mailer']->send($message);
        }
        catch(\Swift_TransportException $exception)
        {
          //TODO log
        }

我在这个 post:

中找到了解决我的问题的方法

silex-swiftmailer-not-making-smtp-connection-upon-execution

综上所述,问题是由 silex 中 swiftmailer 的默认行为引起的。默认情况下,邮件不会在代码执行时直接发送,而是在请求结果返回给客户端后缓冲并发送。因此错误不会在 try 块中捕获。要更改此行为,我将引用的 post 中的代码稍作修改添加到我的邮件注册中。

$app->register(new Silex\Provider\SwiftmailerServiceProvider());
$app['mailer'] = new \Swift_Mailer($app['swiftmailer.transport']);

感谢 igor 的精彩解释。