Использование SMTP команд для отправки почты по Telnet
Тематические термины: SMTP, telnet
При помощи данных команд удобно тестировать работу почтовых серверов.
Подключение
SMTP команды
Подключение по портам 587 или 465
Аутентификация
Кодирование Base64
Метод LOGIN
Метод PLAIN
Подключение по telnet
Проще всего подключиться к почтовому серверу из командной строки Linux:
telnet <адрес сервера> 25
или программы Putty:
Мы должны увидеть ответ сервера с кодом 220 (готовность к работе), например:
220 relay.dmosk.ru ESMTP Postfix
Отправка сообщения SMTP командами
Приветствуем сервер:
helo domain.local
В ответ получаем встречное приветствие с кодом 250, например, 250 relay.dmosk.ru.
Вводим адрес, от которого будем отправлять сообщение:
mail from:master@dmosk.ru
В ответ должны получить 250 2.1.0 Ok.
На какой адрес отправляем сообщение:
rcpt to:test@dmosk.ru
Получаем ответ 250 2.1.5 Ok.
Вводим команду:
data
Получим 354 End data with <CR><LF>.<CR><LF> — это означает, что можно вводить текст сообщения:
subject:test subject
test text
Чтобы закончить, с новой строки ставим точку и нажимаем Enter:
.
В ответ должны увидеть что-то подобное: 250 2.0.0 Ok: queued as A340FC4B70C, где последний код — идентификатор сообщения, присвоенный сервером.
Сообщение отправлено.
Итоговая картина:
220 relay.dmosk.ru ESMTP Postfix
502 5.5.2 Error: command not recognized
helo domain.local
250 relay.dmosk.ru
mail from:master@dmosk.ru
250 2.1.0 Ok
rcpt to:test@dmosk.ru
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject:test subject
test text
.
250 2.0.0 Ok: queued as A5E60C4B70C
Подключение по шифрованному каналу
Если нам нужно подключиться к серверу по защищенному каналу SSL/TLS, то используем для подключения команду openssl. Мы можем подключиться к портам 587 (STARTTLS) или 465 (SMTP over SSL).
а) Для подключения по порту 587:
openssl s_client -starttls smtp -connect smtp.yandex.ru:587
б) Для подключения по порту 465:
openssl s_client -connect smtp.yandex.ru:465
Далее проходим аутентификацию и можно делать отправку вышеописанными командами.
Аутентификация
Если почтовый сервер требует аутентификацию, необходимо сначала авторизоваться в системе.
Для этого вместо или после приветствия вводим:
ehlo
* EHLO — расширенное приветствие, которое позволит получить возможности почтового сервера.
В ответ мы получаем, примерно, следующее:
250-relay.dmosk.ru Hello [192.168.0.15]
250-SIZE 10485760
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-X-ANONYMOUSTLS
250-AUTH LOGIN PLAINT
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250-XRDST
250 XSHADOW
* в списке мы можем увидеть разные методы аутентификации (перечислены после AUTH).
Получаем base64
Данные авторизации передаются в закодированном виде с использованием стандарта Base64.
Чтобы закодировать свои логин и пароль, можно воспользоваться одним из перечисленных способов ниже.
1. Bash:
echo -ne "текст" | base64
2. Powershell:
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("текст"))
3. Perl:
perl -MMIME::Base64 -e "print encode_base64('текст');"
4. Онлайн:
На веб-сайте base64.ru
LOGIN
При данном методе мы по очереди передаем закодированные логин и пароль.
После приветствия вводим:
AUTH LOGIN
В ответ получаем:
334 VXNlcm5hbWU6
После этого отправляем логин в base64, например dmosk:
ZG1vc2s=
Получим ответ:
334 UGFzc3dvcmQ6
И вводим пароль (password):
cGFzc3dvcmQ=
Если аутентификация прошла успешно, увидим:
235 2.0.0 Authentication successful
Можно делать отправку.
PLAIN
Данный метод аутентификации отличается от вышеописанного тем, что логин с паролем передаются одной строкой. Base64 для них получаем следующей командой, например, в unix-shell:
echo -ne "\0username\0password" | base64
... или Powershell:
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("\0username\0password"))
* где username и password — логин и пароль для аутентификации; \0 — нулевой байт.
Авторизовываемся:
AUTH PLAIN
Видим приглашение на ввод аутентификационных данных:
334 VXNlcm5hbWU6
Вводим нашу последовательность:
XDAwdXNlclxAZG9tYWluLnJ1XDAwcGFzc3dvcmQ=
Можно делать отправку.