Una guida pratica per testare un server di posta a mano. Scopri cosa fa ogni comando SMTP, come risponde il server e come eseguire una sessione di verifica completa con telnet o openssl.
SMTP (Simple Mail Transfer Protocol) è un protocollo in testo semplice, basato su righe. Ciò significa che puoi dialogare con un server di posta direttamente da un terminale e leggere esattamente cosa risponde — senza bisogno di software speciale. Questo è il modo più trasparente per verificare se una casella esiste, se un server è raggiungibile e come è configurato.
Per prima cosa individua il server di posta (host MX) del dominio, poi apri una connessione TCP alla sua porta SMTP. La porta classica è la 25. Le porte di submission 587 e 2525 si usano con STARTTLS; la porta 465 è TLS implicito (SMTPS).
Connessione in chiaro (porta 25):
telnet mail.example.com 25
Porta STARTTLS (587 o 25) — telnet non gestisce il TLS, usa openssl:
openssl s_client -connect mail.example.com:587 -starttls smtp -crlf
Porta TLS implicito (465):
openssl s_client -connect mail.example.com:465 -crlf
Nota: molti ISP domestici e mobili bloccano la porta 25 in uscita per contrastare lo spam. Se telnet ... 25 rimane semplicemente bloccato, di solito è colpa del tuo provider, non del server di posta. Esegui il test da un server/VPS dove la porta 25 è aperta, oppure usa le porte di submission.
Tu digiti i comandi (senza distinzione tra maiuscole e minuscole); il server risponde con un codice a 3 cifre e del testo. Termina ogni comando con Invio (CRLF).
| Comando | Cosa fa |
|---|---|
HELO domain | Saluto legacy. Identifica per nome l’host che si connette. Il server risponde 250. |
EHLO domain | Saluto moderno (Extended HELO). Come HELO, ma il server elenca anche le estensioni supportate (STARTTLS, AUTH, SIZE, PIPELINING…). |
MAIL FROM:<addr> | Avvia un nuovo messaggio e imposta il mittente di busta (il “return path”). Risposta 250 se accettato. |
RCPT TO:<addr> | Il comando chiave per la verifica. Chiede al server di accettare un destinatario. 250 = la casella è accettata; 550 = nessun utente di questo tipo; 4xx = riprova più tardi (es. greylisting). |
DATA | Inizia il corpo del messaggio. Il server risponde 354; tu invii intestazioni + corpo e concludi con un singolo punto . su una riga a sé. (Per un controllo di verifica non raggiungi mai questo passaggio.) |
RSET | Reimposta la transazione corrente (dimentica MAIL FROM / RCPT TO) senza chiudere la connessione. |
VRFY user | Chiede al server di verificare un nome utente/indirizzo. Progettato esattamente per questo, ma quasi sempre disabilitato oggi (restituisce 252 o 502) perché rivela indirizzi validi agli spammer. |
EXPN list | Chiede al server di espandere una mailing list nei suoi membri. Come VRFY, disabilitato quasi ovunque per la stessa ragione di privacy. |
STARTTLS | Aggiorna una connessione in chiaro a TLS cifrato (sulle porte 25/587). Offerto solo se elencato nella risposta EHLO. |
AUTH LOGIN / PLAIN | Autentica un utente (necessario per inviare posta attraverso le porte di submission, non per la verifica). |
NOOP | Non fa nulla; il server risponde 250. Utile per mantenere attiva una connessione o testarne la reattività. |
HELP | Chiede al server di elencare i comandi che supporta. |
QUIT | Termina cortesemente la sessione. Il server risponde 221 e chiude la connessione. |
La prima cifra ti indica la categoria, così puoi interpretare qualsiasi risposta anche se non conosci il codice esatto:
354 dopo DATA).| Codice | Significato |
|---|---|
220 | Servizio pronto (il banner di saluto). |
221 | Chiusura della connessione (risposta a QUIT). |
250 | OK — comando accettato (la risposta che desideri dopo RCPT TO). |
251 / 252 | Utente non locale ma verrà inoltrato / impossibile verificare ma si tenterà la consegna. |
354 | Inizia a inviare il corpo del messaggio (dopo DATA). |
421 | Servizio non disponibile, in chiusura — spesso limitazione della frequenza. |
450 / 451 / 452 | Problema temporaneo (casella occupata, errore locale, spazio insufficiente). Il greylisting compare frequentemente qui. |
502 | Comando non implementato (risposta tipica a VRFY / EXPN). |
550 | Casella non disponibile / nessun utente di questo tipo — l’indirizzo non esiste. |
551 / 552 / 553 / 554 | Utente non locale / quota superata / nome casella non valido / transazione fallita. |
Verifica se john@example.com esiste. Le righe che digiti tu sono contrassegnate con >; tutto il resto è il server:
$ telnet mail.example.com 25 220 mail.example.com ESMTP ready > EHLO checkemail.test 250-mail.example.com Hello checkemail.test 250-STARTTLS 250-SIZE 52428800 250 PIPELINING > MAIL FROM:<probe@checkemail.test> 250 2.1.0 Ok > RCPT TO:<john@example.com> 250 2.1.5 Ok ← la casella ESISTE > RSET 250 2.0.0 Ok > QUIT 221 2.0.0 Bye
Se invece il destinatario non esiste, vedresti qualcosa del genere:
> RCPT TO:<nosuchuser@example.com> 550 5.1.1 <nosuchuser@example.com>: Recipient address rejected: User unknown
4xx temporaneo, chiedendoti di tornare più tardi. Un 4xx non significa che l’indirizzo sia non valido.250 e poi smistano in seguito. In tal caso RCPT TO non può provare che una casella specifica esista. Per rilevare un catch-all, prova un indirizzo chiaramente casuale: se viene accettato anch’esso, il dominio è catch-all.Vuoi che tutto questo venga fatto automaticamente, inclusi ricerca MX, rilevamento catch-all e un verdetto pulito? Usa il nostro Email Checker sulla home page.