Per verificare l'esistenza di un indirizzo e-mail, il server può eseguire il ping di tale indirizzo e-mail su un server SMTP corrispondente per convalidarlo. Ci sono alcuni passaggi coinvolti. Supponendo che l'utente abbia inviato (per esempio) un indirizzo Gmail, e supponendo che sia la tua applicazione Web che sta facendo la convalida, tu farei quanto segue:
Passaggio 1: invia un comando nslookup:
nslookup –type=mx gmail.com
Questo comando nslookup interrogherà i name server per quel dominio. Dato che abbiamo specificato il tipo come MX, il nostro comando estrae ed elenca i record MX del dominio di posta elettronica. Sostituisci gmail.com con il dominio dell'indirizzo email che stai cercando di verificare.
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
Passaggio 2: Come avrai notato nell'output di nslookup, non è raro avere più record MX per un dominio. Scegli uno dei server elencati nei record MX, forse quello con il numero di livello di preferenza più basso (nel nostro esempio, gmail-smtp-in.l.google.com), e "fingi" di inviare un messaggio di test a tale server dalla tua applicazione Web:
Connessione al server di posta tramite telnet:
telnet gmail-smtp-in.l.google.com 25
Saluta l'altro server:
HELO
Identificatevi con un indirizzo email fittizio:
mail from:<[email protected]>
Specificare l'indirizzo e-mail dell'utente che si sta tentando di verificare:
rcpt to:<[email protected]>
Passaggio 3: controlla la risposta per determinare la validità dell'indirizzo e-mail. La risposta per il comando 'rcpt to' ti darà un'idea se l'indirizzo e-mail dell'utente è valido o meno. Se l'indirizzo esiste, la risposta sarà:
OK
Altrimenti, la risposta sarà un errore 550, come ad esempio:
[email protected] - The email account that you tried to reach does not exist.
... o questo:
[email protected] - The email account that you tried to reach is disabled.
La risposta sopra è stata adattata e presa in prestito da qui:
link
Come farlo in 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';
}
Esempio di PHP di cui sopra:
link