За последние 24 часа нас посетили 17408 программистов и 1874 робота. Сейчас ищут 1592 программиста ...

Проверка email-ов при отпавлке почты через SMTP.

Тема в разделе "Работа с почтой", создана пользователем kuteikin, 17 фев 2009.

  1. kuteikin

    kuteikin Активный пользователь

    С нами с:
    9 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Привет всем!

    Подскажите как проверить email перед сдедующей операцией отправки почты через SMTP
    Код (Text):
    1.  
    2. fputs($smtp_connect, "RCPT TO:".$to."\r\n");//кому почта
    3. if(Fn_Get_Smtp_Code($smtp_connect)!=250) die("Ошибка: Сервер не принял адрес получателя ".$to);
    4.  
    5. function Fn_Get_Smtp_Code($smtp_connect){
    6.     $line="";
    7.     while($str=fgets($smtp_connect, 515)){
    8.         $line.=$str;
    9.         if(substr($str, 3 ,1)==" ") break;
    10.     }
    11.     $smtp_code=substr($line, 0, 3);
    12.     return $smtp_code;
    13. }
    В начале я, конечно, проверяю корректность адреса
    Код (Text):
    1. function Fn_Email_Filter($fn_email){
    2.     return preg_match("/^[a-z0-9]+([_.-][a-z0-9]*)*@([a-z0-9]+([.-][a-z0-9]+)*)+\.[a-z]{2,4}$/i", trim($fn_email));
    3. }
    Затем проверяю хост
    Код (Text):
    1. function Fn_Host_Exist($fn_email){
    2.     $email_arr=explode("@", $fn_email);
    3.     $host=$email_arr[1];
    4.     return getmxrr($host, $maillist)?true:false;
    5. }
    И отправляю RCPT TO:, и все равно находятся адреса на которые сервер НЕ выдает 250, например nbritvina@yahoo.ru
    Вроде как-то VRFY можно проверить, но он отключен.

    Подскажите как быть?

    Заранее всем большое спасибо.
     
  2. kuteikin

    kuteikin Активный пользователь

    С нами с:
    9 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    По ходу дела надо тчательнее смотреть на результат работы getmxrr
     
  3. kuteikin

    kuteikin Активный пользователь

    С нами с:
    9 фев 2009
    Сообщения:
    21
    Симпатии:
    0
    Пришлось переписать функцию, остался вопрос может ли быть у почтового ретранслятора НУЛЕВОЕ занчение предпочтения, и возможно ли что-то отправить на единсвтенный почтоый ретранслятор со значением педпочтения =0?

    Код (Text):
    1. function Fn_Host_Exist($fn_email){
    2.     $email_arr=explode("@", $fn_email);
    3.     $host=$email_arr[1];
    4.     if(getmxrr($host, $maillist)){
    5.         $all=count($maillist);
    6.         $e=0;
    7.         for($i=0; $i<$all; ++$i){
    8.             if($maillist[$i]=='') $e++;
    9.         }
    10.         if($e==$all) return false;
    11.         else return true;
    12.     }
    13.     else return false;
    14. }
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    в домене может не быть MX записи. тогда по RFC отправляется на хост самого домена.