Bueno, lo que planteas es bastante escabroso.
Me detengo primero en el tema del e-mail ya que es el tema que sí he trabajado directamente.
El problema es que no puedes saber si una dirección de correo electrónico es real a menos que envíes un correo a esa dirección y esperes la respuesta (que además puede que nunca la obtengas).
Sí puedes validar que la cadena de caracteres que te están dando esté bien formada, pero por supuesto esto no te asegura que esa supuesta dirección exista. Lo que está antes del @ puede ser prácticamente cualquier cosa mientras que lo que está después debe ser el nombre de un servidor.
Para saber si una cadena de caracteres es una dirección de correo electrónica bien formada, tengo en mi biblioteca de funciones una que lo hace:
Código PHP :
function is_email($email) {
$p = '/^[a-z0-9!#$%&*+-=?^_`{|}~]+(\.[a-z0-9!#$%&*+-=?^_`{|}~]+)*';
$p.= '@([-a-z0-9]+\.)+([a-z]{2,3}';
$p.= '|info|arpa|aero|coop|name|museum)$/ix';
return preg_match($p, $email);
}
No la hice yo y no recuerdo de dónde la saqué pero fue la primera que pasó todas las pruebas que le hice. Si regresa "true", la cadena de caracteres es una dirección de correo electrónico bien formada.
Lo que puedes hacer a continuación es *tratar* de verificar que el dominio exista, primero hay que extraer esa parte de la dirección:
Código PHP :
function getEmailHost($email) {
$coincidencias = Array();
$res = preg_match("/@(.*?)$/m",$email,$coincidencias);
return @$coincidencias[1];
}
La función devuelve la parte del dominio de la dirección.
Ahora se podría tratar de saber si ese dominio existe:
Código PHP :
function is_validHost($host) {
$ip = gethostbyname($host);
return $ip != $host;
}
La función espera un nombre de dominio y regresa "true" o "false" dependiendo de si existe.
PERO!: lamentablemente esto no te asegura mucho puesto que existe un pequeño detalle. Que el dominio no exista no significa necesariamente que la dirección de correo es falsa. Sea por ejemplo el dominio "example.com" el cual la función regresa "false", sin embargo el dominio "www.example.com" sí existe y sucede que el servidor de correo en "www.example.com" acepta direcciones con el dominio sin "www" delante aunque "example.com" no resuelva a una IP válida. Esto es así porque el dominio "example.com" está reservado pero no asignado a una IP mientras que el dominio "www.example.com" sí está asignado a una IP.
En conclusión, un dominio puede estar reservado pero no estar asignado a una IP.