我正在开发一个基于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
}
答案 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的好解释。