A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

Il Simple Mail Transfer Protocol, SMTP è il protocollo che permette di scambiare messaggi tra host, e si occupa di gestire quasi tutto il traffico email su Internet; quindi la sua funzione è molto importante. E’ stato formalizzato nella RFC 821.
Un server SMTP ascolta sulla porta TCP/25, ed accetta connessioni sia da altri server che da client: quando inviate un messaggio, il vostro programma si incarica di contattare il server SMTP del vostro provider, che a sua volta cercherà l’SMTP del destinatario e recapiterà la vostra email.
Quello che normalmente viene identificato con l’etichetta “server della post in uscita” non è altro che il vostro server SMTP.
SMTP definisce il formato dei messaggi da trasferire e il metodo relativo: l’host mittente usa comandi SMTP per mandare messaggi all’host ricevente.

Una connessione SMTP consta di (almeno) 6 fasi:

  1. Il client si connette alla TCP/25 del server, che risponde con un messaggio 220 <ready>
  2. Il client richiede l’inizio sessione con un comando HELO, seguito opzionalmente dal proprio nome completo di dominio (FQDN). Il server risponde con 250 <OK>
  3. Il client specifica il mittente con mail from: <indirizzo>, il server: 250 <OK>.
  4. Adesso il client identifica i destinatari con rcpt to:<indirizzo>, la risposta è ancora 250 <OK>.
  5. Il client dichiara di essere pronto a trasmettere il vero messaggio con: data, risposta del server: 250 <OK>. Il messaggio viene trasmesso tramite caratteri ASCII a 7 bit. Eventuali allegati sono codificati a 7 bit tramite BinHex, uuencode, o MIME.
  6. Una volta conclusa la trasmissione, il client invia la stringa di fine messaggio, di solito si tratta di un punto seguito da una riga vuota, e la sessione viene chiusa tramite quit.

(*)
Si noti che, per limitare lo spam, un server SMTP accetta posta solo per gli utenti del proprio dominio, rifiutando il “relay”.
Una volta che il server SMTP del provider ha ricevuto il messaggio, contatta il server SMTP incaricato della ricezione e gli trasmette la email.
Perché questo avvenga, ci deve essere un modo per risolvere la parte dominio di un indirizzo email (in pratica tutto ciò che segue “@”), e normalmente il compito viene assolto dal DNS.
Interrogando un DNS per ottenere informazioni su un dominio, si può ricavare l’indirizzo del server SMTP incaricato dello scambio di posta, leggendo il valore del record MX (Mail eXchanger).

Vediamo tutto il processo in pratica usando un prompt dei comandi: proveremo a mandare una mail usando solo l’interfaccia a caratteri e il programma telnet. Manderemo un messaggio a abeggi@gmail.com da abeggi@libero.it.
Per prima cosa scopriamo qual’è il server SMTP destinato a ricevere la posta per gmail.com: apriamo una finestra comandi e 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: gmail.com
Nslookup
Dei 6 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 al server SMTP preposto usando telnet, specificando la porta 25: telnet gmail-smtp-in.l.google.com 25.
Ecco la sequenza dei comandi, quello che dovete inserire è in neretto.

telnet gmail-smtp-in.l.google.com 25
220 mx.gmail.com ESMTP 6si3449404wrl
helo abeggi@libero.it
250 mx.gmail.com at your service
mail from:<abeggi@libero.it>
250 2.1.0 OK
rcpt to:<abeggi@gmail.com>
250 2.1.5 OK
data
354 Go ahead
from: Andrea Beggi <abeggi@libero.it>
to:Andrea Beggi
subject: prova

questa riga è vuota
Messaggio test
.

questa riga è vuota

250 2.0.0 OK 1122292690 6si3449404wrl
quit
221 2.0.0 mx.gmail.com closing connection 6si3449404wrl

Potete sostituire tranquillamente la riga Messaggio test con una o più righe costituenti il corpo del messaggio. l’importante è che il messaggio sia chiuso da una riga con un solo punto, seguita da una riga vuota.

Nell’immagine potete vedere la sequenza corretta dei comandi SMTP per l’invio di posta.
SMTP session
Provate con il vostro indirizzo per testare il funzionamento del processo.

(*) Nota: questa è la versione standard dei messaggi SMTP, ma i server possono parlare “dialetti” diversi ma ugualmente supportati, basta guardare l’esempio: non tutti i codici di risposta del server sono conformi allo schema canonico.

Tags: ,

Related posts