Тестируем SMTP

Иследуя проблемы с обслуживанием SMTP  часто очень полезно знать действия выполняемые с сервером SMTP непосредственно, вместо того, чтобы обойтись без почтового клиента, который не обязательно скажет Вам точно, что говорит сервер SMTP. Вы можете легко сделать это с клиентом telnet. Отметим, что многие ISPs (Интернет Сервис Провайдер) не позволяют связи за границу на порту 25 к любому серверу SMTP, но их собственному - если Вы получаете перерывы, пытаясь соединиться с портом 25, Вы должны попробовать порт 587, который является стандартным портом ESMTP.  (Порт, 587 обычно требует авторизации AUTH SMTP, который предсавлен ниже.)

 

Тестирование обслуживания SMTP через telnet.

 

telnet mail.domain.ru 25
Trying 127.0.0.1...
Connected to mail.domain.ru.
Escape character is '^]'.
220  domain.ru ESMTP Exim 4.69 Mon, 12 Dec 2011 13:22:13 +0300
HELO testuser
250
MAIL FROM: info@domain.ru
250 ok
RCPT TO: admin@mydomain.ru
250 ok
QUIT
221
Connection closed by foreign host.

 

Мы видим что сервер принял связь telnet, ответил и принял испытательную электронную почту для поставки. (Любой ответ кроме 250 Ок представил бы ошибку одного или другого вида.)

Тестирование AUTH SMTP через telnet

 

PLAIN method

 

Для начала нам необходимо закодировать имя и пароль почтового ящика  в base64-encode, выполнив следующую команду:

perl -MMIME::Base64 -e 'print encode_base64("00user@domain.ru00password")'  
AHVzZXJAZG9tYWluLmNvbQBwYXNzd29yZA==
telnet mail.domain.ru 25
Trying 127.0.0.1...
Connected to mail.domain.ru.
Escape character is '^]'.
220  domain.ru ESMTP Exim 4.69 Mon, 12 Dec 2011 13:22:13 +0300
ehlo test
250-domain.ru Hello test [83.69.2**.**]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN
250 HELP
AUTH PLAIN  AHVzZXJAZG9tYWluLmNvbQBwYXNzd29yZA==
235 2.7.0 Authentication successful
MAIL FROM: info@domain.ru
250 ok
RCPT TO: admin@mydomain.ru
250 ok
QUIT
221
Connection closed by foreign host.

После того как на сервере произошла авторизация мы можем отправить сообщение, как мы имели бы на регулярной сессии SMTP упомянутой выше.

LOGIN method

 

При использовании LOGIN method потребуется в отдельности произвести кодировку имени ящика и пароля следующими командами:

perl -MMIME::Base64 -e 'print encode_base64("user@domain.ru");' 
dXNlckBkb21haW4uY29t
perl -MMIME::Base64 -e 'print encode_base64("password");' 
cGFzc3dvcmQ=

После представления серверу информации о себе с помощью ehlo мы производим авторизацию:

AUTH LOGIN
334 VXNlcm5hbWU6
dXNlckBkb21haW4uY29t
334 UGFzc3dvcmQ6
cGFzc3dvcmQ=
235 2.0.0 Authentication successful