对于一个项目(关于房地产),我提供了一个联系表格,如果访客有兴趣购买/租用房地产,可以联系房地产经纪人。
我正在使用 Symfony2 及其库。对于联系邮件,我使用的是 Swiftmailer 库。好吧,我有下一个处理表单提交的代码。在那里,我创建了一个能够发送邮件的邮件对象。它可以工作,但如果发送方/接收方的 smtp 主机出现问题,我想提供错误解决服务。
这是代码,
$data = $contactForm->getData();
try {
// create body text
$body = $app['twig']->render('mailTemplate.twig', array('data' => $data, 'immoid' => $immoID));
// set mail
$mail = \Swift_Message::newInstance()
->setSubject('Contact reaction on your immo offer.')
->setFrom($app['swiftconfig']['sender'])
->setTo($contactinfo['contactmail'])
->setBody($body, 'text/html');
// send mail
$app['mailer']->send($mail);
// redirect if successfull
$app->redirect($app['url_generator']->generate('immoDetail', array('immoID' => $immoID)));
}
catch (Swift_TransportException $STe) {
// logging error
$string = date("Y-m-d H:i:s") . ' - ' . $STe->getMessage() . PHP_EOL;
file_put_contents("errorlog.txt", $string, FILE_APPEND);
// send error note to user
$errorMsg = "the mail service has encountered a problem. Please retry later or contact the site admin.";
}
catch (Exception $e) {
// logging error
$string = date("Y-m-d H:i:s") . ' - GENERAL ERROR - ' . $e->getMessage() . PHP_EOL;
file_put_contents("errorlog.txt", $string, FILE_APPEND);
// redirect to error page
$app->abort(500, "Oops, something went seriously wrong. Please retry later !");
}
($app['swiftconfig']['sender'] = 来自主机的邮件地址 / $contactinfo['contactmail'] = 来自站点访问者的邮件地址(以联系表格形式提交))
现在,当 smtp 主机不工作时,Swiftmailer 确实会发送一个异常,但 try-catch 块并没有捕捉到它。该功能正在继续。甚至根 try-catch 块(在 app.php 中)也没有捕捉到它。因此,您会在网页上看到一个大的 PHP 错误,这不应该发生。来自它的消息如下所述,
SCREAM: Error suppression ignored for
---
Fatal error: Uncaught exception 'Swift_TransportException' with message ' in C:\...\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php on line 266
---
Swift_TransportException: Connection could not be established with host <output omitted>
有谁知道为什么 try catch 块没有捕获自定义异常?我已经调查了类文件和进度,但我没有看到任何异常活动。
我希望有人可以解决这个问题,因为 PHP 错误不应该出现在网站页面上。