當前位置:首頁 > PHP教程 > php應用 > 列表

php準確校驗郵箱地址是否存在的例子

發布:smiling 來源: PHP粉絲網  添加日期:2017-03-23 10:45:10 瀏覽: 評論:0 

校驗郵箱地址在php中有函數了我們只要執行函數就可以了,下面一起來看篇關于php準確校驗郵箱地址是否存在的例子,具體的如下所示。

背景:

PHP校驗郵箱地址的方法很多, 比較常用的就是自己寫正則了, 不過正則多麻煩, 我PHP自帶了方法做校驗。

filter_var

filter_var是PHP內置的一個變量過濾的方法, 提供了很多實用的過濾器, 可以用來校驗整數、浮點數、郵箱、URL、MAC地址等。

具體的過濾器參考: filters.validate

filter_var如果返回false, 說明變量無法通過過濾器, 也就是不合法了。

  1. $email = "[email protected]"
  2. var_dump(filter_var($email,  FILTER_VALIDATE_EMAIL)); 
  3.  
  4. $email = "asb"
  5. var_dump(filter_var($email,  FILTER_VALIDATE_EMAIL)); 
  6. $email = "[email protected]"
  7. var_dump(filter_var($email,  FILTER_VALIDATE_EMAIL)); 

輸出:

  1. string(21) "[email protected]" 
  2. bool(false) 
  3. string(7) "[email protected]" 

對于asb這種非法郵箱格式返回了false, 但對于[email protected]則通過了,還是略有瑕疵啊。

不過一般的正則也通過會認為[email protected]是一個合法的郵箱, 那有啥辦法可以更精準的驗證呢?

checkdnsrr

checkdnsrr其實是用來查詢指定的主機的DNS記錄的,我們可以借用它來驗證郵箱是否存在。

對于[email protected]肯定是MX記錄不存在的。

  1. $email = "[email protected]"
  2.     var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX")); 
  3.     $email = "[email protected]"
  4.     var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX")); 
  5.     //輸出: 
  6.     bool(true) 
  7.     bool(false) 

可以看到,很完美,唯一的缺點就是太慢了,畢竟是要做一次網絡請求, 所以不適合同步對大量的郵箱采用這種做法去校驗.

filter_var+checkdnsrr

我們可以接合filter_var 和checkdnsrr做校驗,對于絕大多數的非法郵箱肯定會在filter_var的時候就掛掉了,剩下的再用checkdnsrr進一步判斷.

  1. $email_arr = array("[email protected]""[email protected]"); 
  2. foreach($email_arr as $email) { 
  3.     if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) { 
  4.         echo "invalid email: $email \n"
  5.         continue
  6.     } 
  7.     if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) { 
  8.         echo "invalid email: $email \n"
  9.         continue
  10.     } 

輸出: invalid email: [email protected]

但要注意的是,由于只是檢查MX記錄,所以只能判斷163.com是存在的,但不能說明lastchiliarch這個用戶是存在的.

想要更精確的判斷郵箱存在,那只能連接到smtp服務器去驗證了.

Tags: 例子 郵箱 地址

分享到:

福利彩票25选5开奖结果