В качестве дешевого обходного пути на многих серверах, у которых нет команды mail , был написан сценарий, который выводит команды SMTP в сеанс telnet. Соответствующая часть скрипта выглядит так

telnet mailserver 25 << EOF
EHLO $HOST
MAIL FROM: root@$HOST
(and so on)
EOF

Это периодически завершается сбоем, когда "соединение закрыто удаленным хостом". tcpdump из неисправной сессии подтверждает , что почтовый сервер Postfix немедленно закрыть соединение после отправки 220 приветственного сообщения. Таким образом, ни одно из перенаправления ввода не сделало это по проводу.

До сих пор я не смог определить условия сбоя, но я могу подтвердить, что использование nc (netcat) работает безупречно, каждый раз.

Ряд вопросов на этом сайте и Stack Overflow непреклонны, что nc - правильный инструмент для этой работы. Мне интересно, почему это так.

  • Почему сбой прерывистый?
  • Почему почтовый сервер зависает, прежде чем по проводной линии отправляется одна строка ввода от перенаправленного?
  • Почему telnet ломается, а netcat нет?

1 ответ1

-1

Скорее всего, это происходит из-за игнорирования почтового хоста. Отправка электронной почты требует подключения, а затем ответа. Если MAIL FROM выдается до того, как сервер ответит, отправка завершится неудачно. Действительно, некоторые серверы полагаются на небольшую задержку ответа HELO специально для того, чтобы остановить этот насос и закрыть соединение, как это часто делают спаммеры.

Есть способы справиться с этим (не используя Telnet, являющийся лучшим), но иначе используя некоторый сценарий беседы. Если это недоступно, добавление задержек вручную не решит проблему, но может существенно ограничить проблему.

Поскольку вы, похоже, используете некую среду Linux, использование nc (netcat) поверх Telnet считается наилучшей практикой. В последней части этой ссылки показано, как использовать netcat и "ожидать", чтобы лучше отправлять электронную почту и правильно обрабатывать время.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .