I comandi SMTP

I servizi TCP/IP (5 livello iso/osi) si fondano sullo scambio di comandi testuali tra client e server. I programmi client (come outlook, thunderbird, eudora, Kmail, ...) forniscono un'interfaccia grafica che, semplificando la vita all'utente finale, evita la digitazione diretta di comandi complessi che il server interpreta ed esegue. Vediamo la dimostrazione di quanto affermato applicata al protocollo di servizio SMTP: invio della posta.

Sendmail fu uno dei primi (se non proprio il primo) mail transfer agent (MTA) ad implementare il protocollo SMTP. Alcuni esempi di server  SMTP sono:

- Exim di Philip Hazel
- Postfix di Wietse Venema
- Qmail di D. J. Bernstein
- Courier di Sam Varshavchik
- Microsoft Exchange Server.

Poiché SMTP è un protocollo testuale basato sulla codifica ASCII a 7 bit (l'ottavo é posto esplicitamente a zero) non è possibile trasmettere direttamente del testo composto con un diverso set di caratteri ne tantomeno file binari. Lo standard MIME permette di estendere il formato base dei messaggi SMTP mantenendo la compatibilità con il software esistente. Ad esempio, al giorno d'oggi, molti server SMTP supportano l'estensione 8BITMIME che consente l'invio di testo contenente caratteri accentati (non-ASCII). Un altro limite del protocollo SMTP è la lunghezza massima di una riga che impedisce la spedizione di file binari senza una opportuna codifica.

Un'altra delle limitazioni del protocollo SMTP originario è che non gestisce l'autenticazione dei mittenti e quindi consente lo spam. Infatti è possibile stabilire una connessione ad un mail-server senza possedere un account d'accesso ed inviare un messaggio utilizzando i comandi SMTP nativi. Per ovviare a questi problemi è stata sviluppata un'estensione chiamata SMTP-AUTH. Nonostante questo, lo spam rimane ancor oggi un grave problema. Tuttavia, non si ritiene praticabile una revisione radicale del protocollo SMTP, per via del gran numero di implementazioni del protocollo attuale (ad esempio, è stato proposto Internet Mail 2000 come protocollo alternativo).

Oltre al rischio di spam, esiste anche la possibilità di inviare una e-mail facendo apparire come mittente un indirizzo di fantasia oppure corrispondente ad un altro account.

La presenza di estensioni che ampliano il protocollo base di SMTP implica, sebbene non sia obbligatorio, che quasi tutti i client richiedano al server quali estensioni SMTP siano attive e lo fanno mediante il comando di saluto EHLO. Questi client usano HELO soltanto nel caso in cui il server non risponda ad EHLO.

Il servizio SMTP utilizza come protocollo di trasporto il TCP. Una sessione SMTP Client-Server attraversa almeno sei fasi:

1. Il client SMTP contatta il server sulla porta TCP 25. Se questo è in ascolto e la connessione è accettata risponde con un messaggio 220 (Ready);
2. Il client chiede di stabilire la sessione SMTP inviando il comando HELO seguito dal FQDN (Fully Qualified Domani Name). Se il server accetta risponde con un messaggio 250 (Ok);
3. Il client indica il proprio indirizzo e-mail tramite il comando MAIL FROM: <indirizzo mittente>. Il server risponde con 250 (Ok);
4. Successivamente il client indica al server i destinatari del messaggio tramite RCPT TO: <indirizzo destinatario> ed il server risponde per ogni destinatario accettato con il codice 250 (Ok);
5. Il client comunica al server l'inizio del corpo del messaggio mediante il comando DATA. Il server risponde con un codice 354 e indica come marcare la fine del messaggio. I campi come Date, Subject, To, Cc, Bcc, From (data headers) vanno inseriti in questa sezione. Il messaggio viene trasmesso con caratteri ASCII a 7 bit. Eventuali allegati sono codificati a 7 bit tramite BinHex, uuencode, o MIME.
6. Il messaggio da spedire viene concluso con un singolo punto ed il server lo memorizza. Adesso è possibile o scrivere un nuovo messaggio, oppure inviare il comando QUIT. In tal caso il server invia i messaggi ricevuti, risponde al client con un codice 221 (Closing) e chiude la connessione TCP;

Sessione Client-Server SMTP mediante TELNET

Vediamo ora un esempio pratico: immaginiamo di voler spedire un messaggio ad alta priorità, utilizzando la nostra casella di posta marco.sechi@tin.it, alla casella e-mail marco.sechi@libero.com. Mandiamo la stessa mail per conoscenza alle caselle marco.sechi@tiscali.it e marco.sechi@hotmail.it  e per conoscenza nascosta alla casella cormatron@brescianet.com. Ecco la sequenza dei comandi:

- Apriamo una finestra DOS e digitiamo:

Telnet smtp.tin.it 25

La finestra DOS a questo punto si pulisce.

- Digitiamo quindi il comando EHLO SERVER (non importa se in maiuscolo o minuscolo!) seguito da un  <invio> (contrariamente all'esempio sul protocollo HTTP il testo battuto risulta visibile). Se il server SMTP supporta le estensioni ci viene inviato l'elenco di quella che risultano attive:

250-vsmtp15.tin.it
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 31457280


- Il server del nostro esempio supporta l'autenticazione e pertanto è necessario inserire il comando (seguito dal solito <invio> di conferma)
AUTH LOGIN

- Digitiamo quindi lo Username e la relativa Password di accesso al server SMTP che abbiamo impostato al momento della creazione della nostra casella di posta. Tali informazioni vanno inviate con codifica in Base64 (il form sottostante ci consente di effettuare la conversione in base64 delle informazioni necessarie)

voci

in chiaro

base64

conversione base 64

User:
Password:

Terminate le operazioni di autenticazione digitiamo i comandi:

MAIL TO: <casella di posta destinatario>

e per ogni casella di destinazione scriviamo:

RCPT TO: <casella di posta mittente>
 
Con il comando DATA iniziamo a digitare il messaggio vero e proprio (analizzare l'esempio sottostante per vedere l'uso dei Data Headers).

La sezione
DATA termina con la digitazione di un punto isolato seguito da <invio>. Riceviamo dal server  quindi la conferma di accettazione della mail. Con il comando QUIT concludiamo la sessione SMTP. Nella seguente figura la sequenza completa dei comandi appena descritti (in giallo quelli digitati - con sfondo rosso i data headers)
 
E:\Users\Administrator>telnet smtp.tin.it 25
220 vsmtp15.tin.it ESMTP Service ready
EHLO SERVER
250-vsmtp15.tin.it
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 31457280
AUTH LOGIN
334 VXNlcm5hbWU6
  <== è la codifica in base64 della parola: Username:
Y29ybWF0cm9uZ2hvc3Q=
334 UGFzc3dvcmQ6
  <== è la codifica in base64 della parola: Password:
bWFyY29zZWNoaQ==
235 LOGIN authentication successful
MAIL FROM:<marco.sechi@tin.it>
250 MAIL FROM:<marco.sechi@tin.it> OK
RCPT TO:<marco.sechi@libero.it>
250 RCPT TO:<marco.sechi@libero.it> OK
RCPT TO:<marco.sechi@tiscali.it>
250 RCPT TO:<marco.sechi@tiscali.it> OK
RCPT TO:<marco.sechi@hotmail.it>
250 RCPT TO:<marco.sechi@hotmail.it> OK
RCPT TO:<cormatron@brescianet.com>
250 RCPT TO:<cormatron@brescianet.com> OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
From: Marco Sechi su TIN <marco.sechi@tin.it> <== è il nome che appare sul client come mittente
To: Undisclosed Recipients
<== In questo modo chi riceve non vede i destinatari
Cc: Amico su Tiscali <marco.sechi@tiscali.it>, Amico su HotMail <marco.sechi@hotmail.it>
Bcc: <cormatron@brescianet.com>
Date: Wed, 03 Jan 1964 18:33:29
Disposition-Notification-To: "Marco Sechi" <marco.sechi@gmail.com>
<== richiesta conferma di lettura
X-Priority:
1
<== indica la priorità: 1 alta - 5 bassa - 3 Normale
X-Mailer: Client SMTP Manuale 1.3.64
Subject:
Prova Invio Mail con Telnet
<== oggetto del messaggio
<== questa linea vuota deve esserci assolutamente

Questa mail serve per illustrare
il funzionamento del protocollo SMTP
---
Marco Sechi [CormatroGhost]
.
<== il punto isolato indica la fine del testo del messaggio
250 <4AFD48E61AA48D1A> Mail accepted
QUIT
221 vsmtp15.tin.it QUIT


Connessione all'host perduta.

Vediamo ora i messaggi ricevuti sulle singole caselle:

- ecco la mail ricevuta (con outlook express) dal destinatario indicato nella voce "per conoscenza nascosta" (BCC:).



- ecco la lettura da parte di uno dei due destinatari (precisamente marco.sechi@tiscali.it) indicati nel data header "per conoscenza" (CC:) - Si osservi che questo WEB client visualizza anche la sezione BCC (Cnn: per conoscenza nascosta) che in realtà non dovrebbe essere visibile poiché l'obbiettivo della clausola BCC è quello di far arrivare in copia una mail ad un destinatario senza che gli altri lo sappiano.



- Infine la lettura da parte del diretto destinatario (TO:)

0

Sessione Server SMTP Mittente/Destinatario mediante TELNET

Una volta che il server SMTP del mittente ha ricevuto il messaggio da inviare deve contattare il server SMTP del destinatario per trasmettergli le e-mail commissionate.
Affinché questo avvenga, è necessario risolvere la parte dominio di un indirizzo email (in pratica tutto ciò che segue “@”), e normalmente questo compito viene assolto dal DNS. Interrogando un DNS (ed esattamente leggendo il valore del record MX:Mail eXchanger) è possibile ricavare l’indirizzo IP associato al server SMTP incaricato dello scambio di posta per un certo dominio.
Vediamo ora tutto il processo di comunicazione tra i due server. Proveremo ad inviare una e-mail mandando direttamente al server SMTP del destinatario i comandi testuali necessari e questo utilizzando l’interfaccia a caratteri DOS e il programma telnet. Manderemo un messaggio da paperino@waltdisney.com a marco.sechi@libero.it. Questa volta non sarà necessario autenticarsi semplicemente perché ci comporteremo come il server SMTP del mittente che contatta quello del destinatario per depositare il messaggio.

Per prima cosa scopriamo qual’è il server SMTP destinato a ricevere la posta per libero.it. Apriamo una finestra DOS ed impartiamo il comando nslookup.
Al prompt “>” digitiamo
set type=mx, per specificare che abbiamo bisogno di interrogare un record MX, quindi inseriamo il dominio da controllare: libero.it

E:\Users\Administrator>nslookup
Server predefinito:  ns4.tin.it
Address:  212.216.112.112

> set type=MX
> libero.it
Server:  ns4.tin.it
Address:  212.216.112.112

Risposta da un server non autorevole:
libero.it       MX preference = 10, mail exchanger = mxlibero1.libero.it
libero.it       MX preference =  5, mail exchanger = mxlibero2.libero.it
libero.it       MX preference = 10, mail exchanger = mxlibero3.libero.it

libero.it       nameserver = ns2.libero.it
libero.it       nameserver = ns1.libero.it
mxlibero3.libero.it     internet address = 212.52.84.99
mxlibero1.libero.it     internet address = 212.52.84.83
mxlibero2.libero.it     internet address = 212.52.84.84
ns2.libero.it   internet address = 193.70.192.100
ns1.libero.it   internet address = 195.210.91.100

> help
Comandi: (gli identificatori sono indicati in maiuscolo, [] significa
         facoltativo)
NOME            - stampa informazioni sul NOME host/dominio utilizzando il
                  server predefinito
NOME1 NOME2     - come sopra, ma usa NOME2 come server
help o ?        - stampa informazioni su comandi comuni
set OPZIONE     - imposta una opzione
    all                     - stampa opzioni, server corrente e host
    [no]debug               - stampa informazioni di debug
    [no]d2                  - stampa informazioni dettagliate di debug
    [no]defname             - aggiunge il nome di dominio a ogni query
    [no]recurse             - richiede risposte ricorsive alla query
    [no]search              - usa elenco di ricerca dominio
    [no]vc                  - usa sempre un circuito virtuale
    domain=NOME             - imposta il NOME predefinito del dominio
    srchlist=N1[/N2/.../N6] - imposta dominio su N1 e l'elenco di ricerca su
                              N1,N2 e così via.
    root=NOME               - imposta il server radice su NOME
    retry=X                 - imposta il numero tentativi su X
    timeout=X               - imposta l'intervallo di timeout iniziale su X
                              secondi
    type=X                  - imposta il tipo di query
                              (es. A,AAAA,A+AAAA,ANY,CNAME,MX,NS,PTR,SOA,SRV)
    querytype=X             - come type
    class=X                 - imposta la classe di query (es. IN (Internet),
                              ANY)
    [no]msxfr               - usa il trasferimento di zona rapido MS
    ixfrver=X               - versione corrente da usare nelle richieste di
                              trasferimento IXFR
server NOME     - imposta il server predefinito su NOME, utilizzando il server
                  corrente predefinito
lserver NOME    - imposta il server predefinito su NOME, utilizzando
                  il server iniziale
finger [UTENTE] - usa finger per il NOME facoltativo nell'host predefinito
                  corrente
root            - imposta il server predefinito corrente sulla radice
ls [facoltativo] DOMINIO [> FILE] - elenca gli indirizzi nel DOMINIO
                                   (facoltativo: output in FILE)
    -a          -  elenca nomi canonici e alias
    -d          -  elenca tutti i record
    -t TIPO     -  elenca i record del tipo di record RFC specificato
                   (es. A,CNAME,MX,NS,PTR e così via)
view FILE       - ordina un file di output 'ls' e lo visualizza con pg
exit            - esce dal programma
> Exit

Dei 3 server ritornati scegliamo quello con il valore MX preference più basso: gli altri sono a priorità minore, da contattare in caso il primario non risponda.
Usciamo da nslookup con exit.
Colleghiamoci ora al server SMTP con il comando:
telnet mxlibero2.libero.it 25.
Ecco la sequenza dei comandi da digitare (evidenziata in giallo). Si osservi l'errore "Relaying not allowed" se tento una spedizione ad una mail fuori dal dominio del server SMTP (i.e. non del tipo @libero.it)

E: 220 mailrelay23.libero.it ESMTP Service ready
EHLO paperino@waltdisney.com
250-mailrelay23.libero.it
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-DELIVERBY 300
250 SIZE 15728640
mail from: <paperino@waltdisney.com>
250 MAIL FROM:<paperino@waltdisney.com> OK
rcpt to: <marco.sechi@tin.it>
550 RCPT TO:<marco.sechi@tin.it> Relaying not allowed
rcpt to: <marco.sechi@libero.it>
250 RCPT TO:<marco.sechi@libero.it> OK
Data
354 Start mail input; end with <CRLF>.<CRLF>
From: "Marco Sechi" <paperino@caio.it>
To: Marco su Libero
Date: Thu, 21 May 1998 05:33:29
Subject: Prova con connessione diretta al server SMTP del destinatario
<== questa linea vuota deve esserci assolutamente
Ciao sono Marco Sechi
e sto provando selvaggiamente
dei comandi SMTP
.

250 <4B6AE715000BE5A8> Mail accepted
quit
221 mailrelay23.libero.it QUIT

Connessione all'host perduta.

Si osservi che per inviare il messaggio questa volta non ci siamo minimamente autenticati. Semplicemente abbiamo bypassato la connessione con il server SMTP del mittente e ci siamo collegati direttamente sul server SMTP del destinatario. In soldoni abbiamo inviato gli stessi comandi che il server SMTP mittente invia al server SMTP destinatario.

Terminata la sessione SMTP sulla casella del destinatario arriva il messaggio appena inviato (si noti la casella e-mail di pura fantasia inserita come mittente).

Protezioni AntiSpam

Vediamo ora alcuni esempi che evidenziano i meccanismi di controllo per evitare lo spam:

1) Verifica dell'esistenza del dominio del  mittente. Alcuni server SMTP consentono di indicare come mittente una mail non appartenente al dominio del server SMPT (tin.it) purché il dominio indicato esista realmente (il dominio estrabello.it che è inesistente viene scartato mentre è il dominio brescianet.com è accettato).

E:\Users\Administrator>telnet smtp.tin.it 25
220 vsmtp8.tin.it ESMTP Service ready
HELO Server
250 vsmtp8.tin.it
MAIL FROM: <sechiareinfo@estrabello.it>
553 <sechiareinfo@estrabello.it> unable to verify address
MAIL FROM: <marco@brescianet.com>
250 MAIL FROM:<marco@brescianet.com>
OK

2) Login: In alcuni domini senza aver fatto il login al server SMTP non è possibile inviare la posta.

E:\Users\Administrator>telnet smtp.tin.it 25
220 vsmtp8.tin.it ESMTP Service ready
HELO Server
250 vsmtp8.tin.it
MAIL FROM: <marco@brescianet.com>
250 MAIL FROM:<marco@brescianet.com> OK
RCPT TO: <marco.sechi@libero.it>
550 RCPT TO:<marco.sechi@libero.it>
Relaying not allowed - please use SMTP AUTH

3) Vincolo: il mittente è associato alla login: Alcune regole restrittive inibiscono l'invio della mail quando si indica come mittente una mail non associata alla login appena effettuata

E:\Users\Administrator>telnet smtp.libero.it 25
 220 cp-out11.libero.it ESMTP Service ready
EHLO Server
250-cp-out11.libero.it
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 30000000
AUTH LOGIN
334 VXNlcm5hbWU6
bWFyY28uc2VjaGlAbGliZXJvLml0  <== è la userID in base64: marco.sechi@libero.it
334 UGFzc3dvcmQ6
bWFyY29zZWNoaQ==
235 LOGIN authentication successful
MAIL FROM:<marco.sechi@tin.it>
553 MAIL FROM:<marco.sechi@tin.it> does not match authenticated user name


Comandi SMTP

Il server SMTP fornisce anche un breve help sui comandi disponibili (in grigio i comandi che non presentano un help specifico sul server SMTP usato per le prove):

E:\Users\Administrator>telnet smtp.tin.it 25
220 vsmtp8.tin.it ESMTP Service ready
HELP
214-Valid SMTP commands:
214- HELO, EHLO, NOOP, RSET, QUIT,
STARTTLS
214- MAIL, RCPT, DATA,
VRFY, EXPN, HELP, ETRN
214-For more info, use HELP <valid SMTP command>
214 end of help
HELP HELO
214-Syntax: HELO <client hostname>
214-Purpose: Identify SMTP client host at start of connection
214 end of help
HELP EHLO
214-Syntax: EHLO <client hostname>
214-Purpose: Identify ESMTP client host at start of connection
214 end of help
HELP NOOP
214-Syntax: NOOP
214-Purpose: Check if server is connected
214 end of help
HELP RSET
214-Syntax: RSET
214-Purpose: abort transaction in progress and reset server to initial state
214 end of help
HELP QUIT
214-Syntax: QUIT
214-Purpose: request closing of the connection
214 end of help
HELP MAIL
214-Syntax: MAIL FROM:<mailbox>
214-Syntax: MAIL FROM:<mailbox> SIZE=<decimal number>
214-Syntax: MAIL FROM:<mailbox> BODY=<7BIT|8BITMIME>
214-Syntax: MAIL FROM:<mailbox> RET=<FULL|HDRS>
214-Syntax: MAIL FROM:<mailbox> ENVID=<xtext>
214-Syntax: MAIL FROM:<mailbox> AUTH=<xtext>
214-Syntax: MAIL FROM:<mailbox> BY=<decimal number>[;"N"|"R"T
214-Purpose: Initiate a mail transaction and identify sender
214 end of help
HELP RCPT
214-Syntax: RCPT TO:<mailbox>
214-Syntax: RCPT TO:<mailbox> ORCPT=<xtext>
214-Syntax: RCPT TO:<mailbox> NOTIFY=NEVER
214-Syntax: RCPT TO:<mailbox> NOTIFY=<one or more of SUCCESS, DELAY, FAILURE>
214-Purpose: add a mail recipient to list of recipients
214 end of help
HELP DATA
214-Syntax: DATA
214-Purpose: initiate mail body data transfer
214 end of help
HELP HELP
214-Syntax: HELP
214-Syntax: HELP <SMTP command>
214-Purpose: none
214 end of help
HELP VRFY
214 end of help
  ... il comando non presenta alcun help
HELP EXPN
214 end of help
  ... il comando non presenta alcun help
HELP ETRN
214 end of help
  ... il comando non presenta alcun help

Vediamo ora di analizzare il significato di alcuni comandi SMTP:

Tabella dei comandi SMTP

Codice
Comando

Comando

Parametri

Descrizione

HELO

Hello

Solitamente è il dominio del mittente.

Rappresenta il comando convenzionale inviato dal client SMTP al server per instaurare la sessione SMTP.

EHLO

Extended Hello

Solitamente è il dominio del mittente.

E' inviato dal mittente ad un server SMTP che supporta le "Estensioni SMTP". Il server SMTP risponde inviando le estensioni supportate (esempio PIPELING, AUTH ...). Il dominio del mittente è fornito come parametro.

MAIL

Inizia la transazione MAIL

Deve includere obbligatoriamente il parametro “FROM:” che specifica la mail del mittente.

Inizia la transazione relativa alla spedizione vera e propria

RCPT

Destinatario

Deve includere obbligatoriamente il parametro “TO:” che specifica la mail del destinatario.

Specifica un destinatario del messaggio di posta della corrente transazione SMTP

DATA

Contenuto del messaggio

Nessuno

Comunica al server SMTP che il mittente è pronto ad inviare il testo del messaggio. Il server SMTP risponde con un messaggio 354 di "start...". Il mittente trasmette, una linea alla volta, indicando la fine del messaggio con un punto su una singola linea.

RSET

Reset

Nessuno

Annulla i comandi precedentemente digitati nella sessione di posta corrente.
Può essere usato quando viene visualizzato un errore e il mittente non può continuare nella sua operazione di trasmissione. Riporta lo stato del ricevente ad una situazione analoga alla connessione appena avvenuta.

VRFY

Verify

E-mail da verificare.

Con questo messaggio, si chiede al server SMTP di confermare o meno l'esistenza dell'utente specificato. In caso di esistenza, viene (dovrebbe venire) restituito il nome completo e l'indirizzo della mailbox. La lunghezza massima per il nome dell'utente e' 64 caratteri.

EXPN

Expand

Indirizzo di una mailing list.

L'utilità di questo messaggio sta nella possibilità di ottenere i nomi registrati in una mailing-list. Il ricevente legge il nome della mailing-list, cerca di ottenere i nomi e gli indirizzi e-mail registrati, restituendoli al mittente con tanti messaggi 250 quanti sono gli utenti (risposta a piu' riprese, cioe' su piu' linee). C'e' anche la possibilità che l'accesso all'elenco degli utenti della maling-list sia proibito: in questo caso il messaggio restituito dovrebbe essere il 550 con l'indicazione dell'accesso negato.

HELP

Help

Opzionale: comando SMTP

Richiesta di aiuto. Senza parametri fornisce un help generale. Fornendo come argomento un comando SMTP ne presenta l'help specifico.

NOOP

No Operation

None

Non svolge alcuna azione se non quella di verificare la connessione con il server SMTP.

QUIT

Quit

None

Termina la sessione SMTP

Vediamo ora di analizzare il significato di alcune risposte che vengono inviate dal server SMTP

Codici di risposta dei comandi SMTP:

Code Descrizione
214 Messaggio di help
HELP
214-Valid SMTP commands:
214- HELO, EHLO, NOOP, RSET, QUIT, STARTTLS
214- MAIL, RCPT, DATA, VRFY, EXPN, HELP, ETRN
214-For more info, use HELP <valid SMTP command>
214 end of help
220 Dopo aver eseguito il telnet il server avvisa che il servizio e pronto
telnet smtp.libero.it 25
220 cp-out12.libero.it ESMTP Service ready
221 Avvisi di chiusura della sessione. Tipico dopo il comando quit
Quit
221 cp-out12.libero.it QUIT
235 L'utente si è autenticato correttamente:
AUTH LOGIN
334 VXNlcm5hbWU6 <== è la codifica in base64 della parola: Username:
Y29ybWF0cm9uZ2hvc3Q=
334 UGFzc3dvcmQ6 <== è la codifica in base64 della parola: Password:
bWFyY29zZWNoaQ==
235 LOGIN authentication successful
250 Indica che la richiesta (o l'azione) specificata con il messaggio mandato e' stata accettata (successo). Generalmente, al codice segue un "OK", ma potrebbero seguire anche altre cose.
EHLO Server
250-vsmtp8.tin.it
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 31457280
   
252 Non è possibile verificare l'utente (non è locale)
VRFY marco.sechi@tin.it
252 address verification is not available
354 Dopo aver ricevuto questo messaggio, si puo' iniziare ad inviare, linea per linea, il testo della mail. Viene generato da DATA. La sintassi e' la seguente:
354 <spazio> Start mail input; end with <CRLF>.<CRLF> <invio>
354 <spazio> Send the mail data, end with . <invio>
452 L'azione richiesta non è stata avviata poichè il disco del server risulta non avere spazio sufficiente
500 Comando non riconosciuto
AUTO
500 AUTO command unrecognized
501 Il 501 ricalca in qualche modo il 500. Infatti, viene generato in caso di errore di sintassi nei parametri o negli argomenti del messaggio inviato (insuccesso). Può essere generato da tutti i tipi di messaggio tranne NOOP, QUIT, TURN.
AUTH
501 Syntax error in AUTH command
502 Interviene nel caso il messaggio inviato non sia implementato dal server con cui si e' connessi (generato ad esempio da SEND, SOML, SAML, VRFY, EXPN, HELP, TURN che non fanno parte del set minimo di comandi da implementare in un server SMTP).
TURN
502 TURN command not implemented
503 Sequenza comandi errata. Ad esempio mi collego a un SMTP server e invio un comando diverso da HELO o EHLO
telnet smtp.libero.it 25
220 cp-out12.libero.it ESMTP Service ready

AUTH LOGIN
503 wrong state for AUTH command
504 Parametro di comando inesistente (non impelementato)
AUTH PIPPO
504 unsupported AUTH security mechanism
521 Il server non accetta mail
530 Inizio la sessione di trasmissione senza essermi prima autenticato.
MAIL FROM: <marco.sechi@libero.it>
530 authentication required for mail submission
535 Password o login non valida
AUTH LOGIN
334 VXNlcm5hbWU6
xxx
334 UGFzc3dvcmQ6
xxx
535 invalid user ID or password
550 L'azione richiesta non è stata accettata: mailbox non disponibile
MAIL FROM: <marco.sechi@tin.it>
550 mail not accepted from blacklisted IP address [95.233.40.3]
552 La richiesta è stata annullata: supera lo dimensione massima di allocazione permessa
553 La richiesta è stata annullata a causa di un problema con l'indirizzo (insuccesso)
MAIL FROM:<marco.sechi@tin.it>
553 MAIL FROM:<marco.sechi@tin.it> does not match authenticated user name
554 Transazione fallita. Ad esempio digito il comando DATA prima di aver identificato il destinatario
250 MAIL FROM:<cormatron@libero.it> OK
DATA
554 DATA Transaction failed, no recipients given