Почему SwiftMailer бросает «Ошибка внутреннего сервера»?

StackOverflow https://stackoverflow.com/questions/3049542

Вопрос

Я использую Symfony + SWIFTMailer и получая следующую ошибку с SWIFTMailer:

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

И не могу понять, почему. Я использую hmailserver на моем локальном компьютере и установил мои фабрики .yml file (как я использую 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(
    'noreply@splodge.loc',
    'info@splodge.loc',
    '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. Пожалуйста, порекомендуйте! :)

Это было полезно?

Решение 2

Удалось запустить эту работу, создавая цикл, который повторяет отправку почты ...

$sendResult = false;
do
{
    try
    {
        $message = Swift_Message::newInstance()
            ->setFrom('noreply@splodge.loc', '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);

Затем я добавлю некоторые настройки конфигурации, чтобы ограничить количество повторных попыток.

Другие советы

Звучит как проблема SMTP.

Что произойдет, если вы попробуете следующие из командной строки:

telnet splodge.loc 25

Можете ли вы подключиться? Начтан ли линия ответа с 220?

Если нет, то у вас есть проблема с вашим SMTP-сервером (или, возможно, брандмауэр).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top