频道栏目
首页 > 资讯 > 异常处理 > 正文

php验证信箱是否真实存在

16-01-08        来源:[db:作者]  
收藏   我要投稿
php验证邮箱是否真实存在
大家好,我是php新手,现在有个问题想请教大家,就是注册时验证该email地址是否真的存在,谢谢

环境win32+php5.45

test.php
 
echo"
检查电子邮件地址的正确性:
";
require("email_validation.php");
$newmail="283285993@qq.com";
$validator=newemail_validation_class;
$validator->timeout=10;

//if(IsSet($newemail)&&strcmp($newemail,"")){
if(($result=$validator->ValidateEmailBox($newmail))<0){
echo"不能确定您的信箱是否正确.您的信箱离这里太远了吧?
";
return;
}else{
echo"22222222";
if(!$result){
echo"您输入的信箱地址是不正确的!:)
";
return;
}else{
echo"邮箱合法!
";
}
}

?>



email_validation.php
classemail_validation_class
{//var$email_regular_expression="^([a-z0-9_]|//-|//.)+@(([a-z0-9_]|//-)+//.)+[a-z]{2,4}$";var$timeout=0;var$localhost="";var$localuser="";var$hosts=0;
FunctionGetLine($connection){for($line="";;)
{if(feof($connection))return(0);
$line.=fgets($connection,100);
$length=strlen($line);
 
if($length>=2&&substr($line,$length-2,2)=="/r/n")
return(substr($line,0,$length-2));
}
}
FunctionPutLine($connection,$line){return(fputs($connection,"$line/r/n"));}
 
FunctionValidateEmailAddress($email){//return(eregi($this->email_regular_expression,$email)!=0);//origin://return(eregi("^([a-z0-9_]|//-|//.)+@(([a-z0-9_]|//-)+//.)+[a-z]{2,4}$",$email)!=0);
//returnpreg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i",$_REQUEST[$email]);
returnpreg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/",$_REQUEST[$email]);
}
FunctionValidateEmailHost($email,$hosts=0)
{
if(!$this->ValidateEmailAddress($email))
return(0);
$user=strtok($email,"@");
$domain=strtok("");
if(GetMXRR($domain,$hosts,$weights))
{
$mxhosts=array();
for($host=0;$host<COUNT($HOSTS);$HOST++)
$mxhosts[$weights[$host]]=$hosts[$host];
KSort($mxhosts);
for(Reset($mxhosts),$host=0;$host<COUNT($MXHOSTS);NEXT($MXHOSTS),$HOST++)
$hosts[$host]=$mxhosts[Key($mxhosts)];}
else{$hosts=array();
if(strcmp(@gethostbyname($domain),$domain)!=0)
$hosts[]=$domain;}
return(count($hosts)!=0);
}
FunctionVerifyResultLines($connection,$code)
{
while(($line=$this->GetLine($connection)))
{if(!strcmp(strtok($line,""),$code))return(1);
if(strcmp(strtok($line,"-"),$code))
return(0);
}return(-1);}
FunctionValidateEmailBox($email)
{if(!$this->ValidateEmailHost($email,$hosts))return(0);
if(!strcmp($localhost=$this->localhost,"")&&!strcmp($localhost=getenv("SERVER_NAME"),"")&&!strcmp($localhost=getenv("HOST"),""))
$localhost="localhost";
if(!strcmp($localuser=$this->localuser,"")&&!strcmp($localuser=getenv("USERNAME"),"")&&!strcmp($localuser=getenv("USER"),""))
$localuser="root";
for($host=0;$host<COUNT($HOSTS);$HOST++)
{if(($connection=($this->timeout?fsockopen($hosts[$host],25,$errno,$error,$this->timeout):fsockopen($hosts[$host],25))))
{if($this->VerifyResultLines($connection,"220")>0&&$this->PutLine($connection,"HELO$localhost")&&$this->VerifyResultLines($connection,"250")>0&&$this->PutLine($connection,"MAILFROM:<$localuser@$localhost>")&&$this->VerifyResultLines($connection,"250")>0&&$this->PutLine($connection,"RCPTTO:<$email>")&&($result=$this->VerifyResultLines($connection,"250"))>=0)
{fclose($connection);
return($result);
}
fclose($connection);
}
}
return(-1);
}
};
?>
 
 
分享到:

------解决方案--------------------
不懂,我的想法就是,最多验证一下格式是否正确,然后像大家一样,往他邮箱发激活码,用以完成注册的最后一步。你想要直接验证,除非邮箱服务商提供接口让你验证。不然。
------解决方案--------------------
email的真实性是无法判断的,虽然任何一个邮件服务器都有邮箱列表功能。但大多都不会对外开放
需要用邮件激活注册,看上去不错。但是建立在网站管理员的职业道德上的。你收到的那些广告邮件就是这样来的
 
相关TAG标签
上一篇:直接可以拿来用的PHP惯用功能代码片段(16~20)
下一篇:直接可以拿来用的PHP惯用功能代码片段(11~15)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站