PHPスクリプトからSMTP経由でExim4.71サーバーに電子メールメッセージを送信しています。サーバーはパイプラインをアドバタイズしているので、それを利用しようとしています。しかし、リターンコードを読み返すと最後に554 SMTP synchronization error
を取得します。サーバー側では、エラーは次のようになります。
SMTP protocol synchronization error (next input sent too soon: pipelining was advertised): rejected "DATA" H=(localhost) [111.111.111.111] next input="To: [email protected]\nDate: Wed, 12 Jun 2013 11:35:50 +1200\nReturn-Path: [email protected]\nSubject: Blablablablabla"
「次の入力が早すぎる」と言っているのはなぜだろうか。私はパイプラインを使用しているので、何も待たずにデータを送信できるようにする必要があります。
パイプラインを使用しない場合は、すべてうまくいくことに注意してください。
実際のSMTPデータを送信する前に、DATA動詞への応答を待つ必要があります。そうすれば、サーバーがMAIL、RCPT、またはDATAを拒否した場合、潜在的に大きなメッセージ本文をパイプに送り込む前に、トランザクションから抜け出すことができます。
パイプラインを使用しても、気にせずにすべてをパイプに投げ込むことはできません。SMTP応答を確認する必要があり、一緒に送信されるセットの最後に必要な動詞などに関するルールがあります。 パイプラインRFC それを説明するのはかなり良い仕事をします