• 技术文章 >后端开发 >php教程

    全面測試email的有效性_PHP

    2016-06-01 12:29:00原创325
    一般我們常希望拜訪你的網站的朋友能留下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: <$localuser@$localhost>")
    && $this->VerifyResultLines($connection,"250")>0
    && $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("jerry@mail.jerry.com.tw",0)) echo "有效";
    else echo "無效";

    //線上檢查是否真的有該Email
    if($m->Verify("jerry@mail.jerry.com.tw",1)) echo "有效";
    else echo "無效";
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    相关文章推荐

    • 图文详解php怎么平滑升级• 用MySQL内建复制来最佳化可用性(七)_PHP教程• 日期和时间的处理技术_PHP教程• 坏狼的PHP学习教程之第2天_PHP教程• php分页示例代码_PHP教程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网