2010-06-15 79 views
1

我使用的Symfony + SwiftMailer和SwiftMailer得到以下錯誤:爲什麼SwiftMailer拋出「內部服務器錯誤」?

500 | Internal Server Error | Swift_TransportException 
Expected response code 220 but got code "", with message "" 

,不能找出原因。我使用hMailServer我的本地機器上,並且有安裝我的factories.yml文件的文件(如我使用的Symfony)如下:

mailer: 
    class: sfMailer 
    param: 
     logging: %SF_LOGGING_ENABLED% 
     charset: %SF_CHARSET% 
     delivery_strategy: realtime 
     transport: 
     class: Swift_SmtpTransport 
     param: 
      host: splodge.loc 
      port: 25 
      encryption: ~ 
      username: ~ 
      password: ~ 

我用下面的代碼來發送:

$message = $this->getMailer()->compose(
    '[email protected]', 
    '[email protected]', 
    'Reset Password', 
    'Message' 
); 
$result = $this->getMailer()->send($message); 

有沒有人有過這樣的問題?

我發現有時和非常隨機的發送過程中,但每隔一段時間,我都會收到上述錯誤消息。因此,不斷刷新發送郵件的頁面,不可預知地失敗,並且隨着代碼有時起作用,很難弄清楚什麼是錯誤的。

任何幫助將不勝感激!


進一步的調查表明,SMTP服務器併發送[220本地主機ESMTP],但考慮看看hMailServer登錄後,我發現了以下內容:

"TCPIP" 5232 "2010-06-16 11:40:54.043" "TCPConnection - Posting AcceptEx on 0.0.0.0:25" 
"DEBUG" 5232 "2010-06-16 11:40:54.043" "Creating session 51" 
"SMTPD" 5232 51 "2010-06-16 11:40:54.043" "127.0.0.1" "SENT: 220 localhost ESMTP" 
"DEBUG" 5296 "2010-06-16 11:40:54.199" "The read operation failed. Bytes transferred: 0 Remote IP: 127.0.0.1, Session: 51, Code: 10054, Message: An existing connection was forcibly closed by the remote host" 
"DEBUG" 5296 "2010-06-16 11:40:54.199" "Ending session 51" 

難道說SwiftMailer是HELO/EHLOing太早了,這只是一個時間問題?我可以延遲HELO傳輸嗎?

的上等原木,當事情實際上發送如下所示:

"TCPIP" 5232 "2010-06-16 11:42:21.278" "TCPConnection - Posting AcceptEx on 0.0.0.0:25" 
"DEBUG" 5232 "2010-06-16 11:42:21.294" "Creating session 54" 
"SMTPD" 5232 54 "2010-06-16 11:42:21.294" "127.0.0.1" "SENT: 220 localhost ESMTP" 
"SMTPD" 5224 54 "2010-06-16 11:42:21.294" "127.0.0.1" "RECEIVED: EHLO splodge.loc" 

所以它必須與HELO/EHLO確認的事情。請指教! :)

+0

問題可能在於您的主機。你爲什麼不嘗試Gmail,看看你是否遇到同樣的問題。 – Dziamid 2011-06-11 13:06:57

回答

0

管理通過創建一個循環,重試郵件發送得到這個工作...

$sendResult = false; 
do 
{ 
    try 
    { 
     $message = Swift_Message::newInstance() 
      ->setFrom('[email protected]', 'Mr.Postman') 
      ->setTo($to) 
      ->setSubject('Password reminder...') 
      ->setBody($this->getPartial('resetPasswordEmail', array(
       'newPassword' => $newPassword)), 'text/html'); 
     $sendResult = $this->getMailer()->send($message); 
    } 
    catch(Exception $e){/*Do nothing*/} 
} 
while($sendResult !== 1); 

接下來,我將添加一些配置設置來限制重試次數。

2

聽起來像一個SMTP問題。

如果您嘗試從命令行下面會發生什麼:

telnet splodge.loc 25

可以連接?答覆線是否以220開頭?

如果沒有,那麼你的SMTP服務器(或者也許是防火牆)配置有問題。

+0

使用telnet時,我每次都得到:[220 localhost ESMTP]。代碼有時會發送,有時不會。這真的很奇怪。 – 2010-06-16 09:11:40

0

我只是想添加到此。對我來說,問題是當我的smtp服務器重新啓動時,dovecot沒有回來。只要我開始鴿舍,一切都很好。所以最後它是一個smtp問題,所以如果其他人有這個問題,你幾乎可以肯定這是一個smtp問題。

相關問題