En otra entrada anterior –Validar E-mails con PHP– hablé de una clase (programada por mí) que permite saber si una dirección email es válida y existe. Ahora veremos su aplicación en linea y la forma de validar correos con xajax.
Básicamente lo que haremos, será introducir una dirección de correo en un campo de texto, el cual obtendremos y via xajax se la pasaremos a la clase en PHP, que se encargará de enviar los comandos al servidor mail correspondiente y devolver el resultado.
Nota: La clase, por el momento, no funciona con servidores SSL, tipo Gmail/Yahoo.
Validando email… ![]()
E-mail válido ![]()
E-mail inválido ![]()
Podemos apreciar el ejemplo funcionando aquí.
Descargar ejemplo
Si lo prefieres, puedes descargar el ejemplo…
Primero descargaremos la clase y descompactaremos el zip dentro de un directorio, en el cual incluiremos también el xajax.
Nota: La versión de xajax que yo uso es la 0.2.4, algo vieja pero servirá para los propósitos de demostración.
<?
/**
* Modulo para usar clase validmail y validar correos
* @author: Amir oswaldo Canto
* @date 23/08/08
*/
require($_SERVER[DOCUMENT_ROOT]."/xajax/xajax.inc.php");
require("class.validmail.php");
/*
Declaramos xajax....
*/
$xajax = new xajax();
$xajax->registerFunction("isValidMail");
$xajax->processRequests();
function isValidMail($email)
{
$objResponse = new xajaxResponse();
{/* Comprobamos que el parámetro email se encuentre seteado con algun valor*/
if(isset($email) && $email != "")
{
$validMail = new ValidEmail($email); // llamamos a la clase
if(!$validMail->validString() || !$validMail->validate() )
// comprobamos ahora sí el email
{
$objResponse->addAssign("verificacion","innerHTML","<img src='images/cross.png' alt='' /> El Email no es válido");
$objResponse->addScript("document.getElementById('verificacion').className = 'redbox';");
}
else
{
$objResponse->addAssign("verificacion","innerHTML","<img src='images/accept.png' alt='' /> Email Válido ");
$objResponse->addScript("document.getElementById('verificacion').className = 'greenbox';");
}
$objResponse->addScript("document.getElementById('email').disabled = false;");
}
}
return $objResponse;
}
?>
Este código lo incluiremos dentro de un fichero llamado mod.valid.php o dentro de nuestro script donde se encuentra nuestro formulario y será el responsable de llamar a la clase de validación y procesar los requests y devolver el resultado.
function isValidMail(email){
if(email.value != "")
{
var htmlCode = "<img src='images/ajax-loader.gif' alt='' /> Validando E-mail...";
var verificacion = document.getElementById('verificacion');
verificacion.innerHTML = "";
verificacion.innerHTML = htmlCode;
verificacion.className = '';
email.disabled = true;
xajax_isValidMail(email.value);
}
}
<?php
require("mod.valid.php");
?>
<html>
<head>
<title>Validando email</title>
<link rel="stylesheet" href="estilo.css" type="text/css" />
<script language="javascript" type="text/javascript" src="mail.js"></script>
<?php
if(isset($xajax) && is_object($xajax))
{
$xajax->printJavascript("http://".$_SERVER[SERVER_NAME]."/xajax/");
}
?>
</head>
<body>
<form>
<label for="email">
E-mail <input type="text" value="" onblur="isValidMail(this)" name="email" id="email" /> <span id="verificacion" />
</label>
</form>
</body>
</html>
Despues de agregar los scripts CSS, JS y PHP en nuestro fichero donde se encuentra nuestro formulario, agregaremos el campo “email” como sigue:
<label for="email"> E-mail <input type="text" value="" onblur="isValidMail(this)" name="email" id="email" /> <span id="verificacion" /> </label>
Notese que el nombre e id son iguales “email” y no deben cambiarse por ningún motivo, la funcion isValidMail envia al accionarse el evento onblur el mail al script PHP que comprobará y validará nuestro mail en tiempo real.
Descargar
Descarga la clase y el ejemplo aqui.
In creible super util, tratare de adaptarlo a jquery….
:’( Gracias Ricardo (Richi te puedo llamar? xD)
un saludo espero que les guste
Pues no me funciona bien, no valida mi email, admin arr0ba emm-gfx.net.
Hola Josep, el script no valida tu mail, tengo una duda…
tu servidor usa autenticación?
por que sí es así la clase no está programada para trabajar con servidores smtp que requieran autenticación.
Para darte una idea puedes tratar de validar con mi mail:
amircanto[arroba]hotmail.com
o con cualquier otro hotmail, también puedes tratar con el dominio algoritmatica.com (webmaster[arroba]algoritmatica.com).
Un saludo
Es una lastima que no funcione con servidores SSL, bastante importante si ha de implementarse en una web de uso general… Queda mal decirle a un vistante que su cuenta de gmail no existe… Pero la idea es buena
holi
Hola…no me funciona, dá una alerta: ‘Error: the XML response that was returnered form the server is invalid’ y mucho más texto que no pongo
La verdad es que está bien, pero con la rápida implementación de SSL (actualmente los más importantes la obligan) no es un script muy válido, aunque como prueba de concepto está bien…
Obviamente es un PoC, no me tomé el tiempo para implementarle SSL, ahí está por si alguien se atreve
.
@Armen: Podrías ser más especifico en el error? tomarle una captura por ejemplo?
por que a mí me funciona y bien…
Un saludo!
Me devuelve:
Error: the XML response that was returned from the server is invalid.
Received:
Warning: socket_connect() function.socket-connect: unable to connect [111]: Connection refused in /home/algo/public_html/ejemplos/validarmails/class.validmail.php on line 149
Perdón, me declaro culpable, estuve haciendo cambios y parece que rompí esa parte.
Hello, can you please post some more information on this topic? I would like to read more.
En mi caso no funcion introduzco un mail de hotmail y me sale no valido? por que sucede esto
Yo tambien lo he estado probando desde la demo que teneis colgada y parece ser que ha dejado de funcionar totalmente. Introduzcas el email que introduzcas, siempre aparece como no valido.
Habrá una nueva version que solucione esto?
Gracias!