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 相关文章推荐
PHP4之真OO
Oct 09 PHP
php email邮箱正则
Oct 08 PHP
最新的php 文件上传模型,支持多文件上传
Aug 13 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
详解PHP中的null合并运算符
Dec 30 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 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代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
js数组的操作指南
2014/12/28 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
canvas知识总结
2017/01/25 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
Python语法分析之字符串格式化
2019/06/13 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
pytorch之添加BN的实现
2020/01/06 Python
Python表达式的优先级详解
2020/02/18 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
工作会议方案
2014/05/21 职场文书
运动会加油稿
2015/07/22 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
判断Python中的Nonetype类型
2021/05/25 Python
数据设计之权限的实现
2022/08/05 MySQL