无法阻止在Laravel中显示到浏览器的SwiftMailer异常

时间:2014-01-20 16:18:27

标签: php laravel swiftmailer

我正在使用Laravel作为网站。我有一个用户可以联系我的页面。这向我发送了一封使用SwiftMailer软件包的电子邮件。我刚刚注意到在尝试发送消息时出现以下错误

Fatal error: Uncaught exception 'Swift_TransportException'

此处/Applications/MAMP/htdocs/yooies_site/bundles/swiftmailer/library/classes/Swift/Transport/Esmtp/AuthHandler.php on line 176

抛出异常

此位置的代码是:

  throw new Swift_TransportException(
'Failed to authenticate on SMTP server with username "' .
$this->_username . '" using ' . $count . ' possible authenticators'
);

错误的原因并不担心(我发现我更改了我的邮件密码而忘记更改我的网站电子邮件配置)

我遇到的问题是我有Laravel设置来记录任何异常,而不是在主页面上显示它们。我在error.php配置文件中有以下设置

'detail' => false,
'log' => true,

为什么我的网站在页面上显示异常而不是500错误?

此处有完整的堆栈跟踪(请注意,我已删除了我的网站实名,并替换为'site'

Fatal error: Uncaught exception 'Swift_TransportException' 
with message 'Failed to authenticate on SMTP server with username "info+site.com" using 2 possible authenticators' 
in /Applications/MAMP/htdocs/site/bundles/swiftmailer/library/classes/Swift/Transport/Esmtp/AuthHandler.php:176 

Stack trace: 
#0 /Applications/MAMP/htdocs/site/bundles/swiftmailer/library/classes/Swift/Transport/EsmtpTransport.php(307): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport)) 
#1 /Applications/MAMP/htdocs/site/bundles/swiftmailer/library/classes/Swift/Transport/AbstractSmtpTransport.php(124): Swift_Transport_EsmtpTransport->_doHeloCommand() 
#2 /Applications/MAMP/htdocs/site/bundles/swiftmailer/library/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start() 
#3 /Applications/MAMP/htdocs/site/application/libraries/personal/mailer.php(55): Swift_Mailer->send(Object(Swift_Message)) 
#4 /Applications/MAMP/htdocs/site/application/config/error.php(91): Personal\Mai in /Applications/MAMP/htdocs/site/bundles/swiftmailer/library/classes/Swift/Transport/Esmtp/AuthHandler.php on line 176

Laravel版本为L3。

此处捆绑网址http://bundles.laravel.com/bundle/swiftmailer

1 个答案:

答案 0 :(得分:2)

Swiftmailer不会触及任何负责显示错误的配置。生产服务器的建议包括display_errors = Offdisplay_startup_errors = Off,可以在php.inihttpd.conf.htaccess.user.ini中设置,等,甚至使用ini_set()。您应该确保正确设置这些指令。

我不熟悉Laravel如何处理异常和错误,但看起来Swift_TransportException被抛出Laravel的错误处理过程之外。你能指出应用程序流程中抛出异常的位置吗?可能是堆栈跟踪?

PS:只是一个提示:发送电子邮件之类的事情最好不要在请求期间完成。您可以将其卸载到某种队列,并让服务器上的另一个进程处理它。你可以看一下Gearman

<强>更新

查看堆栈跟踪,似乎Laravel确实捕获了异常,因为Log::exception();被调用(在application/config/error.php第91行)。但痕迹并没有揭示它是如何到达那里的。也许你可以在安装了Xdebug的开发机器上运行它。抛出异常时,Xdebug将为您提供更精确的堆栈跟踪,以public/index.php(请求开始的位置)结束。