全面測試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>=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<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")>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 "無效";  

时间: 2024-09-30 20:25:59

全面測試email的有效性的相关文章

Email地址有效性验证

Email地址有效性的检验是一个经常遇到的问题啦!一般的检验方法是对Email地址字符串进行简单的检验,如是否含有@ .等有效字符等.这种方法只能保证该地址从格式上看似有效,并不能保证地址可达.最近进行大量的地址校验,写了一个小程序,可以保证Email地址真正可达. public bool checkEmail(string mailAddress){ TcpClient tcpc=new TcpClient(); try{ string server=mailAddress.Split('@'

通过探测邮件服务器进行Email地址有效性检验

Email地址有效性的检验是一个经常遇到的问题啦!一般的检验方法是对Email地址字符串进行简单的格式检验,如是否含有@.等有效字符等.这种方法只能保证该地址从格式上看似有效,并不能保证地址可达.最近进行大量的地址校验,写了一个小程序,可以检测Email地址是否真正可达. Email地址包括两个部分:用户名和邮件服务器.因此,检验邮件地址可以分为两步进行:首先检验邮件服务器,然后检验用户名.如 通过查询DNS服务器,获取域名的MX(MailExchanger)记录,可以确定某一域名对应的邮件服务

如何測試 flash 是否讀取 xml 成功?

问题描述 問一下簡單的問題,如何測試flash是否讀取xml成功?是否要建一個web頁面,進行測試.請高手發一個簡單例子.

Asp.net 2.0 实现自定义Email格式有效性验证(示例代码下载)

asp.net|示例|下载 (一). 概述及功能          用了两种方法实现验证Email格式,Asp.net验证控件和手动编写代码验证.并用到简单工厂和适配品设计模式, 代码重构技术.    实现自定义Email邮件地址有效性验证, 完成如下功能:Question 11. Email 格式为 user@server.domain. 例如: King.Cheng@hotmail.com or King.Cheng@hotmail.com.cn or King.Cheng@hotmail.

Project Server新增賬號,測試連線出現錯誤

问题描述 我在使用Projectserver新增账号,输入ProjectServerURL(S),测试连线时出现画面中的错误:我的机子是4G的,现在还剩2G的空余内存:Project2003已重新安裝多次且在安裝过程中沒有出现错误:在重新启动电脑后,在未打开其他程序的前提下,对Project2003进行操作仍出现同样的错误:我机子的系統是Win8.1专业版,该版本未激活.目前怀疑是版本未激活引起的错误,各位大神有什么见解??期待各位能够给与解決办法,尽快解决问题.谢谢!!!! 解决方案 解决方案

XmlHttp在DoNet中的完全应用---前/后台完成分离篇

xml|后台 本文主要实现了在donet中,前台界面与后台程序完成分离,以达到互不影响的效果,从而降低了前台后台之前的偶合度.(当然这种效果也只是相对的),就果我下面举的例子来说吧,会员注册和修改会员资料是在一个页面上显示.注册可以达到完成分离(后台程序可以完全不知道前台界面是什么样子的,也不需要知道前面界面窗体中包括哪些内容,即不需要知道前台将要传些什么值给我),但修改会员数据,就需要前台传个用户名来过,从而显示指定的用户信息.如果你采用其Cookies等用户级的变量来传的话,当然就可以达到完

PHP如何透過ODBC來存取資料庫

odbc 使用的環境 先建立一個測試用的資料庫 接著建立一個ODBC連結 再建個測試用的PHP Script 咱們來測試吧 作者 感謝 使用的環境 本文件主要是在Win32的環境下作說明, 您需要的是台跑Windows 9x/NT/2000的電腦, 並裝有任何一種web server和PHP3或PHP4, 且可正確執行PHP Script. 並有一種以上的SQL資料庫軟體, 例如:Access... 本文件以MS-Access資料庫來作說明, 其它種的資料庫端, 皆可以類似的方法來作ODBC連結

在 Flash 中使用 ASP 操控 Cookies

cookie|cookies 在 Flash 中設定以及讀取 cookies 是有必要的,例如可以在 Flash 檔案中提供網站個人化. Flash 不支援直接的設定以及讀取 cookies.因此,一般就是使用 JavaScript 或是 ASP scripts 設定以及讀取 Cookies.除了別的以外,另一好處是 Flash 即時是沒有 JavaScript 功能下仍能存取 cookies. Flash 檔案在下面描述了 Flash 檔案可以設定以及讀取 cookies,該檔案呼叫 ASP

JavaWeb 后端 &lt;八&gt; 之 JDBC基礎(全)

一.JDBC简介 1.JDBC是SUN公司为了简化操作数据推出一套规范.数据库厂商的驱动就是对JDBC的实现. 2.Java Data Base Connectivity(java数据库连接),它主要由接口组成. java.sql.*    javax.sql.*   JDK中 数据库的驱动jar包 (mysql-connector-java-5.0.8-bin.jar ) 二.JDBC的编码步骤 0.前提:拷贝数据库的驱动到构建路径中(classpath) 1.注册驱动 2.获取与数据库的链接