Назад | Перейти на главную страницу

Ошибка синхронизации Exim SMTP при ТРУБОПРОВОДЕ

Я отправляю сообщения электронной почты из сценария PHP на сервер Exim 4.71 через SMTP. Сервер рекламирует конвейерную обработку, поэтому я пытаюсь ею воспользоваться. Однако, когда я перечитываю коды возврата, я наконец получаю 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: my@email.com\nDate: Wed, 12 Jun 2013 11:35:50 +1200\nReturn-Path: info@sender.com\nSubject: Blablablablabla"

Мне интересно, почему говорится: «следующий ввод отправлен слишком рано». Я использую конвейерную обработку, поэтому мне должно быть разрешено отправлять свои данные, ничего не дожидаясь.

Обратите внимание: когда я не использую конвейерную обработку, все идет нормально.

Вы должны дождаться ответа на команду DATA перед отправкой фактических данных SMTP. Таким образом, если сервер отклоняет MAIL, RCPT (s) или DATA, вы можете выйти из транзакции, прежде чем перекачивать потенциально большие тела сообщений по конвейеру.

Использование конвейерной обработки не позволяет выбросить все по конвейеру, не заботясь об этом, вам все равно нужно проверять ответы SMTP, и существуют правила о том, какие глаголы должны быть последними в наборе, который отправляется вместе, и т. Д. конвейерная обработка RFC довольно хорошо объясняет это