Elenco di tutti i comandi e codici di risposta SMTP

On Agosto 05, 2024
8min read
Zakhar Yung Technical Content Writer @Mailtrap

Nel post del blog SMTP vs. IMAP vs. POP3, abbiamo spiegato che una sessione SMTP è una sorta di conversazione tra un client SMTP e un server SMTP. Il client parla usando comandi che consistono in caratteri alfabetici. Il server risponde con codici numerici. Oggi esamineremo questo aspetto in dettaglio. Scoprirai i comandi SMTP validi e quelli obsoleti. Inoltre, chiariremo quali codici di risposta corrispondono a ciascun comando.

Comandi SMTP essenziali nell’ordine in cui possono essere utilizzati

Ogni comando SMTP definisce una funzione particolare all’interno della sessione SMTP, che consiste in tre fasi:

  • handshake – stabilire una connessione TCP
  • trasferimento delle email – manipolazioni con l’email
  • finalizzazione – terminare una connessione TCP

Pertanto, abbiamo deciso di elencare i comandi SMTP secondo questo flusso.

HELO/EHLO

Il comando HELO inizia la conversazione della sessione SMTP. Il client saluta il server e si presenta. Di solito, HELO è attribuito con un argomento che specifica il nome di dominio o l’indirizzo IP del client SMTP.

Esempio: HELO client.net

EHLO è un’alternativa a HELO per i server che supportano le estensioni del servizio SMTP (ESMTP). Se il server non supporta ESMTP, risponderà con un errore.

Esempio: EHLO client.net

In ogni caso, HELO o EHLO è un comando OBBLIGATORIO per il client SMTP per iniziare un trasferimento di email.

MAIL FROM

Il comando MAIL FROM avvia un trasferimento di email. Come argomento, MAIL FROM include una casella postale del mittente (reverse-path). Per alcuni tipi di messaggi di segnalazione come le notifiche di mancata consegna, il reverse-path può essere vuoto. Possono essere specificati anche parametri opzionali.

Esempio: MAIL FROM "prova@client.net"

RCPT TO

Il comando RCPT TO specifica il destinatario. Come argomento, RCPT TO include una casella postale di destinazione (forward-path). In caso di più destinatari, RCPT TO verrà utilizzato per specificare ciascun destinatario separatamente.

Esempio: RCPT TO "utente@destinatario.net"

DATA

Con il comando DATA, il client chiede al server il permesso di trasferire i dati dell’email. Il codice di risposta 354 concede il permesso, e il client avvia la consegna del contenuto dell’email riga per riga. Questo include la data, l’intestazione da, la riga dell’oggetto, l’intestazione a, gli allegati e il corpo dell’email.

Una riga finale contenente un punto (“.”) termina il trasferimento dei dati dell’email. Il server risponde alla riga finale.

Esempio:
DATA
354 (server response code)
Date: Wed, 30 July 2019 06:04:34
From: prova@client.net
Subject: Come funziona l'SMTP
To: utente@destinatario.net
Corpo dell'email
.

NOOP

Il comando NOOP viene utilizzato solo per verificare se il server può rispondere. Risposta “250 OK

Esempio: NOOP

HELP

Con il comando HELP, il client richiede un elenco di comandi che il server supporta. HELP può essere utilizzato con un argomento (un comando specifico). Se il server supporta questo, fornirà le informazioni corrispondenti a questa richiesta.

Esempio: HELP 

VRFY e EXPN

VRFY viene utilizzato per verificare se una casella postale nell’argomento esiste sull’host locale. La risposta del server include la casella postale dell’utente e può includere il nome completo dell’utente.

Esempio:
VRFY user2
250 Anna Bianchi utente2@client.net (risposta del server)

EXPN viene utilizzato per verificare se una mailing list nell’argomento esiste sull’host locale. La risposta positiva specificherà l’appartenenza dei destinatari.

Esempio:
EXPN mail-list
250-utente1@client.net (risposta del server)
250-utente2@client.net (risposta del server)
250-utente3@client.net (risposta del server)

Il trattino (-) tra il codice numerico e la casella postale dell’utente indica che la risposta continua nella riga successiva.

VRFY e EXPN implementano l’autenticazione SMTP. Inoltre, sono utili per eseguire un audit interno del server. D’altra parte, questi comandi sono considerati un rischio per la sicurezza. Gli spammer possono usarli per raccogliere indirizzi email validi dal server. Pertanto, i sistemi di messaggistica installano protezioni corrispondenti o disabilitano i comandi.

RSET

Il comando RSET reimposta la connessione SMTP allo stato iniziale. Cancella tutti i buffer e le tabelle di stato (sia mittente che destinatario). RSET riceve solo la risposta positiva del server – 250. Allo stesso tempo, la connessione SMTP rimane aperta ed è pronta per una nuova transazione di posta.

Esempio: RSET

QUIT

Il comando QUIT invia la richiesta di terminare la sessione SMTP. Una volta che il server risponde con 221, il client termina la connessione SMTP. Questo comando specifica che il ricevente DEVE inviare una risposta “221 OK” e poi chiudere il canale di trasmissione.

Esempio: QUIT

Comandi SMTP estesi che alcuni server SMTP possono supportare

STARTTLS 

Il comando STARTTLS viene utilizzato per avviare un handshaking TLS per una sessione SMTP sicura. STARTTLS reimposta il protocollo SMTP allo stato iniziale. Una volta ricevuta la risposta 220 dal server, il client SMTP dovrebbe inviare HELO o EHLO per avviare la sessione. In caso di risposta negativa (454), il client deve decidere se continuare la sessione SMTP o meno.

Esempio: STARTTLS

AUTH

Il comando AUTH viene utilizzato per autenticare il client al server. Per questo, utilizza un argomento che specifica diversi livelli di sicurezza e metodi di accesso: PLAIN, LOGIN e CRAM-MD5. La sessione è considerata autenticata una volta che il server ha fornito una risposta positiva. Per ulteriori informazioni, leggi il post del blog sull’autenticazione SMTP.

Esempio: AUTH CRAM-MD5

ATRN 

Il comando ATRN ha sostituito il comando obsoleto TURN. Veniva utilizzato per invertire la connessione tra i server SMTP locali ed esterni (mittente e destinatario). TURN mancava di autenticazione e quindi è stato superato. ATRN è privo di questo difetto. Inoltre, è disponibile per indirizzi IP assegnati dinamicamente.

Esempio:
ATRN client.net,client.com
250 OK now reversing the connection (risposta del server)

BDAT

Il comando BDAT viene utilizzato per inviare contenuti di posta. Può essere un’alternativa al comando DATA. BDAT ha due argomenti. Il primo definisce la lunghezza del blocco di dati in ottetti. Il secondo indica che il blocco di dati è terminato. Non è necessario un punto per terminare il trasferimento di email come nel comando DATA. BDAT è ampiamente utilizzato in Microsoft Exchange Server. Allo stesso tempo, DATA è un comando obbligatorio da supportare per tutti i server.

Esempio:
BDAT 67 LAST
To: utente@destinatario.net
From: prova@client.net
Subject: Come funziona l'SMTP
250 Message OK, 67 octets received (risposta del server)

ETRN

Il comando ETRN è la richiesta di avviare l’elaborazione della coda SMTP di un host server specificato.

Esempio:
ETRN client.com
250 OK, queuing for client.com started (risposta del server)

Comandi SMTP ad uso privato

Il client e il server possono utilizzare comandi SMTP ad uso privato tramite un accordo bilaterale. Questi sono estensioni del servizio proprietari e dovrebbero iniziare con “X”. Non devono essere registrati o standardizzati. Eccone alcuni:

  • XADR – rilascia lo stato del canale a cui corrisponde un indirizzo (come viene instradato un indirizzo internamente)
  • XCIR – rilascia lo stato della funzione di controllo del circuito
  • XSTA – rilascia lo stato del numero di messaggi nelle code dei canali
  • XGEN – rilascia lo stato di utilizzo di una configurazione compilata e di un set di caratteri

Comandi SMTP obsoleti

Sul web ci sono molte fonti obsolete dove puoi incontrare comandi SMTP obsoleti. Per non perdere tempo con opzioni non valide, ecco un elenco dei comandi che non puoi più usare:

  • SEND
  • SOML 
  • SAML
  • RELAY
  • TLS
  • TURN

Codici di risposta SMTP

Il server SMTP risponde al client utilizzando un codice a tre cifre. Ogni cifra ha un significato speciale:

  • Prima (2 a 5) – denota se la richiesta è accettata, incompleta o rifiutata
  • Seconda (0 a 5) – denota il tipo di errore verificatosi (sintassi, informazioni, connessioni, sistema di posta o non specificato (due opzioni)).
  • Terza (0 a 5) – fornisce una descrizione più precisa (insieme a una spiegazione testuale)

Il codice numerico è seguito da un testo destinato a un utente umano per comprendere il punto. Diversi server possono utilizzare una descrizione testuale modificata della risposta, mentre il codice numerico è permanente. Quindi, ecco con cosa può rispondere il tuo server SMTP:

Codice Cosa significa
101Errore di connessione al server (nome server errato o porta di connessione errata)
211Stato del sistema (risposta a HELP)
214Messaggio di aiuto (risposta a HELP)
220Il server è pronto (risposta al tentativo del client di stabilire una connessione TCP)
221Il server chiude il canale di trasmissione
235Autenticazione riuscita (risposta a AUTH)
250Il comando richiesto è completato. Di norma, il codice è seguito da OK
251L’utente non è locale, ma il server inoltrerà il messaggio a <forward-path> 
252Il server non può verificare l’utente (risposta a VRFY). Il messaggio sarà accettato e verrà tentata la consegna
334Risposta al comando AUTH quando il meccanismo di sicurezza richiesto è accettato
354Il server conferma il trasferimento del contenuto della posta (risposta a DATA). Dopo di ciò, il client inizia a inviare la posta. Terminato con un punto (“.”)
421Il server non è disponibile perché chiude il canale di trasmissione
422La casella di posta del destinatario ha superato il limite di archiviazione
431Sovraccarico di file (troppi messaggi inviati a un dominio particolare)
441Nessuna risposta dal server del destinatario
442Connessione interrotta
446Si è verificato un ciclo interno
450Casella di posta non disponibile (occupata o temporaneamente bloccata). Azione richiesta interrotta
451Il server ha interrotto il comando a causa di un errore locale
452Il server ha interrotto il comando a causa di spazio di archiviazione insufficiente
454TLS non disponibile per un motivo temporaneo (risposta a STARTTLS)
455Parametri non possono essere soddisfatti
471Errore del server di posta a causa del filtro antispam locale
500Errore di sintassi (anche una riga di comando potrebbe essere troppo lunga). Il server non può riconoscere il comando
501Errore di sintassi nei parametri o negli argomenti
502Il server non ha implementato il comando
503Sequenza di comandi non corretta
504Il server non ha implementato un parametro del comando
510Indirizzo email non valido
512Un errore DNS (ricontrolla l’indirizzo dei tuoi destinatari)
523La dimensione totale della tua mailing supera i limiti del server destinatario
530Problema di autenticazione che richiede principalmente l’esecuzione del comando STARTTLS
535Autenticazione fallita
538Crittografia richiesta per un meccanismo di autenticazione richiesto
541Messaggio rifiutato dal filtro antispam
550Casella di posta non disponibile. Il server ha interrotto il comando perché la casella postale non è stata trovata o per motivi di policy. In alternativa: Autenticazione richiesta per il relay
551Utente non locale. Verrà specificato il <forward-path>
552Il server ha interrotto il comando perché la casella postale è piena
553Indirizzo email sintatticamente scorretto
554La transazione è fallita a causa di un errore sconosciuto
o
Nessun servizio SMTP qui come risposta ai tentativi del client di stabilire una connessione
555Parametri non riconosciuti/non implementati (risposta a MAIL FROM o RCPT TO)

Per saperne di più su questi codici di risposta, date un’occhiata al nostro video dedicato:

Comando-risposta

Come avrai notato sopra, alcuni codici sono specifici del comando. In realtà, solo tre di essi, 500, 501 e 421, possono essere una risposta a qualsiasi comando SMTP. Altri possono essere categorizzati come positivi e negativi (il codice 354 può essere considerato come una risposta intermedia). Vediamo a quali comandi possono riferirsi.

ComandoRisposta positivaRisposta negativa
Handshake SMTP (stabilire una connessione)220554
STARTTLS220454
EHLO o HELO250502 (risposta a EHLO per server vecchi)
504
550
AUTH235
334
530
535
538
MAIL FROM250    451
452
455
503
550
552
553
555
RCPT TO250
251          
450
451
452
455
503
550
551
552
553
555
DATA250
354 (risposta intermedia)
                           
450
451
452
503
550 (rifiuto per motivi di policy)
552
554
RSET250
VRFY250
251
252         
502
504
550
551
553 
EXPN250
252
502
504
550
HELP211
214
502
504
NOOP250
QUIT221

Questo è l’elenco dei codici di risposta standard. Va anche detto che alcuni server SMTP possono generare altri codici a tre cifre. In questo caso, il client SMTP dovrà interpretare la prima cifra che deve essere compresa tra 2 e 5 inclusi. Denota l’essenza della risposta (positiva o meno).

Esempio di una sessione SMTP

Ora, diamo un’occhiata a un esempio del flusso tipico di una sessione SMTP. Vedremo due scenari: una transazione riuscita e una transazione interrotta.

Transazione riuscita con verifica

Server: 220 server.net Simple Mail Transfer Service Ready

Client: EHLO client.org

S: 250-server.net greets client.org

S: 250-DSN

S: 250-VRFY

S: 250 HELP

C: VRFY Rossi

S: 250 Marco Rossi <m.rossi@server.net>

C: MAIL FROM:"utente1@client.org"

S: 250 OK

C: RCPT TO:"m.rossi@server.net"

S: 250 OK

C: RCPT TO:"a.bianchi@server.net"

S: 550 No such user here

C: DATA

S: 354 Start mail input; end with <CRLF>.<CRLF>

C: Date: Wed, 30 July 2019 06:04:34

C: From: utente1@client.org

C: Subject: Email di prova

C: To: m.rossi@server.net, a.bianchi@server.net

C: Ciao Marco e Anna 

C: .

S: 250 OK

C: QUIT

S: 221 server.net Service closing transmission channel

In questo esempio, il client ha ricevuto il codice 550 che indicava che uno dei destinatari non è disponibile. Tuttavia, la transazione non è stata interrotta come nell’esempio seguente.

Transazione interrotta

Server: 220 server.net Simple Mail Transfer Service Ready

Client: EHLO client.org

S: 250-server.net greets client.org

S: 250-DSN

S: 250 HELP

C: MAIL FROM:"utente1@client.org"

S: 250 OK

C: RCPT TO:"a.bianchi@server.net"

S: 550 No such user here

C: RSET

S: 250 OK

C: QUIT

S: 221 server.net Service closing transmission channel

Vantaggi di utilizzare un ambiente di test SMTP sicuro

Una volta che un’email è atterrata sul server SMTP del mittente, è ancora all’inizio del suo viaggio. Prima di raggiungere la casella di posta del destinatario, l’email deve arrivare al server SMTP del destinatario, che la inoltra al server IMAP/POP3. E ogni server implementa l’autenticazione prima di lasciare entrare l’email. Per garantire che le tue email soddisfino i requisiti tecnici per un rapido processo di autenticazione, è sempre una buona idea testarle e debuggarle in un ambiente sicuro come Email Sandbox di Mailtrap.

Utilizzando Email Sandbox, puoi analizzare i dati grezzi, le intestazioni e altre informazioni tecniche sulle tue email. Inoltre, ti aiuta a ispezionare e convalidare HTML/CSS e ottenere rapidamente report su spam che ti aiutano a capire cosa deve essere migliorato.

Per saperne di più su Email Sandbox, consulta la nostra Guida introduttiva.

Article by Zakhar Yung Technical Content Writer @Mailtrap