Heim  >  Artikel  >  Backend-Entwicklung  >  全面測試email的有效性

全面測試email的有效性

WBOY
WBOYOriginal
2016-06-01 14:31:18828Durchsuche
一般我們常希望拜訪你的網站的朋友能留下Email 
但是很多人都會隨便打,造成管理員的困擾, 
以下這個class可以線上檢查Email是否是有效的Email(存不存在) 

 
class CEmail { 
var $email_regular_exPRession="^([a-z0-9_]|\-|\.)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,4}$"; 
var $timeout=0; 
var $localhost=""; 
var $localuser=""; 

Function GetLine($connection) 
{ 
for($line="";;) 
{ 
if(feof($connection)) 
return(0); 
$line.=fgets($connection,100); 
$length=strlen($line); 
if($length>=2 
&& substr($line,$length-2,2)=="rn") 
return(substr($line,0,$length-2)); 
} 
} 

Function PutLine($connection,$line) 
{ 
return(fputs($connection,"$linern")); 
} 

Function VerifyRule($email) 
{ 
return(eregi($this->email_regular_expression,$email)!=0); 
} 

Function ValidateEmailHost($email,$hosts=0) 
{ 
if(!$this->VerifyRule($email)) 
return(0); 
$user=strtok($email,"@"); 
$domain=strtok(""); 
if(GetMXRR($domain,&$hosts,&$weights)) 
{ 
$mxhosts=array(); 
for($host=0;$host $mxhosts[$weights[$host]]=$hosts[$host]; 
KSort($mxhosts); 
for(Reset($mxhosts),$host=0;$host $hosts[$host]=$mxhosts[Key($mxhosts)]; 
} 
else 
{ 
$hosts=array(); 
if(strcmp(@gethostbyname($domain),$domain)!=0) 
$hosts[]=$domain; 
} 
return(count($hosts)!=0); 
} 

Function VerifyResultLines($connection,$code) 
{ 
while(($line=$this->GetLine($connection))) 
{ 
if(!strcmp(strtok($line," "),$code)) 
return(1); 
if(strcmp(strtok($line,"-"),$code)) 
return(0); 
} 
return(-1); 
} 

Function VerifyOnline($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 { 
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,"MAIL FROM: ") 
&& $this->VerifyResultLines($connection,"250")>0 
&& $this->PutLine($connection,"RCPT TO: ") 
&& ($result=$this->VerifyResultLines($connection,"250"))>=0) 
{ 
fclose($connection); 
return($result); 
} 
fclose($connection); 
} 
} 
return(-1); 
} 

function Verify($email,$type=0) { 
  if($type==0) return $this->VerifyRule($email) ; 
  else   return $this->VerifyOnline($email) ; 

} 

};   
   
   
?> 


用法: 
$m=new CEmail; 
//僅檢查語法 
if($m->Verify("jerry@mail.jerry.com.tw",0)) echo "有效"; 
else echo "無效"; 

//線上檢查是否真的有該Email 
if($m->Verify("jerry@mail.jerry.com.tw",1)) echo "有效"; 
else echo "無效"; 
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn