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"
Мне интересно, почему он говорит "следующий вход отправлен слишком рано". Я использую конвейерную обработку и поэтому должен иметь возможность отправлять мои данные, ничего не ожидая.
Обратите внимание, что когда я не использую конвейеризацию, все идет хорошо.
1 ответ
Вы должны дождаться ответа на глагол DATA перед отправкой фактических данных SMTP. Таким образом, если сервер отклоняет MAIL, RCPT(s) или DATA, вы можете выйти из транзакции, прежде чем отправлять потенциально большие тела сообщений по конвейеру.
Использование конвейерной передачи не позволяет бросить все в конвейер, не заботясь об этом, вы все равно должны проверить ответы SMTP, и есть правила о том, какие глаголы должны быть последними в наборе, отправляемом вместе, и т.д. RFC конвейеризации делает довольно хорошая работа, объясняющая это