Controllo SMTP con telnet

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.

1. Connessione a un server di posta

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.

2. I comandi SMTP spiegati

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).

ComandoCosa fa
HELO domainSaluto legacy. Identifica per nome l’host che si connette. Il server risponde 250.
EHLO domainSaluto 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).
DATAInizia 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.)
RSETReimposta la transazione corrente (dimentica MAIL FROM / RCPT TO) senza chiudere la connessione.
VRFY userChiede 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 listChiede al server di espandere una mailing list nei suoi membri. Come VRFY, disabilitato quasi ovunque per la stessa ragione di privacy.
STARTTLSAggiorna una connessione in chiaro a TLS cifrato (sulle porte 25/587). Offerto solo se elencato nella risposta EHLO.
AUTH LOGIN / PLAINAutentica un utente (necessario per inviare posta attraverso le porte di submission, non per la verifica).
NOOPNon fa nulla; il server risponde 250. Utile per mantenere attiva una connessione o testarne la reattività.
HELPChiede al server di elencare i comandi che supporta.
QUITTermina cortesemente la sessione. Il server risponde 221 e chiude la connessione.

3. Codici di risposta

La prima cifra ti indica la categoria, così puoi interpretare qualsiasi risposta anche se non conosci il codice esatto:

  • 2xx — successo (comando accettato).
  • 3xx — intermedio, il server vuole ulteriore input (es. 354 dopo DATA).
  • 4xx — errore temporaneo: riprova più tardi. L’indirizzo potrebbe comunque essere valido.
  • 5xx — errore permanente: il comando o l’indirizzo è stato rifiutato.
CodiceSignificato
220Servizio pronto (il banner di saluto).
221Chiusura della connessione (risposta a QUIT).
250OK — comando accettato (la risposta che desideri dopo RCPT TO).
251 / 252Utente non locale ma verrà inoltrato / impossibile verificare ma si tenterà la consegna.
354Inizia a inviare il corpo del messaggio (dopo DATA).
421Servizio non disponibile, in chiusura — spesso limitazione della frequenza.
450 / 451 / 452Problema temporaneo (casella occupata, errore locale, spazio insufficiente). Il greylisting compare frequentemente qui.
502Comando non implementato (risposta tipica a VRFY / EXPN).
550Casella non disponibile / nessun utente di questo tipo — l’indirizzo non esiste.
551 / 552 / 553 / 554Utente non locale / quota superata / nome casella non valido / transazione fallita.

4. Un esempio pratico completo

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

5. Cose che rendono incerti i risultati

  • Greylisting — al primo tentativo il server restituisce di proposito un 4xx temporaneo, chiedendoti di tornare più tardi. Un 4xx non significa che l’indirizzo sia non valido.
  • Domini catch-all — alcuni server accettano ogni destinatario con 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.
  • Difese anti-abuso — i server possono ritardare, nascondere lo stato reale o bloccare sondaggi ripetuti da uno stesso IP. Esegui i test con cortesia e non tempestare un server.
  • VRFY / EXPN disabilitati — non fare affidamento su di essi; RCPT TO è il segnale pratico.

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.