PHP自带方法验证邮箱是否存在


Posted in PHP onFebruary 01, 2016

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

filter_var

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

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自带方法如何验证邮箱、URL、IP是否合法,下面为大家介绍:

主要还是使用的是filter_var函数

语法
filter_var(variable, filter, options)
variable 必需。规定要过滤的变量。
filter 可选。规定要使用的过滤器的 ID。
options 规定包含标志/选项的数组。检查每个过滤器可能的标志和选项。

PHP Filters

PHP自带方法验证邮箱是否存在

Example #1 A filter_var() example

<?php

var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));

var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));

?>

以上例程会输出:

string(15) "bob@example.com"
bool(false)

以上就是本文的全部内容,希望对大家进行php邮箱验证有所帮助。

PHP 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
php jquery 实现新闻标签分类与无刷新分页
Dec 18 PHP
php检测文件编码的方法示例
Apr 25 PHP
CI框架中zip类应用示例
Jun 17 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
php常用字符函数实例小结
Dec 29 PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php函数式编程简单示例
Aug 08 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 #PHP
实例详解PHP中html word 互转的方法
Jan 28 #PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 #PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 #PHP
PHP文件上传之多文件上传的实现思路
Jan 27 #PHP
PHP内核学习教程之php opcode内核实现
Jan 27 #PHP
PHP编程入门的基本语法知识点总结
Jan 26 #PHP
You might like
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
jquery 插件开发方法小结
2009/10/23 Javascript
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
Python绘制3D图形
2018/05/03 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Python函数生成器原理及使用详解
2020/03/12 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
后勤岗位职责
2013/11/26 职场文书
大学生个人事迹材料
2014/01/21 职场文书
高中物理教学反思
2014/02/08 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
教师工作失职检讨书
2014/09/18 职场文书
单位实习鉴定评语
2015/01/04 职场文书
资料员岗位职责
2015/02/10 职场文书
营运督导岗位职责
2015/04/10 职场文书
中学教师教学工作总结
2015/08/13 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
DIY胆机必读:各国电子管评价
2022/04/06 无线电