Подключение по telnet
Проще всего подключиться к почтовому серверу из командной строки Linux:
telnet <адрес сервера> 25
или программы Putty:
Подключение по telnet на smtp порт
Мы должны увидеть ответ сервера с кодом 220 (готовность к работе), например:
Цитировать220 relay.im-cloud.site ESMTP Postfix
Отправка сообщения SMTP командами
Приветствуем сервер:
helo domain.local
В ответ получаем встречное приветствие с кодом 250, например, 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
Чтобы закончить, с новой строки ставим точку и нажимаем 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
Если нам нужно подключиться к серверу по защищенному каналу 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.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:
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=