Un sistema di scambio mail è fornito di tre componenti principali:
- User Agent: Lo troviamo anche come browser nei client HTTP, lo User Agent viene usato per scrivere e leggere un messaggio
- Message Transfer Agent(MTA): Usato per trasferire il messaggio attraverso Internet
- Message Access Agent (MAA): Usato per leggere la mail in arrivo.
User Agent
Lo User Agent(UA) viene attivato dall’ utente o da un timer ed ogni volta che viene attivato controlla ed informa l’utente di eventuale nuova posta.
Conosciuto più comunemente come Mail Reader, i più comuni sono Outlook e Thunderbird: se mai li avete usati, saprete bene che le loro caratteristiche di base sono la composizione, l’editing e la lettura dei messaggi.
Quando però premiamo “Invia mail“, lo User Agent si affida all’ MTA per trasferire il messaggio dallo User Agent al server.
Mail Transfer Agent
L’ agente di trasporto per le mail, è colui che trasferisce il messaggio dal nostro UA, al nostro server di posta(identificato dal contenuto dopo la chiocciola es: federico@informaticalab.com il mio server di posta è informaticalab.com), poi dal nostro server di posta fino a quella del destinatario.
Per trasferire i mesaggi, utilizziamo il protocollo SMTP che sfrutta a livello di trasporto l’ affidabilità di TCP (sulla porta 25).
Il Simple Mail Transfer Protocol viene utilizzato per trasferire tra server a server e fra agente utente del mittente al suo server.
La mailbox (casella di posta) del mail server conterrà i messaggi di posta ricevuti e avrà una coda di messaggi utilizzata per tentare di inviare la nostra posta al server destinatario (es: se trova il server spento, continuerà a provare ogni tot minuti per alcuni giorni).
Il protocollo SMTP è composto da tre fasi:
- Handshaking (stretta di mano): si mette d’accordo col server a cui si collega
- Trasferimento dei messaggi: la connessione è persistente, vengono quindi inviati tutti i messaggi assieme.
- Chiusura.
Le interazioni fra due server si compongono di comandi e risposte scambiate in formati ASCII.
Volendo, possiamo utilizzare telnet per connetterci al server di posta:
telnet servername 25
Ed utilizzare i comandi:
- HELO : handshake
- MAIL FROM : mittente
- RCPT TO : destinatario
- DATA : il testo della mail
- QUIT : chiude la connessione
Normalmente, i dati contenuti nella mail devono essere in formato ASCII. Altrimenti, se vogliamo mandare dei dati diversi, dovremo convertirli in un formato a 7-bit.
Per farlo, ci viene aiuto il MIME (Multi-purpose Internet Mail Extension). Per aggiugnerlo, ci basta specificare nell’ header queste righe:
MIME-Version: 1.0 Content-Transfer-Encoding: base 64 Content-Type: image/jpeg
Accedere alla posta
L’ SMTP viene utilizzato per trasferire il messaggio fino al nostro server: per poterlo scaricare dal server al nostro UA invece, utilizziamo altri protocolli che vediamo subito:
- Pop3: Post Office Protocol
- Imap: Internet Mail Access Protocol
POP3 utilizza il protocollo TCP sulla porta 110 ed è composto da tre fasi:
- Autorizzazione: L’ agente utente invia nome utente e password per accedere alla sua casella
- Transazione: Tramite MAA l’ UA riesce a recuperare i messaggi
- Aggiornamento: Dopo che il client invia un QUIT, vengono cancellati i messaggi maracati segnalati come da rimuovere.
Un problema di POP3 è che non mantiene uno stato fra le varie sessioni, inoltre non offre la possibilità di creare cartelle remote ma possono essere create solo localmente.
IMAP invece mantiene tutti i messaggi in un unico posto: il server. Non solo consente all’ utente di mantenere lo stato fra le varie sessioni, ma anche di organizzare i messaggi in cartelle.
Oltre a questo IMAP offre anche dei comandi per scaricare parti di messaggi tipo intestazioni o parte della mail.
Al giorno d’oggi
C’è anche da dire una cosa: poche persone utilizzano e Outlook o Thunderbird. Quessto perchè, soprattutto a webmail come Gmail, la casella di posta ormai si consulta principalmente online.
Questo vuol dire che, invece che POP3 e IMAP, il protocollo con cui ci connettiamo è HTTP.
L’ SMTP però persiste ancora perchè, se vi ricordate bene, viene utilizzato per lo scambio di mail fra server (altrimenti anche questo sarebbe “inutile”).