1

Symfony + 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(
    '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の承認と関係がある必要があります。お知らせ下さい!:)

4

3 に答える 3

2

SMTPの問題のように聞こえます。

コマンドラインから次のことを試してみるとどうなりますか。

telnet splodge.loc 25

接続できますか?返信行は220で始まりますか?

そうでない場合は、SMTPサーバー(またはファイアウォール)の構成に問題があります。

于 2010-06-16T00:21:12.653 に答える
0

メール送信を再試行するループを作成することで、これを機能させることができました...

$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);

次に、再試行回数を制限するための構成設定をいくつか追加します。

于 2010-06-18T07:54:12.303 に答える
0

これに追加したかっただけです。私にとっての問題は、SMTPサーバーが再起動したときに、dovecotが起動しなかったことです。私が鳩小屋を始めたとたんに、すべてが大丈夫でした。つまり、最終的にはSMTPの問題だったので、他の誰かがこの問題を抱えている場合は、SMTPの問題であるとほぼ確信できます。

于 2011-06-11T00:06:12.303 に答える