Как выглядит SMTP аутентификация?

Kubiki

Новичок
Как выглядит SMTP аутентификация?

Подскажите, какой синтаксис smtp аутентификации.
Запрос имеет следующий вид:

HELO fashiongates.com
220 mail1.digipark.com ESMTP

MAIL FROM: [email protected]
250 mail1.digipark.com

RCPT TO: [email protected]
250 ok

DATA
553 sorry, that domain isn't allowed to be relayed thru this MTA (#5.7.1)
 

Popoff

popoff.donetsk.ua
Вот кусок кода:
PHP:
  if($data['auth-login'])
  {
    if(_mail_send($data,$fp,"EHLO ".$data['auth-login']."\n")!=250)
    {
      fclose($fp);
      trigger_error("Could not send an email. The server (".$SMTPServer.") does not support SMTP protocol.");
      return false;
    }
    if(_mail_send($data,$fp,"AUTH LOGIN\n")==334)
    {
      if(_mail_send($data,$fp,base64_encode($data['auth-login'])."\n")!=334)
      {
        fclose($fp);
        trigger_error("Could not send an email. AUTH Failed. User name is invalid.");
        return false;
      }
      if(_mail_send($data,$fp,base64_encode($data['auth-password'])."\n")!=235)
      {
        fclose($fp);
        trigger_error("Could not send an email. AUTH Failed. Password is invalid.");
        return false;
      }
    }
    else
    {
      fclose($fp);
      trigger_error("Could not send an email. The server (".$SMTPServer.") does not support AUTH protocol.");
      return false;
    }
  }
  else
  {
    if(_mail_send($data,$fp,"HELO ".$SMTPServer."\n")!=250)
    {
      fclose($fp);
      trigger_error("Could not send an email. The server (".$SMTPServer.") does not support SMTP protocol.");
      return false;
    }
  }
Подробности в SMTP Service Extension for Authentication
http://www.faqs.org/rfcs/rfc2554.html
 

urmach

Новичок
Re: Как выглядит SMTP аутентификация?

Как пройти аутентификацию на SMTP-сервере посредством CRAM-MD5.

Для начала убеждаемся, что этот метод поддерживается:
З - Наш запрос, О - Ответ сервера

Соединяемся с сервером посредством fsockopen()
(за основу берем язык php)
-----
220 mailc.rambler.ru ESMTP Sendmail 8.12.10/8.12.10; Sat, 1 Oct 2005 12:18:01
+0400 (MSD)
250-mailc.rambler.ru Hello mx.learnware.ru [83.171.70.202], pleased to meet
you -----
З:EHLO somebody.ru
О:250-ENHANCEDSTATUSCODES
О:250-PIPELINING
O:250-8BITMIME
O:250-SIZE 4194304
O:250-DSN
O:250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
O:250-DELIVERBY
O:250 HELP

В данном случае нас интересует строка 250-AUTH, как мы видим, данный метод поддерживается
(CRAM-MD5 присутствует в списке)

З:AUTH CRAM-MD5 (даем серверу знать, что мы планируем авторизироваться, используя
этот метод)
O:334 PDkxNDE5OTk1NS40MDgxMjc2QG1haWxjLnJ hbWJsZXIucnU+
Присмотритесь к последней полученной строке. Обрезаем четыре символа слева (код ответа
и пробел) и выполняем
base64_decode($string). Получаем:<[email protected]>
Затем нас выручит следующая функция:
function hmac($key, $data, $hash = 'md5', $blocksize = 64) {
if (strlen($key)>$blocksize) {
$key = pack('H*', $hash($key));
}
$key = str_pad($key, $blocksize, chr(0));
$ipad = str_repeat(chr(0x36), $blocksize);
$opad = str_repeat(chr(0x5c), $blocksize);
return $hash(($key^$opad) . pack('H*', $hash(($key^$ipad) . $data)));
}
Выполняем $keys= hmac($pass, $our_string,'md5', 64);
Где, $pass - это наш пароль на этом сервере,
$our_ string - это тот самый <[email protected]>
Далее снова шифруем: base64_encode("$login $keys");Где $login - наш логин на сервере.
ПОлучаем строку: dXJtYWNoIDdlYjcxMTYwMDMwY2Q0N2E2MTl jZDU3YmNhOTRmODI1 - это
и есть наш ответ Чемберлену.
Отослав ее серверу, мы получим ответ: 235 2.0.0 OK Authenticated
 
Сверху