Para verificar la existencia de una dirección de correo electrónico, el servidor puede hacer ping a esa dirección de correo electrónico contra un servidor SMTP correspondiente para validarlo. Hay algunos pasos involucrados. Suponiendo que el usuario envió (por ejemplo) una dirección de gmail, y suponiendo que es su aplicación web la que realiza la validación, usted haría lo siguiente:
Paso 1: envía un comando nslookup:
nslookup –type=mx gmail.com
Este comando nslookup consultará los servidores de nombres para ese dominio. Dado que hemos especificado el tipo como MX, nuestro comando extraerá y listará los registros MX del dominio de correo electrónico. Reemplace gmail.com con el dominio de la dirección de correo electrónico que intenta verificar.
gmail.com MX preference=30, exchanger = alt3.gmail-smtp-in.l.google.com
gmail.com MX preference=20, exchanger = alt2.gmail-smtp-in.l.google.com
gmail.com MX preference=5, exchanger = gmail-smtp-in.l.google.com
gmail.com MX preference=10, exchanger = alt1.gmail-smtp-in.l.google.com
gmail.com MX preference=40, exchanger = alt4.gmail-smtp-in.l.google.com
Paso 2: Como puede haber notado en la salida de nslookup, no es raro tener múltiples registros MX para un dominio. Elija cualquiera de los servidores enumerados en los registros MX, tal vez el que tenga el número de nivel de preferencia más bajo (en nuestro ejemplo, gmail-smtp-in.l.google.com), y "pretender" para enviar un mensaje de prueba a ese servidor desde su aplicación web:
Conéctese al servidor de correo a través de telnet:
telnet gmail-smtp-in.l.google.com 25
Saluda al otro servidor:
HELO
Identifícate con alguna dirección de correo electrónico ficticia:
mail from:<[email protected]>
Especifique la dirección de correo electrónico del usuario que está intentando verificar:
rcpt to:<[email protected]>
Paso 3: verifique la respuesta para determinar la validez de la dirección de correo electrónico. La respuesta para el comando 'rcpt to' le dará una idea de si la dirección de correo electrónico del usuario es válida o no. Si la dirección existe, la respuesta será:
OK
De lo contrario, la respuesta será un error 550, como:
[email protected] - The email account that you tried to reach does not exist.
... o esto:
[email protected] - The email account that you tried to reach is disabled.
La respuesta anterior se adaptó y tomó prestada de aquí:
enlace
Cómo hacer esto en PHP:
// include SMTP Email Validation Class
require_once('smtp_validateEmail.class.php');
// the email to validate
$email = '[email protected]';
// an optional sender
$sender = '[email protected]';
// instantiate the class
$SMTP_Validator = new SMTP_validateEmail();
// turn on debugging if you want to view the SMTP transaction
$SMTP_Validator->debug = true;
// do the validation
$results = $SMTP_Validator->validate(array($email), $sender);
// view results
echo $email.' is '.($results[$email] ? 'valid' : 'invalid')."\n";
// send email?
if ($results[$email]) {
//mail($email, 'Confirm Email', 'Please reply to this email to confirm', 'From:'.$sender."\r\n"); // send email
} else {
echo 'The email addresses you entered is not valid';
}
Fuente del ejemplo de PHP anterior:
enlace