Чтобы почтовый сервер не стал проходным двором для спамеров, то как правило запрещают отправлять письма на сторонние серверы через него. Но не для всех, а для тех, кто не прошел авторизацию. Для неавторизованных передаётся сообзение relay not permitted. Рассмотрим механизм авторизации и сообщения, которыми в ходе отправки письма обмениваются почтовый клиент и SMTP-сервер.
Для SMTP-авторизации получим особым образом сформированное base64-преобразование из имени пользователя и пароля
printf "<username>\0<username>\0<пароль>"|base64
Получается вот такая прелесть
YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp=
Само собой эта base64 испорчена мной для упбликации, чтобы исключить возможность раскодировки
Берём telnet и полностью имитируем работу почтового клиента по отправке письма (C-клиент, S-сервер, #-мои комментарии)
С: $ telnet *.*.ru 25 # Подключаемся к SMTP по 25-му порту С: Trying *.*.*.*... С: Connected to *.*.ru. С: Escape character is '^]'. S: 220 *.ru ESMTP Exim 4.69 Wed, 09 Jun 2010 15:47:08 +0400 # Есть подключение, слушаю вас С: EHLO ADMIN # Здравствуй, сервер, я-ADMIN, расскажи, что у тебя есть S: 250-*.ru Hello ADMIN [*.*.*.*] S: 250-SIZE 52428800 # Есть ограничение по размеру S: 250-PIPELINING S: 250-AUTH PLAIN # Есть авторизация по методу PLAIN S: 250-STARTTLS S: 250 HELP С: AUTH PLAIN YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp= # Ок. Авторизуй меня методол PLAIN, вот реквизиты в base64 S: 235 Authentication succeeded # Реквизиты верные. Ты авторизован С: MAIL FROM:<adm@*.*.ru> # Прими емэйл отправителя S: 250 OK # Есть! С: RCPT TO:<sys-adm@bk.ru> # Прими емэйл получателя S: 250 Accepted # Принял С: DATA # Начинаю писать письмо S: 354 Enter message, ending with "." on a line by itself # Пиши. Не забудь точку в последней строчке С: test С: . S: 250 OK id=1OMJoP-0001YJ-Gz # Ok. Будет доставлено, если чего id письма 1OMJoP-0001YJ-Gz
С: $ telnet *.*.ru 25 # Подключаемся к SMTP по 25-му порту С: Trying *.*.*.*... С: Connected to *.*.ru. С: Escape character is '^]'. S: 220 *.ru ESMTP Exim 4.69 Wed, 09 Jun 2010 15:47:08 +0400 # Есть подключение, слушаю вас С: EHLO ADMIN # Здравствуй, сервер, я-ADMIN, расскажи, что у тебя есть S: 250-*.ru Hello ADMIN [*.*.*.*] S: 250-SIZE 52428800 # Есть ограничение по размеру S: 250-PIPELINING S: 250-AUTH PLAIN # Есть авторизация по методу PLAIN S: 250-STARTTLS S: 250 HELP С: MAIL FROM:<adm@*.*.ru> # Прими емэйл отправителя S: 250 OK # Есть! С: RCPT TO:<sys-adm@bk.ru> # Прими емэйл получателя S: 550 relay not permitted # Извините, тут не проходной двор. Представьтесь и запарольтесь
Отличие от механизма отправки с авторизацией вот в этой строчке
С: AUTH PLAIN YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp= # Ок. Авторизуй меня методол PLAIN, вот реквизиты в base64
Настраивать почтового клиента, чтобы он авторизовался на SMTP-сервере. В данном случае не забыть явно указать метод авторизации PLAIN, ибо различные клиенты могут по умолчанию использовать различные методы авторизации