PHP中精确检查Email地址的CLASS(包括对HOST的连通测试)

原创 2004年06月29日 13:30:00
<?  
/*  
*  email_validation.php  
*  
*  
*/  
 
class  email_validation_class  
{  
//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)=="/r/n")  
                                               return(substr($line,0,$length-2));  
                       }  
           }  
 
           Function  PutLine($connection,$line)  
           {  
                       return(fputs($connection,"$line/r/n"));  
           }  
 
           Function  ValidateEmailAddress($email)  
           {  
                       //return(eregi($this->email_regular_expression,$email)!=0);  
                       return(eregi("^([a-z0-9_]  |//-  |//.)+@(([a-z0-9_]  |//-)+//.)+[a-z]{2,4}$",$email)!=0);  
           }  
 
           Function  ValidateEmailHost($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);  
           }  
 
           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  ValidateEmailBox($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,"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);  
           }  
};  
 
?>  
=============================================================================  
 
-----------------------------------------------------------------------------  
 
应用范例:  
=============================================================================  
echo  "<center><br/>检查电子邮件地址的正确性:<br/>";  
 
$newmail  =  "test@test.com";  
 
require("email_validation.php3");  
 
$validator=new  email_validation_class;  
$validator->timeout=10;  
 
if(IsSet($newemail)  &&  strcmp($newemail,""))  
{  
           if(($result=$validator->ValidateEmailBox($newemail))<0)  
           {  
                       echo  "不能确定您的信箱是否正确.  您的信箱离这里太远了吧?<br/>";  
                       return;  
           }  
           else  
           {    
                       if(!$result)  
                       {    
                                   echo  "您输入的信箱地址是不正确的!  :)<br/>";  
                                   return;  
                       }  
                       else    
                                   echo  "邮箱合法!<br/>";  
           }  
}  
 

用PHP校验EMAIL地址的正确方法

由John Klensin编写的互联网任务工程组(IETF)文档RFC 3696 “应用程序技术检查和命名转换”给出了多个真实有效的EMAIL地址,但很不幸的是这些地址却被大多数PHP校验程序给拒绝了...
  • wide288
  • wide288
  • 2014年03月08日 15:46
  • 1447

php测试mysql数据库连通性并且在浏览器每一秒输出一次结果

有时候网络环境不稳定,需要测试mysql数据库的连接是否畅通,我们可以通过php脚本实现,具体代码如下,在360浏览器测试通过: /*     循环打印出mysql连接测试 */ header(...
  • reblue520
  • reblue520
  • 2016年09月22日 18:35
  • 755

linux 操作系统中ping测试网络连通性命令的使用

测试网络连通性命令:ping 命令所在路径:/bin/ping 语法:           ping [ip地址]或ping -c  [ip地址] -c指定发送的次数 范例:    ping 192....
  • u013519290
  • u013519290
  • 2016年07月23日 18:23
  • 1905

js验证Email

一.相关的代码 1 function test() 2        { 3           var temp = document.getElementById("text1"); 4     ...
  • liushengpiaoxu
  • liushengpiaoxu
  • 2008年03月13日 18:37
  • 3122

python脚本测试局域网中的电脑是否连通

python脚本测试局域网中的电脑是否连通
  • u013252072
  • u013252072
  • 2016年05月11日 10:34
  • 667

Python入门教程--测试局域网中的电脑是否连通

假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200.       思路:用shell编程.(Linux通常是bash...
  • canlets
  • canlets
  • 2014年05月09日 09:32
  • 1573

python 实现判断ip连通性方法的集合

python 以下是个人学习 python 研究判断ip连通性方法的集合。 缺点可能有办法解决,如有错误,欢迎矫正。 方法一 import os return1=os.system('ping...
  • gunzi318
  • gunzi318
  • 2018年01月27日 10:36
  • 32

python检测主机的连通性并记录到文件

目录结构ping_test/ ├── bin │   ├── ping.py │   ├── ping_run.sh.origin │   └── ping.sh ├── conf │   └── i...
  • longyinyushi
  • longyinyushi
  • 2017年06月28日 10:59
  • 440

初始配置配置 IPv6 并检验连通性

配置 IPv6 并检验连通性 第 1 步: 为 R1 的 G0/0 分配 IPv6 地址并启用 IPv6 路由。 注意:接口上除 IPv4 地址外还分配 IPv6 地址,称为双协议栈,因为 I...
  • kangvcar
  • kangvcar
  • 2016年07月04日 08:48
  • 1257

jQuery判断email地址 邮箱地址 email regex

直接放jQuery代码: function isValidEmailAddress(emailAddress) { var pattern = /^([a-z\d!#$%&'*+\-\/=?...
  • likingsn
  • likingsn
  • 2016年04月21日 14:06
  • 999
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP中精确检查Email地址的CLASS(包括对HOST的连通测试)
举报原因:
原因补充:

(最多只允许输入30个字)