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 相关文章推荐
php获得文件扩展名三法
Nov 25 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
PHP 可阅读随机字符串代码
May 26 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
PHP反向代理类代码
Aug 15 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
学习PHP的数组总结【经验】
May 05 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
Laravel框架查询构造器简单示例
May 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
我的群发邮件程序
2006/10/09 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
javascript 常用功能总结
2012/03/18 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
简单的python后台管理程序
2017/04/13 Python
目前最全的python的就业方向
2018/06/05 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
数据库专业英语
2012/11/30 面试题
班风学风建设方案
2014/05/06 职场文书
项目建议书模板
2014/05/12 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
长城英文导游词
2015/01/30 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python