驗證一個郵件地址的真實性

原文來自 Laravist 社區: https://www.codecasts.com/blo...正則表達式

一個郵件地址是否有效關係必定程度上決定了這個用戶是不是優質用戶,或者說成爲優質用戶的潛質更大。因此在用戶註冊的時候,咱們一般會絞盡腦汁來驗證一個郵箱地址的有限性。json

本文並非簡單地討論使用正則表達式來驗證一個郵箱地址是否正確,而是但願經過更多的手段來真正驗證一個郵箱地址的郵箱性curl

本文驗證一個郵件地址有效性的內容包含如下幾個內容:ide

  1. 最常規的正則表達式的匹配post

  2. 郵件的 DNS 有效性ui

  3. 檢驗 MX 記錄的有效性this

  4. 屏蔽一次性郵件服務商url

  5. 更多細節,好比發起發信請求code

validator.pizza

啊哈,在這裏推薦你們能夠使用 https://www.validator.pizza 郵件驗證服務,免費,準確率還很高。具體的實現方式是經過向 validator.pizza 發起 HTTP 請求,用來驗證用戶郵箱地址是否有效,好比,普通的 PHP 代碼能夠是這個樣子:blog

$email = "666@qq.com"; // 這是一個 laravist 社區註冊的垃圾郵件

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.validator.pizza/email/' . $email);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

或者在 Laravel 的項目當中,咱們還能夠直接擴展 Validator 來實現郵件地址有效性的驗證,在 AppServiceProviderboot() 方法添加下面的代碼:

public function boot()
    {
        Validator::extend('isValid', function ($attribute, $value, $parameters, $validator) {
                $request = (new Client())->get('https://www.validator.pizza/email/' . $value);
                $body = json_decode($request->getBody()->getContents());
                switch ( $body ) {
                    case $body->status == 400:
                        return false;
                    case !$body->mx:
                        return false;
                    case $body->disposable:
                        return false;
                    default:
                        return true;
                }
            }, '郵箱地址不可用');
}

而後在驗證的時候能夠這樣使用:

$this->validate(request(),['email'=>'required|isValid'])

這樣一來,基本上就能夠應付 90% 以上的郵件地址驗證,包含一次性郵件地址驗證有效性驗證

相關文章
相關標籤/搜索