Тестируем 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