Silex Swiftmailer Swift_TransportException无法捕获

时间:2016-10-25 19:51:50

标签: php symfony exception-handling silex swiftmailer

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

错误处理程序:

    $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
        }

1 个答案:

答案 0 :(得分:1)

我在这篇文章中找到了解决问题的方法:

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

总结一下,问题是由silex中swiftmailer的默认行为引起的。默认情况下,邮件不会在代码执行时直接发送,而是在请求结果返回给客户端后进行缓冲和发送。因此,try块中不会捕获错误。为了改变这种行为,我在引用的帖子中添加了稍微修改过的代码到我的邮件程序注册。

HTTP 406 Not Acceptable
Allow: GET
Content-Type: application/vnd.acme+json
Vary: Accept

{
    "detail": "Invalid version in \"Accept\" header."
}

感谢igor的好解释。