php对Email邮箱地址进行强验证实现方法

PHP对Email(邮箱地址)进行强验证的代码感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!
下面的PHP代码可以对电子邮件地址进行简单验证和强验证,简单验证验证邮件格式和主机是否存在,强验证会连接邮件服务器进行验证,需要比较长时间

/**
 * PHP对Email(邮箱地址)进行强验证的代码
 *
 * @param 
 * @arrange 512-笔记网: 512Pic.com
 **/
<?PHP
/* 
 *  __construct($email)     takes an email address to check 
 *  
 * simpleCheck()            Tests to see if an email address is formatted correctly 
 *                          and the domain it belongs to exists,such as: gmail.com,yahoo.com 
 *  
 * strongCheck()            Tests to see if an email address is valid and that the 
 *                          email actually accepts emails by actually connecting to the server. 
 *                          Note: strongCheck() can be slow 
 */
class EmailValidator{
	private $email  = ; 
	private $mxhost = ;
	public function __construct($email){ 
		$this->email  = $email; 
		$this->mxhost = $this->getMXHost(); 
	}
	public function strongCheck(){ 
		if(filter_var($this->email,FILTER_VALIDATE_EMAIL) && $this->fConnect()){ 
			return true; 
		} 
		return false; 
	}
	public function simpleCheck(){ 
		if(filter_var($this->email,FILTER_VALIDATE_EMAIL) && $this->getMXHost()){ 
			return true; 
		} 
		return false; 
	}
	private function fConnect(){ 
		$fp             = @fsockopen($this->mxhost,25,$errno,$errstr,5); 
		$ms_resp        = ; 
		$b_server_found = false; 
		if($fp){ 
			$ms_resp .= $this->send_command($fp,HELO hi); 
			$ms_resp .= $this->send_command($fp,MAIL FROM:<ryan@ryannaddy.com>); 
			$rcpt_text = $this->send_command($fp,RCPT TO:<{$this->email}>); 
			$ms_resp .= $rcpt_text; 
			if(substr($rcpt_text,3) == 250){ 
				$b_server_found = true; 
			} 
			$ms_resp .= $this->send_command($fp,QUIT); 
			fclose($fp); 
		} 
		return $b_server_found; 
	}
	private function getMXHost(){ 
		if(!empty($this->mxhost)){ 
			return $this->mxhost; 
		} 
		list($user,$domain) = explode(@,$this->email); 
		getmxrr($domain,$hosts,$weights); 
		$priority = mt_getrandmax(); 
		$key      = 0; 
		if(empty($weights)){ 
			return false; 
		} 
		foreach($weights as $k => $v){ 
			if($v < $priority){ 
				$key      = $k; 
				$priority = $v; 
			} 
		} 
		return $hosts[$key]; 
	}
	private function send_command($fp,$out){ 
		fwrite($fp,$out . \r\n); 
		return $this->get_data($fp); 
	}
	private function get_data($fp){ 
		$s = ; 
		stream_set_timeout($fp,2); 
		for($i = 0; $i < 2; $i++){ 
			$s .=fgets($fp,1024); 
		} 
		return $s; 
	}
}
$hosts = array( 
	asdfsfd@adsfasdasd.com,asdfsfd@google.com,asdf!sfd@gmail.com,asdfsfd@yahoo.com,asd^sfd@44n5o$.com,dddasdf@gamil.com 
);
foreach($hosts as $host){ 
	echo $host . \n; 
	$em = new EmailValidator($host); 
	echo     ; 
	var_dump($em->simpleCheck()); 
	echo     ; 
	var_dump($em->strongCheck()); 
}

/***   来自编程之家 jb51.cc(jb51.cc)   ***/

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...