全面測試email的有效性
一般我們常希望拜訪你的網站的朋友能留下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>=
&& 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<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); 


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<count($hosts);$host++) 

if((
$connection=($this->timeout fsockopen($hosts[$host],25,&$errno,&$error,$this->timeout) : fsockopen($hosts[$host],25)))) 

if(
$this->VerifyResultLines($connection,"220")>
&& $this->PutLine($connection,"HELO $localhost"
&& 
$this->VerifyResultLines($connection,"250")>
&& $this->PutLine($connection,"MAIL FROM: <$localuser@$localhost>"
&& 
$this->VerifyResultLines($connection,"250")>
&& $this->PutLine($connection,"RCPT TO: <$email>"
&& (
$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("[email protected]",0)) echo "有效"; 
else echo "無效"; 

//線上檢查是否真的有該Email 
if($m->Verify("[email protected]",1)) echo "有效"; 
else echo "無效";