Skip to content

Instantly share code, notes, and snippets.

@pierre-dargham
Last active April 12, 2021 09:35
Show Gist options
  • Save pierre-dargham/841ead2b902a1ea1622ee02249cf4d09 to your computer and use it in GitHub Desktop.
Save pierre-dargham/841ead2b902a1ea1622ee02249cf4d09 to your computer and use it in GitHub Desktop.
email_validation.php
<?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('foobar@hotmail.ocm')); // error: invalid email domain
var_dump(validate_email('foobar@outlok.com')); // error: invalid email domain
var_dump(validate_email('foobar@gmal.com')); // error: error: invalid email domain
echo PHP_EOL;
var_dump(validate_email('foobar@yopmail.com')); // error: email domain is disposable / burner provider
var_dump(validate_email('foobar@mailinator.com')); // error: email domain is disposable / burner provider
var_dump(validate_email('foobar@10minutemail.com')); // error: email domain is disposable / burner provider
echo PHP_EOL;
var_dump(validate_email('foobar@hotmail.com')); // true
var_dump(validate_email('foobar@gmail.com')); // true
var_dump(validate_email('foobar@outlook.com')); // true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment