Tu portal de
formación online
United States

Infórmate
Inicio » Artículos » Programación » PHP » Validación estricta de direcciones de correo con PHP

Suscríbete al boletín

Recibirás información detallada de nuestras ofertas, noticias, etc.

Suscríbete al boletín

Enviar a un amigo

Si crees que este Artículo le puede interesar a un amigo puedes enviarselo desde aquí.

Enviar a un amigo

Validación estricta de direcciones de correo con PHP

02-12-2008 Daniel Ibáñez
Es posible que en un momento dado, desees que la gente que se da de alta en tu web introduzcan un correo electrónico real, y no un correo falso.
Para ello, además de validar el formato del correo, debes obligarle a que cumpla algún requisito más.

En este ejemplo vamos a ver cómo requerir que el dominio de una dirección de correo se corresponda con un dominio real. Esta característica podremos implementarla haciendo uso de la fucnión getmxrr de PHP
getmxrr
(PHP 3, PHP 4, PHP 5)
Descripción
bool getmxrr ( string nombre_host, 
array &hosts_mx [, array &peso] )
Busca en DNS por registros MX correspondientes 
a nombre_host. Devuelve TRUE si se encuentran
registros; devuelve FALSE si no se encuentran registros
o si ocurre un error.
Una lista de los registros MX encontrados es colocada
en la matriz hosts_mx. Si la matriz peso es definida,
será llenada con la información de peso recolectada.
Nota: Esta función no es implementada en plataformas Windows.


Como aparece en el manual de PHP, la función getmxrr busca en servidores DNS entradas correspondientes al parámentro nombre_host, y nos devuelve un valor booleano con verdadero o falso dependiendo de si tiene éxito o no y nos modificará el array hosts_mx con los registros encontrados.

En nuestro script nos definiremos la siguiente función para validar un dominio:



function validarDominio($domain)
{
    // Get the records
    getmxrr($domain, $mx_records, $mx_weight);
    return (count($mx_records) > 0);
}


Por otra parte necesitaremos una función que nos valide el formato del correo y que invoque a la anterior función.


function validarEmail($value)
{
$reg_exp= "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/";
$result=preg_match($reg_exp, $value);
if ($result)
{
//validar el registro mx del dominio
$mailparts=explode("@",$value);
$retVal=validarDominio($mailparts[1]);
}
else
{
$retVal=false;
}
return $retVal;

}

Así, antes de validar si un dominio es válido, verificaremos que la dirección de email recibida cumple con el formato de email válido.

Con las funciones anteriores, podríamos validar una dirección de email recibida de la siguiente forma:

<?php

function validarDominio($domain)
{
// Get the records
getmxrr($domain, $mx_records, $mx_weight);
return (count($mx_records) > 0);
}

function validarEmail($value)
{
$reg_exp= "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/";
$result=preg_match($reg_exp, $value);
if ($result)
{
//validar el registro mx del dominio
$mailparts=explode("@",$value);
$retVal=validarDominio($mailparts[1]);
}
else
{
$retVal=false;
}
return $retVal;

}

$email = $_GET['email'];

if(
validarEmail($email))
{
echo "Dirección de email válida";
}
else
{
echo "Dirección de email no válida";
}

?>
juan03-05-2014

Buenas tardes como seria para hacer que solo acepte correos de gmail, hotmail, yahoo

* Los comentarios son propiedad de quien los envió, adrformación no se hace responsable de su contenido.