Проверка работоспособности smtp сервера.
Для проверки вашего smtp сервера можно воспользоваться утилитой telnet.
Подключаемся к почтарю на порт 25 (smtp), видим приветствие сервера.
Код: Выделить всё
rakul@tycoon:~/rage$ telnet rbpost.xxxx.ru 25
Trying 172.16.116.224...
Connected to rbpost.xxxx.ru.
Escape character is '^]'.
220 rbpost.xxxx.ru ESMTP server ready
Нужно его поприветствовать в ответ:
EHLO — расширенное HELO. После этого слова идет имя хоста, который пытается отправить почту.
В ответ мы полуаем список возможностей почтового сервера:
Код: Выделить всё
250-rbpost.xxxx.ru Hello tycoon.xxxx.ru [172.16.17.174]
250-SIZE 20971520
250-8BITMIME
250-AUTH PLAIN LOGIN
250 HELP
говорим — от кого почта:
кому почта:
начинаем сообщение:
Код: Выделить всё
DATA
354 Enter message, ending with "." on a line by itself
test
.
сообщение заканчивается точкой.
нам сказали, что сообщение взято в обработку. Выходим.
Код: Выделить всё
quit
221 rbpost.xxxx.ru closing connection
Connection closed by foreign host.
Естественно, что у разных почтовых серверов это может немного отличаться, но в общем все примерно одинаково.
Также можно отправить письмо командой mail с ключиком «-v».
(см.
Как отправить письмо из консоли?)
Примичание 1: Авторизация на сервере методом auth plain
Если для отправки почты на сервере необходимо сначала авторизироваться, аутентификацию auth plain можно также
произвести telnet-ом. Для этого сразу после получения сервером ответа на HELO/EHLO необходимо отправить строку:
после этого следует отправить свой адрес e-mail*, а затем пароль, закодированный в base64.
*e-mail - это в большинстве случаев. Возможно ваш почтовый сервер авторизует по логину, или еще как-нибудь, но это
уже должно быть вам виднее.
Генерация строки авторизации:
Код: Выделить всё
perl -MMIME::Base64 -e 'print encode_base64("\0user\@company.ru\0passwordl");'
Описание строки авторизации (http://www.lissyara.su/?id=1234):
Строка данных - закодирована base64, как требуется по RFC. Этот пример, после расшифровки, - ”<NUL>username<NUL>mysecret”, где ”<NUL>” - нулевой байт. Она разделяется на три строки, первая из которых - пустая.
За наводку на описание plain auth спасибо
butch,
IMB
Примичание 2: Авторизация на smtp-сервере методом CRAM-MD5
Качаем
http://www.net-track.ch/opensource/cmd5/cmd5-0.1.tar.gz
Cобираем, как описано в README.
Синтаксис вызова cmd5 такой:
challenge - возвращенная сервером последовательность символов, закодированная в Base64.
Типичная сессия работы с smtp-сервером выглядит примерно так ("звездочкой" отмечены строки, вводимые клиентом):
Код: Выделить всё
220 caraz.net-track.ch ESMTP
* EHLO client
250-caraz.net-track.ch
250-AUTH LOGIN CRAM-MD5 PLAIN
250-AUTH=LOGIN CRAM-MD5 PLAIN
250-PIPELINING
250 8BITMIME
* AUTH CRAM-MD5
На этом этапе, сервер выдает случайную последовательность символов, закодированную в Base64:
Эту последовательность, вместе с параметрами авторизации, передаем утилите cmd5:
Код: Выделить всё
./cmd5 foo@baar PaZZword PDMyLjEzMjM0MTIzQG1haWxob3N0Pg==
:
:
base64 encoded: Zm9vQGJhYXIgM2I4YTc4ODZkNGYxNzFhNDIxMWZlODU5NDQ0MWZjZmI=
Полученный результат вводим в приглашении smtp-сервера:
Код: Выделить всё
* Zm9vQGJhYXIgM2I4YTc4ODZkNGYxNzFhNDIxMWZlODU5NDQ0MWZjZmI=
Если имя пользователя/пароль верны, пользователь будет авторизован.
За аторизации cram-md спасибо
danger08
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.