Home > Backend Development > PHP Tutorial > 全面測試email的有效性

全面測試email的有效性

WBOY
Release: 2016-06-01 14:31:18
Original
841 people have browsed it
一般我們常希望拜訪你的網站的朋友能留下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 "無效"; 
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template