Отправляем почту через telnet

Какому почтовому админу не приходилось проверять работу почтовых серверов? Наверное всем приходилось. Ну а для тех, кто этого еще никогда не делал — краткий ликбез.

На самом деле операция крайне тривиальная, и я продемонстрирую ее на примере Exchange сервера. Для выполнения операции нам необходим telnet-client, который поставляется как стандартный компонент Windows. По умолчанию он выключен, поэтому вначале мы либо включаем его через панель управления, либо командой (обратите внимание, что регистр опции FeatureName важен):

DISM /online /Enable-Feature /FeatureName:TelnetClient

Для тех кто в танке, telnet клиент позволяет нам устанавливать TCP-сессии к необходимым хостам, на необходимые порты, после чего, внутри этих сессий мы сможем имитировать протоколы более высоких уровней, например в данном случае — SMTP.

Итак после включения telnet, мы устанавливаем TCP-сессию на нужный нам почтовый сервер. Для этого в cmd.exe выполняем команду:

telnet test-post-server.ru 25

У нас откроется окно телнет сессии с приветствием почтовика. Ну и далее следуем по протоколу SMTP:

HELO post.mydomain.ru
MAIL from: admin@myserver.ru
RCPT to: admin@remotedomain.ru
DATA
From: megaadmin@myserver.ru
To: aadmin@remotedomain.ru
Subject: Test message
This is text of test message
.

Разбирая сессию более подробно, замечу, что если удаленный сервер настроен правильно, А-запись из HELO (в данном примере post.mydomain.ru) должна иметь соответствующую PTR-запись и сессия должна устанавливаться именно с IP адреса этой A-записи, иначе сервер просто отклонит вашу сессию как спам.

После HELO у нас идут так называемые P1 заголовки, они используются для маршрутизации сообщения. Также, например, по команде MAIL FROM может выполнятся проверка существования такого отправителя. А после DATA идут заголовки P2 — это уже те значения, которые конечный пользователь увидит в письме. Для данного примера — письмо отправлено с адреса admin@myserver.ru, однако в письме отправитель будет указан как megaadmin@myserver.ru, и если пользователь нажмет кнопку «Ответить», то в адресе получателя будет стоять именно megaadmin@myserver.ru.

Ну и наконец строка с точкой и Enter, говорят о том, что тело письма (DATA) окончено, можно отправлять сообщение. Вдогонку добавлю выложу реальной SMTP сессии ниже. Строка «Queued mail for delivery» обозначает, что сервер получатель принял ваше письмо, и далее ответственность за его доставку лежит на нем.

telnet post.ko4evneg.ru 25
220 EX.sand.box Microsoft ESMTP MAIL Service ready at Sun, 10 May 2015 23:22:27
+0300
HELO ex.ko4evneg.ru
250 EX.sand.box Hello [192.168.1.1]
MAIL from: adm@ko4evneg.ru
250 2.1.0 Sender OK
RCPT to: adm@ko4evneg.ru
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
From: admin4eg@ko4evneg.ru
To: adm@ko4evneg.ru
Subject: Test message
This is text of test message
.
250 2.6.0 <a39ea5bd-9422-45b5-80b6-08eb2d2290e5@EX.sand.box> [InternalId=8589934
59219, Hostname=EX.sand.box] Queued mail for delivery

Напоследок замечу, что при любой ошибке в telnet, вам придется начинать сессию заново. Чтобы этого избежать, прочитайте мою статью про автоматизацию telnet’а.

  1. Спасибо за статью. Не плохо было бы почитать про описания ошибок возвращаемых сервером и методы их устранения. Была бы очень полезная статья по устранению проблем «А у меня почта не ходит»

Оставить комментарий