php判断邮箱地址是否存在的方法


Posted in PHP onFebruary 13, 2016

PHP校验邮箱地址的方法很多, 比较常用的就是自己写正则了, 不过正则多麻烦, 我PHP自带了方法做校验。

filter_var

filter_var是PHP内置的一个变量过滤的方法, 提供了很多实用的过滤器, 可以用来校验整数、浮点数、邮箱、URL、MAC地址等。

具体的过滤器参考: filters.validate

filter_var如果返回false, 说明变量无法通过过滤器, 也就是不合法了。

$email = "lastchiliarch@163.com";
 
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
 
$email = "asb";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
$email = "1@a.com";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
输出:
 
 
string(21) "lastchiliarch@163.com"
bool(false)
string(7) "1@a.com"

对于asb这种非法邮箱格式返回了false, 但对于1@a.com则通过了,还是略有瑕疵啊。

不过一般的正则也通过会认为1@a.com是一个合法的邮箱, 那有啥办法可以更精准的验证呢?

checkdnsrr

checkdnsrr其实是用来查询指定的主机的DNS记录的,我们可以借用它来验证邮箱是否存在。

对于1@a.com肯定是MX记录不存在的。

$email = "lastchiliarch@163.com";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
  $email = "1@a.com";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
 
  输出:
  bool(true)
  bool(false)

可以看到, 很完美, 唯一的缺点就是太慢了, 毕竟是要做一次网络请求。 所以不适合同步对大量的邮箱采用这种做法去校验。

filter_var+checkdnsrr

我们可以接合filter_var 和checkdnsrr做校验, 对于绝大多数的非法邮箱肯定会在filter_var的时候就挂掉了, 剩下的再用

checkdnsrr进一步判断。

$email_arr = array("lastchiliarch@163.com", "1@a.com");
  foreach($email_arr as $email) {
    if (filter_var($email) === false) {
      echo "invalid email: $email \n";
      continue;
    }
 
    if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) {
      echo "invalid email: $email \n";
      continue;
    }
  }
 
  输出: invalid email: 1@a.com

但要注意的是, 由于只是检查MX记录, 所以只能判断163.com是存在的, 但不能说明lastchiliarch这个用户是存在的。

想要更精确的判断邮箱存在, 那只能连接到smtp服务器去验证了。

下面为大家分享的php邮箱地址正则表达式验证,具体内容如下

<?php
 header ( "Content-Type: text/html; charset=UTF-8" );
 $reply = "";
 if ( isset($_POST["email_address"]) )
 {
  $email_address = $_POST["email_address"];
  $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
  if ( preg_match( $pattern, $email_address ) )
  {
   $reply = "您输入的电子邮件地址合法<br /><br />\n";
   $user_name = preg_replace( $pattern ,"$1", $email_address );
   $domain_name = preg_replace( $pattern ,"$2", $email_address );
   $reply .= "用户名:".$user_name."<br />\n";
   $reply .= "域名:".$domain_name."<br />\n\n";
  }
  else
  {
   $reply = "您输入的电子邮件地址不合法";
  }
 }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh" xml:lang="zh">
<head>
<title>电子邮件地址验证程序</title>
</head>
<body style="text-align: center;">
<h1>电子邮件地址验证程序</h1>
<form action="#" method="post">
请输入电子邮件地址:<input name="email_address" type="text" style="width: 300px;" /><br />
<input type="submit" value="验证电子邮件地址" />
</form>
<?php
 echo $reply;
?>
</body>
</html>

希望大家喜欢这篇文章,对大家有所帮助。

PHP 相关文章推荐
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
javascript some()函数用法详解
Nov 13 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
Oct 20 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
PC端微信扫码支付成功之后自动跳转php版代码
Jul 07 PHP
php报错502badgateway解决方法
Oct 11 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
php打包网站并在线压缩为zip
Feb 13 #PHP
php session 写入数据库
Feb 13 #PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 #PHP
PHP信号量基本用法实例详解
Feb 12 #PHP
PHP消息队列用法实例分析
Feb 12 #PHP
PHP共享内存用法实例分析
Feb 12 #PHP
PHP连接MSSQL方法汇总
Feb 05 #PHP
You might like
多人战的战术与战略
2020/03/04 星际争霸
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
php curl选项列表(超详细)
2013/07/01 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
Ext 表单布局实例代码
2009/04/30 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
jquery实现拖动效果
2016/08/10 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
python实现爬取图书封面
2018/07/05 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
求职信的最佳写作思路
2014/02/01 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
实习评语大全
2014/04/26 职场文书
大学新生军训方案
2014/05/03 职场文书
七一建党日演讲稿
2014/09/05 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
python自动化测试之Selenium详解
2022/03/13 Python