邮件-如何快速的筛选出有效的邮箱?

意见反馈 意见反馈 主题:991 回复:2082

邮件-如何快速的筛选出有效的邮箱?

虐人心 发布于 2016-10-22 字数 113 浏览 1333 回复 2

现在手上有一批邮箱(千万级别),但是有很多邮箱服务器已经不存在了,有什么办法能快速的过滤出有效邮件服务器?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

甜柠檬 2017-09-17 2 楼

为了一劳永逸,建议还是直接导入到数据库,两个字段就行,

一个为完整的email, 一个为主机域名(@后边的部分)

如果只是检测 邮箱服务器是否存在可以 按照 主机域名 分组 查询
select host from email group by host

然后 依次使用下面的方法判断:
$handle = @fsockopen('smtp'.$host, 25, $errno, $errstr, 20);

如果 $handle 为 false ,$errno 为10060 直接按照 host 当条件删除记录
delete from email where host = $host

表中剩下的记录可视为 邮箱服务器有效。

当然也可以使用 checkdnsrr() 等 函数来检测。

灵芸 2017-05-15 1 楼

这里提供一个方法,你试一试,这是以前收藏的:
补充:为了不误导大家,这里说明下,此方法希望在把邮箱域名归档后再进行验证,避免重复的验证

function check_mail($useremail){
$smtp = explode("@",$useremail);
$username = $smtp[0];
$smtp = 'smtp.'.$smtp[1];
$flag = "";
$message="";
$message .= "开始连接服务器<br>";
$link = fsockopen($smtp,25);
if ($link){
set_socket_blocking($link,true);
$lastmessage=fgets($link,512);
if (!ereg("^220",$lastmessage)){
$message .= "与服务器连接失败" . $lastmessage . "<br>";
}else{
$message .= "与服务器连接成功,服务器就绪:" . $lastmessage . "<br>";

    fputs($link,"HELO phpsetmail"."rn");
    $lastmessage=fgets($link,2000);
    if (ereg("^250",$lastmessage)){
     $message .= "与服务器HELO成功:" .$lastmessage. "&lt;br&gt;";
    }
    else{
     $message .= "与服务器HELO失败:" .$lastmessage. "&lt;br&gt;";
    }
    fputs($link,"AUTH LOGIN"."rn");
    $lastmessage=fgets($link,2000);
    if (ereg("^334",$lastmessage)){
     $message .= "请求与服务器进行用户验证成功:" .$lastmessage. "&lt;br&gt;";
    }
    else{
     $message .= "请求与服务器进行用户验证失败:" .$lastmessage. "&lt;br&gt;";
    }
    fputs($link,base64_encode($username)."rn");
    $lastmessage=fgets($link,2000);
    if (ereg("^334",$lastmessage)){
     $message .= "与服务器用户验证成功:" .$lastmessage. "&lt;br&gt;";
     $flag = 1;
    }else{
     $message .= "与服务器用户验证失败:" .$lastmessage. "&lt;br&gt;";
     $flag = -2;
    }
    fputs($link,"HELPrn");
    $lastmessage=fgets($link,2000);
    $message .= "HELP命令执行情况:".$lastmessage. "&lt;br&gt;";
   }
   fclose($link);
   $message .= "关闭服务器连接";
}
else{
   $message = $useremail.$smtp."服务器连接失败";
   $flag = -1;
}

$return = array("msg"=&gt;$message,"flag"=&gt;$flag);

return $return;

}