проверка валидности мыла

UnDeaD

Новичок
Репутация
15 / 411
Код:
<?
define('return_email','noreply@domain'); 
function win_getmxrr($hostname, &$mxhosts, &$mxweight=false) 
{ 
    if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') return; 
    if (!is_array ($mxhosts) ) $mxhosts = array(); 
    if (empty($hostname)) return; 
    $exec='nslookup -type=MX '.escapeshellarg($hostname); 
    @exec($exec, $output); 
    if (empty($output)) return; 
    $i=-1; 
    foreach ($output as $line) 
    { 
        $i++; 
        if (preg_match("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.+)$/i", $line, $parts)) 
        { 
            $mxweight[$i] = trim($parts[1]); 
            $mxhosts[$i] = trim($parts[2]); 
        } 
        if (preg_match('/responsible mail addr = (.+)$/i', $line, $parts)) 
        { 
            $mxweight[$i] = $i; 
            $mxhosts[$i] = trim($parts[1]); 
        } 
    } 
    return ($i!=-1); 
} 

// Define 
if (!function_exists('getmxrr')) 
{ 
    function getmxrr($hostname, &$mxhosts, &$mxweight=false) 
    { 
        return win_getmxrr($hostname, $mxhosts, $mxweight); 
    } 
} 


function verify_email($em,$connect=true) 
{ 
    $em=filter_var($em, FILTER_SANITIZE_EMAIL); 
    if(filter_var($em,FILTER_VALIDATE_EMAIL)) //email looks valid 
    { 
        if(!$connect) return true; 
        list(,$domain)=split('@',$em); 
        getmxrr($domain, $mxhosts, $weights); 
        if(!empty($mxhosts)) // there is at least one MX record 
        { 
            $lowest=array_keys($weights, min($weights)); 
            if(is_array($lowest))$lowest=$lowest[0]; 
            $domain=$mxhosts[$lowest]; // MX server with lowest priority number 
        } 
        // probe connection to the remote SMTP server 
        $code = 0; 
        $fp = @fsockopen($domain, 25, $errno, $errstr, 3); 
        if ($fp) 
        { 
            send_command($fp, 'HELO '.$_SERVER["HTTP_HOST"]); 
            send_command($fp, 'MAIL FROM:<'.return_email.'>'); 
            $erg = send_command($fp, 'RCPT TO:<'.$em.'>'); 
            send_command($fp, 'QUIT'); 
            fclose($fp); 
            $code = intval(substr($erg, 0, 3)); 
        } 
        if ($code==250||$code==451) return true; //valid email address. 451 for greylisting - might be the correct one 
    } 
    return false; 
} 

function send_command($fp, $out)
{ 
    fwrite($fp, $out . "\r\n"); 
    return get_data($fp); 
} 
function get_data($fp)
{ 
    $s=""; 
    stream_set_timeout($fp, 2); 
    
    for($i=0;$i<2;$i++) 
    $s.=fgets($fp, 1024); 
    
    return $s; 
}
?>


verify_email('мыло',connect);
connect - true (по умолчанию) пытается подключиться к удаленному smtp и проверить мыло после проверки его валидности
- false не подключается, а только проверяет валидность
возвращает true или false
 
Сверху