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 的精彩解释。
我正在开发一个基于 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 的精彩解释。