Проверка связи по протоколу SMTP на серверах Exchange с помощью Telnet

Вы можете использовать Telnet для проверки связи по протоколу SMTP между серверами обмена сообщениями. SMTP — это протокол, используемый для отправки сообщений электронной почты с одного сервера обмена сообщениями на другой. Использование Telnet может быть полезно, если у вас возникли проблемы с отправкой или получением сообщений, так как вы можете вручную отправлять smtp-команды на сервер обмена сообщениями. В ответ сервер будет отвечать ответами, которые будут возвращены в обычном соединении. Иногда эти результаты помогут вам понять, почему вы не можете отправлять или получать сообщения.

Telnet можно использовать для проверки smtp-связи для:

  • Протестируйте поток почты из Интернета в организации Exchange.

  • Протестируйте поток почты из Exchange на другой сервер обмена сообщениями в Интернете.

Совет

Знаете ли вы, что вместо того, чтобы использовать Telnet для проверки smtp-подключения, вы можете использовать Microsoft Remote Connectivity Analyzer по адресу https://testconnectivity.microsoft.com/? С помощью анализатора удаленного подключения можно выбрать тест подключения, который нужно выполнить, в данном случае входящий SMTP-Email, и следовать приведенным инструкциям. Он предоставит вам сведения, необходимые для ввода, запустит тест, а затем предоставит результаты. Попробуйте!

Что нужно знать перед началом работы

  • Предполагаемое время для завершения: 15 минут.

  • Разрешения Exchange не применяются к процедурам, описанным в этом разделе. Эти процедуры выполняются в операционной системе сервера Exchange Server или клиентского компьютера.

  • В этом разделе показано, как использовать клиент Telnet, который входит в состав Windows. Сторонним клиентам Telnet может потребоваться синтаксис, отличный от синтаксиса, показанного в этом разделе.

  • В этом разделе показано, как подключиться к серверу с выходом в Интернет, который разрешает анонимные подключения с помощью TCP-порта 25. Если вы пытаетесь подключиться к этому серверу из Интернета, необходимо убедиться, что сервер Exchange доступен из Интернета через TCP-порт 25. Аналогичным образом, если вы пытаетесь подключиться к серверу в Интернете с сервера Exchange Server, необходимо убедиться, что сервер Exchange server может открыть подключение к Интернету через TCP-порт 25.

  • Вы можете заметить некоторые соединители получения, использующие TCP-порт 2525. Это внутренние соединители получения и не используются для приема анонимных SMTP-подключений.

  • Если вы тестируете подключение на удаленном сервере обмена сообщениями, выполните действия, описанные в этом разделе, на сервере Exchange Server. Удаленные серверы обмена сообщениями часто настраиваются так, чтобы IP-адрес, из которого поступает SMTP-подключение, соответствовал домену в адресе электронной почты отправителя.

  • Сочетания клавиш для процедур, описанных в этой статье, приведены в статье Сочетания клавиш в Центре администрирования Exchange.

Совет

Возникли проблемы? Обратитесь за помощью к участникам форумов Exchange. Посетите форумы по адресу: Exchange Server, Exchange Online или Exchange Online Protection.

Шаг 1. Установка клиента Telnet на компьютере

В большинстве версий Windows необходимо установить клиент Telnet, прежде чем использовать его. Сведения об установке см. в статье Установка клиента Telnet.

Шаг 2. Поиск полного доменного имени или IP-адреса smtp-сервера назначения

Чтобы подключиться к SMTP-серверу с помощью Telnet через порт 25, необходимо использовать полное доменное имя (FQDN) (например, mail.contoso.com) или IP-адрес SMTP-сервера. Если вы не знаете полное доменное имя или IP-адрес, вы можете использовать программу командной строки Nslookup, чтобы найти запись MX для целевого домена.

Примечание.

Политики сети могут препятствовать использованию средства Nslookup для запроса общедоступных DNS-серверов в Интернете. В качестве альтернативы можно использовать один из доступных веб-сайтов подстановки DNS или mx record lookup в Интернете.

  1. В командной строке введите nslookupи нажмите клавишу ВВОД. Эта команда открывает сеанс Nslookup.

  2. Введите set type=mx, а затем нажмите Ввод.

  3. Введите имя домена, для которого требуется найти запись MX. Например, чтобы найти запись MX для fabrikam.com домена, введите fabrikam.com.и нажмите клавишу ВВОД.

    Примечание.

    При использовании конечного периода ( . ) вы предотвращаете случайное добавление DNS-суффиксов по умолчанию в доменное имя.

    Выходные данные команды выглядят так:

    fabrikam.com mx preference=10, mail exchanger = mail1.fabrikam.com
    fabrikam.com mx preference=20, mail exchanger = mail2.fabrikam.com
    mail1.fabrikam.com internet address = 192.168.1.10
    mail2 fabrikam.com internet address = 192.168.1.20
    

    В качестве SMTP-сервера назначения можно использовать любые имена узлов или IP-адреса, связанные с MX-записями. Более низкое значение для предпочтения (предпочтение = 10 против 20) указывает на предпочтительный SMTP-сервер. Для балансировки нагрузки и отказоустойчивости используется несколько записей MX и различные значения параметров.

  4. Когда вы будете готовы завершить сеанс Nslookup, введите exitи нажмите клавишу ВВОД.

Действие 3. Использование протокола Telnet на порте 25 для проверки связи по протоколу SMTP.

В этом примере мы будем использовать следующие значения. При выполнении команд на сервере замените эти значения значениями для SMTP-сервера организации, домена и т. д.

  • Smtp-сервер назначения: mail1.fabrikam.com
  • Исходный домен: contoso.com
  • Адрес электронной почты отправителя: chris@contoso.com
  • Адрес электронной почты получателя: kate@fabrikam.com
  • Тема сообщения: Тестирование из Contoso
  • Текст сообщения: это тестовое сообщение

Совет

В командах в клиенте Telnet регистр не учитывается. Команды SMTP в этом примере используются с прописной буквы для ясности. Ключ backspace нельзя использовать в сеансе Telnet после подключения к целевому SMTP-серверу. Если вы допустили ошибку при вводе команды SMTP, необходимо нажать клавишу ВВОД, а затем ввести команду еще раз. Нераспознанные команды SMTP или синтаксические ошибки приводят к появляется сообщение об ошибке, которое выглядит следующим образом: 500 5.3.3 Unrecognized command.

  1. Откройте окно командной строки, введите telnetи нажмите клавишу ВВОД.

    Эта команда открывает сеанс Telnet.

  2. Введите set localecho, а затем нажмите Ввод.

    Эта необязательная команда позволяет просматривать символы по мере их ввода, и это может потребоваться для некоторых SMTP-серверов.

  3. Введите set logfile <filename>, а затем нажмите Ввод.

    Эта необязательная команда включает ведение журнала и задает файл журнала для сеанса Telnet. Если указать только имя файла, файл журнала находится в текущей папке. Если указать путь и имя файла, путь должен находиться на локальном компьютере, и может потребоваться ввести путь и имя файла в формате Windows DOS 8.3 (короткое имя без пробелов). Путь должен существовать, но файл журнала создается автоматически.

  4. Введите OPEN mail1.fabrikam.com 25, а затем нажмите Ввод.

  5. Введите EHLO contoso.com, а затем нажмите Ввод.

  6. Введите MAIL FROM:<chris@contoso.com>, а затем нажмите Ввод.

  7. Введите RCPT TO:<kate@fabrikam.com> NOTIFY=success,failure, а затем нажмите Ввод.

    Необязательная команда NOTIFY указывает конкретные сообщения уведомления о состоянии доставки (DSN) (также известные как сообщения о отказе, отчеты о недоставке или недоставка), которые необходимо предоставить SMTP. В этом примере вы запрашиваете сообщение DSN для успешной или неудачной доставки сообщений.

  8. Введите DATA, а затем нажмите Ввод.

  9. Введите Subject: Test from Contoso, а затем нажмите Ввод.

  10. Еще раз нажмите клавишу ВВОД.

    Между полем Subject: и текстом сообщения требуется пустая строка.

  11. Введите This is a test message, а затем нажмите Ввод.

  12. Введите точку ( . ), а затем нажмите клавишу ВВОД.

  13. Чтобы отключиться от SMTP-сервера, введите QUITи нажмите клавишу ВВОД.

  14. Чтобы закрыть сеанс Telnet, введите quitи нажмите клавишу ВВОД.

Вот как выглядит успешный сеанс с помощью описанных выше действий.

C:\Windows\System32> telnet
Microsoft Telnet> set localecho
Microsoft Telnet> set logfile c:\TelnetTest.txt
Microsoft Telnet> OPEN mail1.fabrikam.com 25
220 mail1.fabrikam.com Microsoft ESMTP MAIL Service ready at Fri, 5 Aug 2016 16:24:41 -0700
EHLO contoso.com
250-mail1.fabrikam.com Hello [172.16.0.5]
250-SIZE 37748736
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS
250-AUTH NTLM
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 XRDST
MAIL FROM: <chris@contoso.com>
250 2.1.0 Sender OK
RCPT TO: <kate@fabrikam.com> NOTIFY=success,failure
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
Subject: test

This is a test message.
.
250 2.6.0 <c89b4fcc-3ad1-4758-a1ab-1e820065d622@mail1.fabrikam.com> [InternalId=5111011082268, Hostname=mail1.fabrikam.com] Queued mail for delivery
QUIT
221 2.0.0 Service closing transmission channel

Шаг 4. Сообщения об успешном выполнении и ошибках в сеансе Telnet

В этом разделе содержатся сведения об успешных и неудачных ответах на команды, которые использовались в предыдущем примере.

Примечание.

Трехзначные коды ответа SMTP, определенные в RFC 5321, одинаковы для всех SMTP-серверов обмена сообщениями, но текстовые описания в ответах могут немного отличаться.

Коды ответа SMTP

SMTP-серверы отвечают на команды различными числовыми кодами ответа в формате x.y.z, где:

  • X указывает, была ли команда хорошей, плохой или неполной.
  • Y указывает тип отправленного ответа.
  • Z предоставляет дополнительные сведения о команде

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

Первая цифра (X) особенно важна для понимания, так как она указывает на успешное или неудачное выполнение отправленной команды. Ниже приведены возможные значения и их значения.

Код ответа Смысл
2.y.z Отправленная команда успешно выполнена на удаленном сервере. Удаленный сервер готов к выполнению следующей команды.
3.y.z Команда была принята, но удаленный сервер нуждается в дополнительных сведениях, прежде чем операция будет завершена. Отправляющий сервер должен отправить новую команду с необходимыми сведениями.
4.y.z Команда не была принята удаленным сервером по временной причине. Отправляя сервер должен попытаться подключиться еще раз позже, чтобы узнать, может ли удаленный сервер успешно принять команду. Отправляющий сервер будет продолжать повторять подключение, пока не завершится успешное подключение (указано в коде 2.y.z) или не завершится окончательной ошибкой (указано в коде 5.y.z).
Примером временной ошибки является недостаточно места на удаленном сервере. Как только будет доступно больше места, удаленный сервер сможет успешно принять команду.
5.y.z Команда не была принята удаленным сервером по причине, которую невозможно восстановить. Отправляющий сервер не будет повторять подключение и отправит отчет о недоставке пользователю, отправившему сообщение.
Примером неустранимой ошибки является сообщение, которое отправляется на несуществующий адрес электронной почты.

Таблица выше основана на информации, предоставленной RFC 5321 (simple Mail Transfer Protocol), раздел 4.2.1. Дополнительные сведения, включая описания второй (Y) и третьей (Z) цифры кодов ответа SMTP, включены в этот раздел, а также в разделах 4.2.2 и 4.2.3.

Команда OPEN

Успешный ответ: 220 mail1.fabrikam.com Microsoft ESMTP MAIL Service ready at <day-date-time>

Ответ на сбой: Connecting to mail1.fabrikam.com...Could not open connection to the host, on port 25: Connect failed

Возможные причины сбоя:

  • SMTP-служба назначения недоступна.
  • Ограничения на целевой брандмауэр.
  • Ограничения на брандмауэр источника.
  • Неверное полное доменное имя или IP-адрес smtp-сервера назначения.
  • Неправильный номер порта.

Команда EHLO

Успешный ответ: 250 mail1.fabrikam.com Hello [<sourceIPaddress>]

Ответ на сбой: 501 5.5.4 Invalid domain name

Возможные причины сбоя:

  • Недопустимые символы в доменном имени.
  • Ограничения подключения на целевом SMTP-сервере.

Примечание.

EHLO — это глагол ESMTP, определенный в RFC 5321. ESMTP-серверы могут объявлять о своих возможностях в процессе начального подключения. Эти возможности включают максимальный допустимый размер сообщения и поддерживаемые методы проверки подлинности. HELO — это более старая команда SMTP, определенная в RFC 821. Большинство SMTP-серверов обмена сообщениями поддерживают ESMTP и EHLO. Если сервер, отличный от Exchange, к которому вы пытаетесь подключиться, не поддерживает EHLO, вместо него можно использовать HELO.

Команда MAIL FROM

Успешный ответ: 250 2.1.0 Sender OK

Ответ на сбой: 550 5.1.7 Invalid address

Возможные причины сбоя: синтаксическая ошибка в адресе электронной почты отправителя.

Ответ на сбой: 530 5.7.1 Client was not authenticated

Возможные причины сбоя: конечный сервер не принимает отправки анонимных сообщений. Эта ошибка возникает при попытке использовать Telnet для отправки сообщения непосредственно на сервер почтовых ящиков, на который нет соединителя получения, настроенного для приема анонимных подключений.

Команда RCPT TO

Успешный ответ: 250 2.1.5 Recipient OK

Ответ на сбой: 550 5.1.1 User unknown

Возможные причины сбоя: указанный получатель не существует.