Как работает авторизация SMTP типа AUTH LOGIN

В этой заметке я хотел бы рассказать, как отправлять почту из командной строки по SMTP с авторизацией открытым текстом (clear text). Это может оказаться полезным, если необходимо диагностировать ошибки при отправке почты в Outlook или Exchange Server.

Именно так я выяснил один интересный факт об Exchange 2003, связанный с особенностью реализации в нем SMTP авторизации, о котором я расскажу позже.

Диалог включения SMTP Auth login для отправки писем в Exchange

Диалог включения SMTP Auth login для отправки писем в Outlook

Расширение диалога SMTP командой AUTH описывается в RFC4954.

Общий синтаксис прост:

Клиент отправляет серверу команду

AUTH механизм [опциональный первоначальный ответ]

И если сервер принимает механизм авторизации, диалог продолжается с отправкой имени пользователя и пароля в кодировке BASE64.

Для работы нам понадобится утилита кодирования/декодирования в BASE64. Я использовал онлайн-утилиту
http://www.motobit.com/util/base64-decoder-encoder.asp

1. Подключаемся к SMTP серверу

telnet mx.valuehost.ru 25

сервер отвечает нам приветствием

220 mx7.valuehost.ru ESMTP ready

2. Отправляем приветствие

EHLO servername

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

Из ответа сервера следует, что он поддерживает авторизацию PLAIN, LOGIN,
CRAM-MD5

3. Выбираем тип авторизации

AUTH LOGIN

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6

Декодируем «VXNlcm5hbWU6» из BASE64, ответ сервера – «334 Username:»

4. Передаем имя пользователя, закодированное в BASE64

dGVzdHVzZXI=

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6
06:C dGVzdHVzZXI=
07:S 334 UGFzc3dvcmQ6

Ответ сервера – «334 Password:»

5. Передаем пароль, закодированный в BASE64

cGFzc3dvcmQ=

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6
06:C dGVzdHVzZXI=
07:S 334 UGFzc3dvcmQ6
08:C cGFzc3dvcmQ=
09:S 235 2.0.0 OK

В случае успешной авторизации возвращается строка «235 2.0.0 OK».

Далее можно работать как в обычной SMTP сессии.

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6
06:C dGVzdHVzZXI=
07:S 334 UGFzc3dvcmQ6
08:C cGFzc3dvcmQ=
09:S 235 2.0.0 OK
10:C mail from:<testuser@testserver.com>
11:S 250 2.1.0 Ok
12:C rcpt to:<testuser@testserver.com >
13:S 250 2.1.5 Ok
14:C data
15:S 354 End data with <CR><LF>.<CR><LF>
16:C test.

 

17:S 250 2.0.0 Ok: queued as 6F1482E0CE
18:C quit
19:S 221 2.0.0 Bye
   

5 комментариев

  • By Sapper, 21.09.2010 @ 17:20

    Хорошая статья, годная! Спасибо.

  • By Kamil, 08.11.2010 @ 16:11

    thank you dude!!!
    was very helpful to me.

  • By Anton, 17.02.2011 @ 16:37

    Всё просто и понятно, спасибо! А то пробовал так, что-то не получилось, начал искать другие варианты. Так правильно)

  • By Nonamer, 22.03.2011 @ 01:02

    За статью “пятьбалофф”. Очень доступно и с примерами. Помогло.

  • By DemOn, 28.02.2017 @ 17:42

    Спасибо огромное, целый день убил пока на эту статью не наткнулся

Other Links to this Post

RSS feed for comments on this post. TrackBack URI

Leave a comment

WordPress Themes