2010-06-15 2 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 LOCALHOST 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

ответ

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] каждый раз. Иногда код посылает, а иногда нет. Это действительно странно. –

0

Я просто хотел добавить на это. для меня проблема была в том, что мой SMTP-сервер перезагрузился, dovecot не вернулся. как только я начал dovecot, все было хорошо. поэтому в конце концов это была проблема с smtp, поэтому, если у кого-то еще есть эта проблема, вы можете в значительной степени убедиться, что это проблема с smtp.