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 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
微信API接口大全
Apr 15 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
php输出图像的方法实例分析
Feb 16 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 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
提高PHP编程效率的方法
2013/11/07 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
js实现放大镜特效
2017/05/18 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
python实现socket端口重定向示例
2014/02/10 Python
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
python实现发送邮件功能代码
2017/12/14 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
提升python处理速度原理及方法实例
2019/12/25 Python
基于keras中的回调函数用法说明
2020/06/17 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
大学生活学习的自我评价
2013/12/03 职场文书
大学校庆策划书
2014/01/31 职场文书
科研先进个人典型材料
2014/01/31 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
应届生找工作求职信
2014/06/24 职场文书
单位消防安全责任书
2014/07/23 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
黄山导游词
2015/01/31 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript
Python中Selenium对Cookie的操作方法
2021/07/09 Python