使用PHP来检验Email地址是否真实有效的邮址

    这几天一直在想一个项目,在想这个项目执行里将会遇到的几个关键点。当然这些还停留在IDEA上,其它一个关键点就正好需要用到检验邮箱是否真实有效。这几天也找了些资料,除了找到一个WEBXML的收费接口外,还真的很少介绍如何检验邮箱有效性。

    网上的通常做法有两种方式(或结合起来):
    第一是检验邮箱格式是否正确;
    第二是向邮箱发送一封邮件,邮箱用户通用一个链接地址来进行确认。

    但这些方式并不适合于我的想法。刚找到一篇文章,正是我想的方法。OH~YEAR~~
    方法如下:

    function validEmail($email) {
    	$isValid = true;
    	$atIndex = strrpos ( $email, "@" );
    	if (is_bool ( $atIndex ) && ! $atIndex) {
    	$isValid = false;
    	} else {
    	$domain = substr ( $email, $atIndex + 1 );
    	$local = substr ( $email, 0, $atIndex );
    	$localLen = strlen ( $local );
    	$domainLen = strlen ( $domain );
    	if ($localLen < 1 || $localLen > 64) {
    	// local part length exceeded
    	$isValid = false;
    	} else if ($domainLen < 1 || $domainLen > 255) {
    	// domain part length exceeded
    	$isValid = false;
    	} else if ($local [0] == '.' || $local [$localLen - 1] == '.') {
    	// local part starts or ends with '.'
    	$isValid = false;
    	} else if (preg_match ( '/\\.\\./', $local )) {
    	// local part has two consecutive dots
    	$isValid = false;
    	} else if (! preg_match ( '/^[A-Za-z0-9\\-\\.]+$/', $domain )) {
    	// character not valid in domain part
    	$isValid = false;
    	} else if (preg_match ( '/\\.\\./', $domain )) {
    	// domain part has two consecutive dots
    	$isValid = false;
    	} else if (! preg_match ( '/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace ( "\\\\", "", $local ) )) {
    	// character not valid in local part unless 
    	// local part is quoted
    	if (! preg_match ( '/^"(\\\\"|[^"])+"$/', str_replace ( "\\\\", "", $local ) )) {
    		$isValid = false;
    	}
    	}
    	//5.3.0 This function is now available on Windows platforms. 
    	if ($isValid && ! (checkdnsrr ( $domain, "MX" ) || checkdnsrr ( $domain, "A" ))) {
    	// domain not found in DNS
    	$isValid = false;
    	}
    	}
    	return $isValid;
    }
    

    以上方法转载自:http://rocing.cn/show-387-1.html
    原始方法出自:http://www.linuxjournal.com/article/9585

相关文章
在ecshop的商品详情页调用商品所属品牌的描述ecshop中批量替换货号前缀PHP 性能优化技巧php中用substr截取时中文乱码的解决办法PHP服务器变量$_SERVER详解PHP中的正则表达式完整的editplus之php语法文件用php实现远程网络文件下载到服务器使用PHP通过GOOGLE翻译接口自动翻译文件PHP中rawurlencode将字符串编码成URL专用格式时与页面编码的关系全新学习PHP[第一天]PHP技巧:php过滤危险html代码php中计算时间差的几种方法PHP读取目录下所有文件的代码一个图形显示IP的PHP程序代码php下过滤HTML代码的函数ASP与PHP读取多张表(多张表的操作)越来越喜欢玩PHP了最近喜欢上PHP了[转载]关于ajax与php结合中文处理问题
    标签:phpemail 评论数:2 发布于:2011-07-15 14:21:35

当前共有2条评论,我也要发表:

    我的名字:

    我的邮箱:

    作者:李亚时间:2012-04-13 16:47:58回复

      这个怎么用啊,能不能出一份完整的源码啊。

      作者:SimonSu时间:2012-04-14 22:38:38回复

        上面不是说了很清楚了吗?直接用。如果你看不明白,说了你也一样不会明白。