Использование telnet для отправки e-mail.
Для передачи сообщений электронной почты служит протокол прикладного уровня SMTP (Simple Mail Transfer Protocol — Простой протокол передачи почты). Одной из особенностей данного протокола, как и многих других телнетоподобных (telnet-like) протоколов является то, что обмен данными между клиентом и сервером выполняется в текстовом режиме, т.е. передаются только отображаемые символы таблицы кодов ASCII. Даже если передаются почтовые вложения в виде исполняемых файлов, рисунков, звуков, их содержимое перекодируется почтовым программным обеспечением в поток отображаемых символов ASCII.
Следовательно, простое письмо без вложений на английском языке очень легко можно отправить используя стандартную утилиту telnet.exe. Эта утилита имеется в составе программного обеспечения любой ОС семейства Windows и обычно предназначена для работы в командной строке удаленного компьютера. Выполняется подключение к удаленному компьютеру с telnet-сервером по протоколу TCP на порт 23 и вводимые с клавиатуры команды передаются серверу и выполняются в его программной среде, а стандартный вывод удаленной системы осуществляется в окне telnet — клиента.
В командной строке запуска telnet можно указать IP-адрес или имя удаленного узла и номер порта к которому будет выполняться подключение. Если номер порта не задан, то используется порт 23 (telnet).
telnet 192.168.1.1 23 — подключение к узлу 192.168.1.1 на порт 23 (к серверу TELNET)
telnet post.cnt.ru 25 — подключение на порт 25 ( к серверу SMTP)
Последний вариант команды телнет позволяет подключиться к почтовому серверу без использования клиентского программного обеспечения и даже выполнить отправку простого электронного письма.
Если подключение к серверу по TCP/25 выполнится успешно, то он ответит приглашением, чем-то вроде:.
220 This ESMTP is CNT server for card users.
Сообщения от сервера SMTP состоят из числового трехзначного номера сообщения (220 — сервер готов к работе) и информационного текста.
Для организации сессии обмена данными по протоколу SMTP клиент должен представиться серверу с использованием команды HELO и указания своего имени или IP-адреса. Команды протокола SMTP состоят из 4-х символов и могут иметь необязательные параметры. Вводим с клавиатуры
HELO myhost.ru
В качестве параметра HELO можно задать localhost или все что угодно, поскольку сервер не выполняет проверку его достоверности, что является одним из недостатков данного протокола.
Вместо команды HELO можно ввести EHLO, и тогда сервер дополнительно к сообщению о начале сессии ответит списком поддерживаемых им SMTP-команд:
250-post.cnt.ru Hello myhost.ru, pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE 10000000
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP
Идентификатор ответа 250 означает «выполнено» (или «OK»).
Перечень поддерживаемых команд зависит от программного обеспечения сервера и его настроек. Минимально необходимый для отправки письма набор команд состоит из 3-х:
MAIL — задает адрес отправителя
RCPT — задает адрес получателя
DATA — текст сообщения
Формат указания адреса отправителя:
MAIL FROM: BillGates@microsoft.com
Достоверность адреса отправителя сервером не проверяется, что позволяет легко подделывать электронные послания. Пусть будет письмо от Билла Гейтса.
Если команда введена без синтаксических ошибок, то она будет принята, и сервер ответит сообщением с номером 250 (OK):
250 2.1.0 BillGates@microsoft.com … Sender ok
означающим, что адрес отправителя принят..
Теперь вводим адрес получателя:
RCPT TO: apb@mail.cnt.ru
Если ввод выполнен без ошибок, сервер подтвердит продолжение сессии сообщением с номером 250:
250 2.1.5 apb@mail.cnt.ru … Recipient ok.
Теперь можно ввести текст письма. Начало ввода текста задается директивой DATA, а окончание — строкой с одной единственной точкой.
DATA
Сервер предложит ввести текст письма, выдав в ответ на DATA сообщение с номером 354:
354 Please start mail input.
Теперь можно вводить любой текст на английском языке:
Hello,Vasya!
…
Good Bye!
.
После ввода точки письмо будет принято к доставке получателю, о чем сервер сообщит кодом 250:
250 Mail queued for delivery.
Для завершения SMTP — сессии используется команда QUIT Письмо будет доставлено получателю, и в качестве адреса отправителя, в почтовом клиенте, будет отображаться BillGates@microsoft.com
В связи с проблемой спама и несовершенством протокола SMTP, подавляющее большинство почтовых серверов настраивается таким образом, что обойтись 3-мя вышеупомянутыми командами наверняка не получится. Скорее всего, как минимум, потребуется проверка подлинности пользователя с использование команды AUTH. Чаще всего используется проверка по имени пользователя и паролю (AUTH LOGIN), предполагающая их ввод в кодировке BASE64.
Пример отправки электронного письма с использованием команды telnet всего лишь демонстрирует логику SMTP-сессии, и может быть использован как средство практического изучения протокола SMTP.