Aquí es una función que yo uso. Se hace un poco más que simplemente ejecuta la dirección de correo electrónico a través de una expresión regular, pero hasta el momento es la solución más completa que he encontrado:
function validEmail($email, $skipDNS = false)
{
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex)
{
$isValid = false;
}
else
{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64)
{
// local part length exceeded
$isValid = false;
}
else if ($domainLen < 1 || $domainLen > 255)
{
// domain part length exceeded
$isValid = false;
}
else if ($local[0] == '.' || $local[$localLen-1] == '.')
{
// local part starts or ends with '.'
$isValid = false;
}
else if (preg_match('/\\.\\./', $local))
{
// local part has two consecutive dots
$isValid = false;
}
else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
{
// character not valid in domain part
$isValid = false;
}
else if (preg_match('/\\.\\./', $domain))
{
// domain part has two consecutive dots
$isValid = false;
}
else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local)))
{
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local)))
{
$isValid = false;
}
}
if(!$skipDNS)
{
if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
{
// domain not found in DNS
$isValid = false;
}
}
}
return $isValid;
}
La función tiene un opcional $ skipDNS argumento que se puede establecer a VERDADERO si no quiere validar los registros MX de la hos. De lo contrario, la función intentará validar que la dirección de correo electrónico proporcionada realmente se asigna a un servidor de correo electrónico real.
Es útil tener en cuenta que la mayoría de las técnicas de validación de correo electrónico de RegEx validarán la mayoría de las direcciones de correo electrónico, pero lo más probable es que permitan algunas direcciones inválidas cuidadosamente elaboradas o peores ... fallan en direcciones de correo electrónico más oscuras pero válidas. Para obtener más información, puede consultar el Internet Message Formats RFC que describe el formato permitido para las direcciones de correo electrónico.
Hay muchas preguntas acerca de la expresión regular de correo electrónico. http://stackoverflow.com/questions/508108/regex-for-email-validation-closed – Macarse