RagnoWeb RagnoWeb
1:27
Cos'è RagnoWeb Cos'è RagnoWeb Gadgets Gadgets Disclaimer Disclaimer Valid XHTML 1.1
MINIGUIDA: E-MAIL
Condividi su Facebook
 
 
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.
 
Il client si connette al server SMTP sulla relativa porta.
 
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.
 
Il server chiude la connessione con il client.
 
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.
 
Il client si connette al server POP3 sulla relativa porta.
 
+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
 
.

 
Se il client è configurato per la cancellazione automatica dei messaggi scaricati dal server, esso provvederà all'eliminazione del messaggio appena scaricato utilizzando il comando DELE.
 
DELE 1
 
+OK etc. etc.
 
L'operazione di scaricamento ed eventuale cancellazione dal server si ripete per tutti i messaggi depositati su esso.
 
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 server chiude la connessione col client.
 
Il protocollo POP3 è stato reso pubblico nella RFC 1939, datata maggio 1996.