Last active
April 12, 2021 09:35
-
-
Save pierre-dargham/841ead2b902a1ea1622ee02249cf4d09 to your computer and use it in GitHub Desktop.
email_validation.php
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// composer require wesbos/burner-email-providers | |
function validate_email($email) | |
{ | |
$email = mb_strtolower($email); | |
if(!email_has_valid_format($email)) { | |
return "error: invalid email format"; | |
} | |
if(!email_has_valid_domain_record($email)) { | |
return "error: invalid email domain"; | |
} | |
if(!email_is_not_in_burner_domains_blacklist($email)) { | |
return "error: email domain is disposable / burner provider"; | |
} | |
return true; | |
} | |
function get_email_domain($email) | |
{ | |
return mb_strtolower(mb_substr(mb_strrchr($email, "@"), 1)); | |
} | |
function email_has_valid_format($email) | |
{ | |
return !empty(filter_var($email, FILTER_VALIDATE_EMAIL)); | |
} | |
function email_has_valid_domain_record($email) | |
{ | |
$domain = get_email_domain($email); | |
return checkdnsrr($domain . '.', "MX") || checkdnsrr($domain . '.', "A"); | |
} | |
function email_is_not_in_burner_domains_blacklist($email) | |
{ | |
static $burnersDomains = null; | |
if(is_null($burnersDomains)) { | |
// @see https://github.com/wesbos/burner-email-providers | |
$file = __DIR__ . '/vendor/wesbos/burner-email-providers/emails.txt'; | |
if(!file_exists($file) || !is_readable($file)) { | |
$burnersDomains = []; | |
} else { | |
$burnersDomains = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); | |
} | |
} | |
if(empty($burnersDomains)) { | |
return true; | |
} | |
$domain = get_email_domain($email); | |
return !in_array($domain, $burnersDomains); | |
} | |
// OUTPUT: | |
var_dump(validate_email('foobar')); // error: invalid email format | |
var_dump(validate_email('@example.com')); // error: invalid email format | |
var_dump(validate_email('foobar@example')); // error: invalid email format | |
echo PHP_EOL; | |
var_dump(validate_email('[email protected]')); // error: invalid email domain | |
var_dump(validate_email('[email protected]')); // error: invalid email domain | |
var_dump(validate_email('[email protected]')); // error: error: invalid email domain | |
echo PHP_EOL; | |
var_dump(validate_email('[email protected]')); // error: email domain is disposable / burner provider | |
var_dump(validate_email('[email protected]')); // error: email domain is disposable / burner provider | |
var_dump(validate_email('[email protected]')); // error: email domain is disposable / burner provider | |
echo PHP_EOL; | |
var_dump(validate_email('[email protected]')); // true | |
var_dump(validate_email('[email protected]')); // true | |
var_dump(validate_email('[email protected]')); // true |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment