MINIGUIDA: E-MAIL
Invio di un messaggio di posta elettronica (utilizzo del server SMTP)
Nel momento in cui ci accingiamo a inoltrare un messaggio di posta elettronica, il nostro computer, utilizzando il programma appropriato, si connette al server
SMTP del provider stabilito.
Ormai quasi tutti i providers titolari di un server
SMTP fanno sì che esso sia utilizzabile soltanto dai loro stessi abbonati.
In altre parole, per poter inviare un'e-mail, ogni utente è obbligato ad utilizzare il server
SMTP appartenente allo stesso provider che gli offre l'accesso ad Internet in quel momento.
La porta predefinita dei server
SMTP è la n. 25.
Una volta collegato al server
SMTP sulla relativa porta, il client provvede ad inviargli, utilizzando il protocollo specifico, l'indirizzo del mittente, l'indirizzo del destinatario, l'oggetto del messaggio e il testo.
Ma vediamo subito un esempio:
Supponiamo di avere un account sul provider
localhost, col nome utente
io.
Il nostro indirizzo e-mail sarà quindi
io@localhost.
Come si può notare, il simbolo
@ è utilizzato per separare il nome utente dall'indirizzo del provider.
Supponiamo adesso di voler inviare un'e-mail all'indirizzo
tu@remotehost;
Una volta dato il comando d'invio, il nostro client si connetterà al server
SMTP del provider
localhost sulla relativa porta (di solito la n. 25, come abbiamo detto).
Quando il client si sarà connesso al server riceverà da esso una risposta di questo tipo:
220 [indirizzo del server]
È da premettere che, praticamente in qualsiasi tipo di sessione client/server, sia i comandi inviati sia quelli ricevuti, per essere riconosciuti come validi, devono essere seguiti da una riga vuota, ovvero un "a capo". In gergo questa riga si chiama CrLf.
Una volta ricevuta la risposta dal server, il client provvederà a inviare la prima riga di dati:
HELO [Host del computer client]
Con questa riga il client si "presenta" al server e gli fornisce l'host del computer sul quale è installato.
A questo punto il server darà il "benvenuto" al client con una riga di testo che inizierà con 250, ad esempio:
250 Hello [Host del computer client], pleased to meet you
Il client invierà allora la riga contenente l'indirizzo del mittente del messaggio:
MAIL FROM: <io@localhost>
Nella maggior parte dei casi, i providers che dispongono di un server
SMTP non si curano dell'indirizzo del mittente, nel senso che esso può indifferentemente corrispondere a un loro account o meno;
questo potrebbe anche considerarsi un problema, in quanto non viene creata nessuna difficoltà a chiunque volesse spedire messaggi di posta elettronica facendo risultare come mittente un indirizzo altrui o, perché no, un indirizzo falso.
A conferma di ciò si può evidenziare il fatto che qualsiasi programma per la gestione della posta elettronica permette di scegliere quale indirizzo visualizzare come mittente nei messaggi inviati.
È ovvio, però, che l'indirizzo
IP del computer dal quale viene inviata l'e-mail rimanga comunque registrato sul server, quindi, nel caso in cui fosse ritenuto necessario, il mittente reale potrebbe essere facilmente rintracciato.
Una volta ricevuta la riga contenente l'indirizzo del mittente del messaggio, il server risponderà con un'altra riga di testo, che inizierà sempre con 250; il client invierà adesso la riga contenente l'indirizzo del destinatario del messaggio:
RCPT TO: <tu@remotehost>
Anche a questo punto il server risponderà con una riga di testo che inizierà con 250; il client invierà dunque il testo "Data", che potrebbe definirsi un'introduzione all'e-mail vera e propria:
Data
Alla ricezione di "Data", il server invierà una riga con la quale comunicherà al client che è pronto a ricevere l'e-mail; questa riga inizierà con 354. A questo punto il client provvederà ad inviare il contenuto dell'e-mail:
From: <io@localhost>
To: <tu@remotehost>
Subject: Oggetto del messaggio
Testo del messaggio
.
Come si può notare, il client ripete, nella prima riga, l'indirizzo del mittente del messaggio e nella seconda riga quello del destinatario.
Di seguito invierà l'oggetto del messaggio e il testo. Dopo il testo lascerà una riga vuota e di seguito chiuderà l'e-mail con una riga contenente un punto.
Se sul programma utilizzato è stato specificato un nome per il mittente o per il destinatario (se ad esempio esso è stato memorizzato in una rubrica), il client provvederà anche ad inviare questi nomi. Ma vediamo un esempio:
From: "Nome del mittente" <io@localhost>
To: "Nome del destinatario" <tu@remotehost>
Subject: Oggetto del messaggio
Testo del messaggio
.
Una volta inviata l'e-mail in questo modo, il server invierà una conferma, ovvero una riga di testo che inizierà con 250.
Il client invierà adesso il testo "QUIT", il quale comunica al server la fine dell'operazione:
QUIT
Il server invierà una riga di testo che inizierà con 221 e chiuderà la connessione con il client; l'invio del messaggio al server
SMTP è completo.
È ovvio che, spiegato in maniera così dettagliata, l'invio di un messaggio di posta elettronica possa risultare un po' complicato. Per questo motivo ho voluto riassumere di seguito la "conversazione" che abbiamo appena esaminato tra client e server
SMTP.
Le righe scritte in verde identificano i commenti, mentre le righe scritte in rosso e in blu identificano rispettivamente i dati ricevuti dal server
SMTP e quelli inviati dal client.
220 [indirizzo del server]
HELO [Host del computer client]
250 Hello [Host del computer client], pleased to meet you
MAIL FROM: <io@localhost>
250 etc. etc.
RCPT TO: <tu@remotehost>
250 etc. etc.
Data
354 etc. etc.
From: <io@localhost>
To: <tu@remotehost>
Subject: Oggetto del messaggio
Testo del messaggio
.
250 etc. etc.
QUIT
221 etc. etc.
Una volta che il messaggio è stato inviato al server
SMTP e la connessione col client è stata chiusa, il server dovrà provvedere ad inviare il messaggio al suo destinatario. Vediamo quali sono le operazioni che vengono compiute per far sì che ciò avvenga:
Il server
SMTP scompone l'indirizzo del destinatario del messaggio, separando il nome utente dall'indirizzo del provider sul quale esso ha registrato l'account.
Per separare questi due elementi, come abbiamo visto prima, viene usato il simbolo @.
L'indirizzo
tu@remotehost verrà dunque scomposto in questo modo:
Nome utente:
tu
Indirizzo provider:
remotehost
A questo punto il server
SMTP del nostro provider si connetterà al server
SMTP del provider del destinatario e gli trasmetterà il contenuto del messaggio, completo ovviamente di indirizzo mittente e indirizzo destinatario.
Se il server
SMTP del destinatario riconoscerà l'indirizzo destinatario come appartenente a sé (ovvero se la parte dopo il simbolo @ corrisponderà a quel provider), provvederà a passare il messaggio al proprio server
POP3, il quale lo depositerà nella casella corrispondente all'account specificato dal nome utente.
Nel caso contrario, o comunque per qualsiasi tipo di errore o problema tecnico, il server
SMTP destinatario provvederà ad inviare all'indirizzo mittente un'e-mail con la quale notificherà il problema verificatosi e quindi l'esito negativo dell'operazione.
Il protocollo
SMTP è stato reso pubblico nella
RFC 2821, datata aprile 2001.
Ricezione di un messaggio di posta elettronica (utilizzo del server POP3)
Per leggere i messaggi di posta elettronica depositati sul server
POP3 del nostro provider, il nostro client dovrà naturalmente connettersi a questo server sulla relativa porta.
La porta predefinita dei server
POP3 è la n. 110.
Il server
POP3 richiede il nome utente e ovviamente la relativa password per poter accedere alla propria casella e leggere i messaggi ivi depositati.
Una volta stabilita la connessione, il server provvederà ad inviare al client una sorta di messaggio di benvenuto.
Ricordiamoci sempre la regola del CrLf, la riga vuota, citata nel paragrafo precedente.
Alla ricezione di questo messaggio, il client invierà il nome utente corrispondente all'account desiderato, utilizzando il comando USER, in questo modo:
USER [nomeutente]
Se il nome utente sarà riconosciuto dal server, esso invierà un messaggio per notificare l'esito positivo del comando inviato. In caso contrario, ovviamente, il server invierà un messaggio di errore.
Per notificare l'esito positivo di un comando, il server utilizza dei messaggi che iniziano con +OK. In caso di errore, invece, essi iniziano con -ERR.
Supponiamo che il comando abbia esito positivo; il server invia un messaggio di notifica che inizia con +OK:
+OK
A questo punto il client invierà la password relativa a quel nome utente, utilizzando il comando PASS:
PASS [password]
Anche stavolta il server invierà un messaggio di notifica.
Il client invierà adesso il comando STAT, il quale serve a controllare se nella casella sono presenti messaggi e la loro eventuale dimensione in byte.
STAT
Al comando STAT il server risponde con un messaggio del seguente formato:
+OK 1 100
Vediamo nei dettagli cosa significa questo messaggio:
+OK esito positivo del comando inviato dal client;
1 numero dei messaggi depositati sul server POP3;
100 dimensione totale dei messaggi depositati sul server. Il valore è espresso in byte.
In questo caso il server ha comunicato al client che su esso è depositato un solo messaggio per una dimensione totale di 100 byte; andiamo adesso a vedere cosa risponderebbe il server al comando STAT nel caso in cui su di esso fossero depositati più messaggi:
+OK 3 1400
Nel dettaglio:
+OK esito positivo del comando inviato dal client;
3 numero dei messaggi depositati sul server POP3;
1400 dimensione totale dei messaggi depositati sul server.
In questo caso il server ha comunicato che su esso sono depositati 3 messaggi per una dimensione totale di 1400 byte.
Una volta ricevute queste informazioni, il client richiederà al server la lista dettagliata dei suddetti messaggi, utilizzando il comando LIST:
LIST
La lista verrà inviata al client con un messaggio del seguente formato:
+OK 3
1 480
2 230
3 690
.
Con questa lista, il server fornisce al client la dimensione in byte di ciascun messaggio.
Vediamo comunque il tutto nei dettagli:
+OK esito positivo del comando inviato dal client;
3 numero totale dei messaggi depositati sul server POP3;
1 480 dimensione del messaggio n. 1 (480 byte);
2 230 dimensione del messaggio n. 2 (230 byte);
3 690 dimensione del messaggio n. 3 (690 byte);
. Il punto indica la fine della lista messaggi.
Una volta ricevuta la lista, il client richiederà al server i singoli messaggi, utilizzando il comando RETR seguito dal numero del messaggio richiesto.
RETR 1 Il client richiede il messaggio n. 1.
oppure
RETR 2 Il client richiede il messaggio n. 2.
A questo punto il server invierà al client il messaggio richiesto:
+OK
From: <io@localhost>
To: <tu@remotehost>
Subject: Oggetto del messaggio
Testo del messaggio
.
Nel dettaglio:
+OK esito positivo del comando inviato dal client;
From: <io@localhost> indirizzo del mittente del messaggio;
To: <tu@remotehost> indirizzo del destinatario;
Subject: Oggetto del messaggio l'oggetto del messaggio, per l'appunto;
Testo del messaggio
. Il punto indica la fine del messaggio.
Se il client di posta elettronica è configurato per la cancellazione automatica dei messaggi scaricati dal server, esso invierà a questo punto il comando DELE seguito dal numero del messaggio appena scaricato. Il comando DELE serve ovviamente per cancellare un dato messaggio dal server
POP3.
Supponiamo che il nostro client sia configurato per la cancellazione automatica dei messaggi dal server;
una volta scaricato il messaggio n. 1, esso invierà al server
POP3 il comando relativo alla sua eliminazione:
DELE 1
Se l'eliminazione del messaggio avrà avuto esito positivo, il server risponderà, naturalmente, con un messaggio di notifica che inizia con +OK:
+OK
Una volta scaricati ed eventualmente cancellati tutti i messaggi dal server
POP3, il client comunicherà al server la fine dell'operazione, utilizzando il comando QUIT:
QUIT
Il server notificherà l'esito positivo del comando (+OK etc. etc.) e chiuderà la connessione col client.
Riassumiamo adesso i passaggi appena visti:
Come nel paragrafo
Invio di un messaggio di posta elettronica (utilizzo del server SMTP) le righe scritte in verde identificano i commenti, mentre le righe scritte in rosso e in blu identificano rispettivamente i dati ricevuti dal server
POP3 e quelli inviati dal client.
+OK etc. etc. (messaggio di benvenuto del server)
USER [nomeutente]
+OK etc. etc.
PASS [password]
+OK etc. etc.
STAT
+OK 3 1400
LIST
+OK 3
1 480
2 230
3 690
.
RETR 1
+OK
From: <io@localhost>
To: <tu@remotehost>
Subject: Oggetto del messaggio n. 1
Testo del messaggio n. 1
.
DELE 1
+OK etc. etc.
RETR 2
+OK
From: <io@localhost>
To: <tu@remotehost>
Subject: Oggetto del messaggio n. 2
Testo del messaggio n. 2
.
DELE 2
+OK etc. etc.
RETR 3
+OK
From: <io@localhost>
To: <tu@remotehost>
Subject: Oggetto del messaggio n. 3
Testo del messaggio n. 3
.
DELE 3
+OK etc. etc.
QUIT
+OK etc. etc.
Il protocollo
POP3 è stato reso pubblico nella
RFC 1939, datata maggio 1996.