如何在symfony controller / swift消息中抑制错误消息,例如如果用户的电子邮件不存在,则提示服务器出现问题,或者电子邮件地址根本不符合RFC 2822。
例如,我们遇到以下CRITICAL错误......
request.CRITICAL:Swift_RfcComplianceException:给定[xxx@xxx.com]的邮箱中的地址不符合RFC 2822,3.6.2。 (未被捕获的例外)在$
...然后用户会收到一个symfony错误页面"出现错误"在任何情况下我都需要压制。
一个简单的 @ $ this-&gt; get(&#39; mailer&#39;) - &gt; send($ message); 不幸地在这里工作...... < / p>
protected function generateEmail($name)
{
$user = $this->getDoctrine()
->getRepository('XXX')
->findOneBy(array('name' => $name));
if (!$user) {
exit();
}
else {
$message = \Swift_Message::newInstance()
->setSubject('xxx')
->setFrom(array('xxx@xxx.com' => 'xxx'))
->setTo($user->getEmail())
->setContentType('text/html')
->setBody(
$this->renderView(
'AcmeBundle:Template:mail/confirmed.html.twig'
)
)
;
$this->get('mailer')->send($message);
// a simple @$this->get('mailer')->send($message); doesn't work here
}
return true;
}
答案 0 :(得分:4)
要简单地抑制错误,请将send方法包装在try-catch块中。明智地选择例外类型。以下示例仅捕获Swift_RfcComplicanceExceptions
。
try {
$this->get('mailer')->send($message);
} catch (\Swift_RfcComplianceException $exception) {
// do something like proper error handling or log this error somewhere
}
我认为事先应用一些验证是合理的,因此您可以向用户显示一个不错的错误。
答案 1 :(得分:1)
我不确定try catch块是否有效,因为邮件可能会在请求过程中稍后发送:http://symfony.com/fr/doc/current/components/http_kernel/introduction.html#l-evenement-kernel-terminate
如果使用框架Full Stack版本,则这是默认行为。
我在这里也发现了一些参考:Unable to send e-mail from within custom Symfony2 command but can from elsewhere in app
您可以在配置中更改Swiftmailer假脱机策略以发送直接邮件......