Когда я перехожу к локальному терминалу на моем ящике Exchange (SBS 2008), я могу сделать следующее:
telnet 127.0.0.1 25
220 Exchange banner here
EHLO example.com
250 Server name
Однако, когда я выхожу из другого окна или с фактического IP-адреса сервера, я получаю следующее:
telnet 192.168.21.20 25
220 Exchange banner here
EHLO example.com
421 4.4.1 Connection timed out
Соединение с хостом потеряно.
Странно то, что этот сервер в настоящее время находится в производстве и работает нормально (принимает почту для всего нашего домена). Но мои программы на C # не могут отправлять на него почту (они получают ту же ошибку).
Любые идеи?
Сервер Exchange, похоже, пытается подключиться к вам (что-то вроде идентификатора?), Поэтому вам следует попробовать сниффер пакетов (например, Wireshark), чтобы увидеть где он пытается подключиться.
Другой способ интерпретировать это сообщение. SMTP, как и большинство интернет-протоколов, использует CR/LF
пара как терминатор линии. Как и протокол Telnet. Однако может случиться так, что во втором примере клиент (это "telnet" или что-то еще?) не отправить правильное окончание строки - может быть, он отправляет просто LF
или что-то совсем другое. Опять же, используйте Wireshark, чтобы узнать.
Относится к пункту 2 выше: может быть, на вашей второй машине есть антивирусная программа, которая пытается быть умной и перехватывает SMTP-соединения? Я видел много случаев, когда они взламывали POP3.
В своем приложении вы используете стандартную библиотеку smtp или отправляете команды через необработанный сокет? Если вы отправляете команды в необработанном виде, проверьте, отправляете ли вы \ r \ n после команды.
J