2014-01-20 54 views
3

我正在使用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' 
); 

的錯誤的原因不是一個擔心(我發現我改變了我的郵件密碼,並忘記在我的網站電子郵件配置中更改)

問題I有Laravel設置記錄任何異常,而不是顯示在主頁上。我有我的error.php配置文件中的以下設置

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

爲什麼然後我的網站顯示頁面上的異常,而不是500錯誤?

這裏完整的堆棧跟蹤(注意:我已刪除了我的網站的真實姓名,並與 '現場'

 
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更換。

捆綁URL這裏http://bundles.laravel.com/bundle/swiftmailer

+0

假設Laravel將不得不做一些事情,因爲這個異常沒有被捕獲 - 即使Laravel要做自己的catch,它也不能完成控制器中的代碼。如果你在現場,你可以用'try'打包電話並記錄下來,如果你在開發中,你可以重新'扔掉'嗎? – halfer

+0

事情是,Laravel已經處理了這個,但由於某些原因,不適用於這個快速郵件例外。我更願意在laravel中找到根本原因並修改以確保異常被捕獲 –

+0

好吧,+1。我對Laravel並不熟悉,但是如果您有任何自己的控制器代碼用於此捆綁包,那麼可能需要編輯它。或者這個捆綁包是獨立工作的嗎? – halfer

回答

2

Swiftmailer沒有按」不要觸及任何負責顯示錯誤的配置,生產服務器的建議中有display_errors = Offdisplay_startup_errors = Off,它們可以設置爲php.ini,httpd.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(請求開始的地方)結束。

+0

堆棧跟蹤添加到問題 –

+0

啊!我剛剛完成了!在error.php 91我有一個日誌記錄功能,可以對任何捕獲到的異常做出反應。在這裏,我發郵件給自己。所以它會捕獲電子郵件錯誤,然後嘗試發送電子郵件,這會產生另一個異常。我會給你這個賞金,因爲它幫助我指出了答案 - 知道它必須是我忽略的一些愚蠢的東西。謝謝你的幫助。 –

+0

漂亮!第二個例外確實會在Laravel的錯誤處理過程之外拋出:)隨意用您的最終發現編輯我的答案! –

相關問題