Использование SMTP команд для отправки почты по Telnet

Автор George, Сен. 14, 2022, 10:14

« назад - далее »

George

Подключение по telnet
Проще всего подключиться к почтовому серверу из командной строки Linux:

telnet <адрес сервера> 25

или программы Putty:

Подключение по telnet на smtp порт

Мы должны увидеть ответ сервера с кодом 220 (готовность к работе), например:

Цитировать220 relay.im-cloud.site ESMTP Postfix

Отправка сообщения SMTP командами
Приветствуем сервер:

Код: bash
helo domain.local

В ответ получаем встречное приветствие с кодом 250, например, 250 relay.im-cloud.site.

Вводим адрес, от которого будем отправлять сообщение:

Код: bash
mail from:master@im-cloud.site

В ответ должны получить 250 2.1.0 Ok.

На какой адрес отправляем сообщение:
Код: bash
rcpt to:test@im-cloud.site

Получаем ответ 250 2.1.5 Ok.

Вводим команду:

Код: bash
data

Получим 354 End data with <CR><LF>.<CR><LF> — это означает, что можно вводить текст сообщения:

Код: bash
subject:test subject

Код: bash
test text

Чтобы закончить, с новой строки ставим точку и нажимаем Enter:

.

В ответ должны увидеть что-то подобное: 250 2.0.0 Ok: queued as A340FC4B70C, где последний код — идентификатор сообщения, присвоенный сервером.

Сообщение отправлено.

Итоговая картина:

Цитировать220 relay.im-cloud.site ESMTP Postfix

502 5.5.2 Error: command not recognized
helo domain.local
250 relay.im-cloud.site
mail from:master@im-cloud.site
250 2.1.0 Ok
rcpt to:test@im-cloud.site
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

  •  

George

#1
Если нам нужно подключиться к серверу по защищенному каналу SSL/TLS, то используем для подключения команду openssl. Мы можем подключиться к портам 587 (STARTTLS) или 465 (SMTP over SSL).

а) Для подключения по порту 587:

Код: bash
openssl s_client -starttls smtp -connect smtp.yandex.ru:587

б) Для подключения по порту 465:

Код: bash
openssl s_client -connect smtp.yandex.ru:465

Далее проходим аутентификацию и можно делать отправку вышеописанными командами.
Аутентификация

Если почтовый сервер требует аутентификацию, необходимо сначала авторизоваться в системе.

Для этого вместо или после приветствия вводим:

Код: bash
ehlo

* EHLO — расширенное приветствие, которое позволит получить возможности почтового сервера.

В ответ мы получаем, примерно, следующее:

Цитировать250-relay.im-cloud.site 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:

Код: bash
echo -ne "текст" | base64

2. Powershell:

Код: powershell
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("текст"))

3. Perl:

Код: bash
perl -MMIME::Base64 -e "print encode_base64('текст');"

4. Онлайн:

На веб-сайте base64.ru
LOGIN

При данном методе мы по очереди передаем закодированные логин и пароль.

После приветствия вводим:
Код: bash
AUTH LOGIN

В ответ получаем:

Цитировать334 VXNlcm5hbWU6

После этого отправляем логин в base64, например dmosk:

Код: bash
ZG1vc2s=

Получим ответ:

Цитировать334 UGFzc3dvcmQ6

И вводим пароль (password):

Код: bash
cGFzc3dvcmQ=

Если аутентификация прошла успешно, увидим:

Цитировать235 2.0.0 Authentication successful

Можно делать отправку.
PLAIN

Данный метод аутентификации отличается от вышеописанного тем, что логин с паролем передаются одной строкой. Base64 для них получаем следующей командой, например, в unix-shell:

Код: bash
echo -ne "\0username\0password" | base64

... или Powershell:

Код: powershell
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("\0username\0password"))

* где username и password — логин и пароль для аутентификации; \0 — нулевой байт.

Авторизовываемся:

Код: bash
AUTH PLAIN

Видим приглашение на ввод аутентификационных данных:

Цитировать334 VXNlcm5hbWU6

Вводим нашу последовательность:

XDAwdXNlclxAZG9tYWluLnJ1XDAwcGFzc3dvcmQ=
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.