La posta elettronica ( email ) è il servizio più utilizzato su Internet perché asincrono, questo significa che chi spedisce la posta e chi la riceve non devono per forza stare davanti entrambi al computer, ma è discreta, in quanto si può leggerla quando si vuole. Un indirizzo di posta elettronica si presenta nella forma utente@dominio, non ci sono particolari regole che impongono un certo formato all’utente. Il carattere “@” è il separatore tra il nome utente ed il dominio di appartenenza ed assume nomi pittoreschi in Italiano, si legge come la parola Inglese at. Il dominio è vincolato alle regole che valgono per tutti gli indirizzi dei computer su Internet. Il tutto viene gestito automaticamente dai mail exchanger ( MX ) del dominio, per questo motivo un indirizzo email può essere completato con un nome descrittivo, diventando ad esempio: Rossi Mario utente@dominio.
Il protocollo SMTP ( Simple Mail Transfer Protocol ) è utilizzato per trasmettere la posta elettronica ed è stato deciso nel lontano 1982. SMTP è un protocollo monodirezionale, nel senso che una volta stabilita la connessione, solo il client può inviare delle email ed al server spetta il compito di riceverle. I comandi che avvengono tra server e client sono abbastanza leggibili e sono costituiti per lo più da comandi testuali e codici di risposta numerici. Per sperimentare direttamente il protocollo, basta utilizzare telnet e collegarsi sulla porta 25 ( porta standard per SMTP ) del server:
telnet nomeserver 25
La prima cosa che un client educato deve fare è presentarsi al server, questo può essere fatto dopo la connessione inviando il comando HELO seguito dal nome del client. Subito dopo si annuncia il mittente con il comando MAIL FROM, seguito dall’indirizzo in questione. Il destinatario si indica con il comando RCPT TO, che si può ripetere più volte se la stessa email è diretta a più destinatari. Ecco come si inizia:
telnet nomeserver 25
…
HELO miodominio
…
MAIL FROM: indirizzo ( l’indirizzo va inserito tra i simboli minore e maggiore che qui non ci sono per problemi con Blogger )
…
RCPT TO: indirizzo ( l’indirizzo va inserito tra i simboli minore e maggiore che qui non ci sono per problemi con Blogger )
…
Subito dopo aver indicato mittente e destinatari, se il server non restituisce nessun errore, si può trasmettere il messaggio vero e proprio. Il comando DATA indica l’inizio dell’email e l’inserimento dei campi nell’header del messaggio, tra i più importanti di questi abbiamo:
- Subject per specificare l’oggetto dell’email.
- From che indica il mittente.
- To che indica l’indirizzo del destinatario o dei destinatari separati da virgole.
- Cc ( Carbon Copy o per conoscenza ) per mandare il messaggio in copia ad altri indirizzi.
- Bcc ( Blind Carbon Copy ) per mandare il messaggio in copia ad altri indirizzi senza che i destinatari ufficiali lo possano vedere.
- Date per specificare la data dell’invio dell’email.
- Message-ID, un identificatore univoco associato al messaggio.
- References che specifica il Message-ID di un’altra email a cui probabilmente si sta rispondendo.
- Return-Path che indica l’effettivo mittente, a volte diverso dal From.
- Reply-To che suggerisce di rispondere ad un indirizzo diverso dal mittente.
- Received che mostra parte del percorso fatto dal messaggio per giungere a destinazione.
- X-Mailer che indica il software usato dal mittente per gestire la posta.
Alcuni di questi header, come Date, Received o Message-ID sono impostati in automatico, mentre altri come Subject o Cc sono a carico del mittente. Vediamo allora di completare il nostro messaggio ed inviarlo:
DATA
…
Subject: Messaggio di prova
From: utente@dominio
To: utente@dominio
Ciao,
Questa è solo una prova
…
QUIT
…
Con l’aumentare della popolarità dell’email, l’esigenza di trasmettere messaggi complessi è divenuta sempre più importante, si sono sviluppati allora dei sotto-standard del protocollo per gestire caratteri a 8 o 16 bit su uno che era nato per 7 bit. Si è definito quindi lo standard MIME ( Multiporpose internet Mail Extension ), che consente di superare l’invio di caratteri con più di 7 bit. Grazie all’header Content-Transfer-Encoding è possibile specificare in che modo i caratteri particolari vengano trasmessi; le codifiche più diffuse sono due:
- quoted-printable che usa il carattere “=” seguito dal carattere speciale da inviare.
- base64 che impacchetta 3 byte ( 24 bit ) in quattro caratteri ASCII, usando solo 6 bit per ogni carattere e garantendo quindi che il risultato sia ancora ASCII.
Usando MIME un messaggio di posta elettronica può essere scomposto in più parti, che poi possono essere codificate in modo diverso e servono per inviare file allegati o il contenuto del messaggio in formato HTML.
Abbiamo visto a grandi linee il protocollo SMTP utilizzato anche attraverso telnet e quindi dare direttamente i comandi al server. Questo ci verrà utile quando ad esempio vogliamo mandare delle email tramite i più importanti linguaggi di programmazione, come C/C++ o Java, utilizzando i socket.