Код:
<?
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