|
Premessa
Chi non ha mandato mai una email, alzi la mano! Ops,
non ne vedo nessuna alzata, come immaginavo. E' una cosa molto semplice mandarne
una con un semplice client di posta elettronica ma la cosa può
diventare più complicata se la si vuole mandare a linea di comando,
personalizzando magari qualche parametro a piacere come la data di invio, il mittente o cose
simili oppure solo per il gusto di capire cosa c'è dietro a quel
programma che usate. Lo scopo di questo articolo sarà quello di capire
proprio questo.
Qual è il protocollo usato e come
funziona
Il protocollo applicativo per mandare una email è SMTP (Simple Mail
Transfer Protocol http://www.ietf.org/rfc/rfc0821.txt
) e come dice il nome, il
protocollo è stato pensato per trasferire semplice posta o meglio
testo ( una lettera postale è semplice testo ). Il messaggio, mandato
da un client SMTP nascosto sempre dal visualizzatore di posta o agent (
OutLook o Kemail ), è mandato sempre ad una mailbox, normalmente il
nome del possessore della casella di posta su un certo provider il quale
è il server SMTP che riceverà il messaggio. Il noto POP invece
è il protocollo che sta tra la mailbox e l'agent e detta le regole per
informare sull'arrivo di una nuova email o per segnalare che la mailbox
è piena ecc..

Il protocollo SMTP è composto da una serie di
campi, che vengono poi gestiti dall'applicativo ricevente per la
visualizzazione come siamo abituati.
I campi sono:
To: mailbox dei destinatari principali, deve essere corretto altrimenti
non arriva l'email
From: normalmente l'email dell'autore del messaggio
Date: questo è il campo dati, il corpo del pacchetto SMTP ed è
diviso in altri sottocampi
Cc: destinatari secondari
Bcc: destinatari secondari a cui vengono nascosti gli altri destinatari
Sender: indirizzo email di chi spedisce il messaggio
Receiver: riga aggiunta dai sistemi interni attraversati ( appare solo
all'arrivo, normalmente ogni server attraversato lascia una traccia qui )
Return-path: può servire per identificare la stada per la risposta
Reply-to: indirizzo a cui inviare la risposta
Message-id: codice univoco del messaggio
In-replay-to: message-id del messaggio peri cui quello attuale è la
risposta
References: message-id di messaggi a cui si fa riferimento
Keywords: parole chiave definite dall'utente
Subject: riga che sintetizza l'argomento trattato del messaggio (oggetto)
Quando è
stato pensato nel 1971 ( vedi articolo sul numero 24 di hj ) il protocollo
era nato per mandare solo testo ( e di questo ci occuperemo noi ) e poi
è stato ampliato col protocollo MIME ( Multipurpose Internet Mail
Extension http://www.cknow.com/ckinfo/acro_m/mime_1.shtml
). Per estendere SMTP a MIME bisogna implementare le regole di
quest'ultimo, nel campo data di SMTP.
Per poter mandare una mail bisogna appoggiarsi su un server SMTP nel quale
è implementato anche un client SMTP (che useremo) che inoltra il
messaggio al destinatario (mailbox). Per fare ciò ci si può
appoggiare al noto Telnet che ci consente di creare una connessione TCP/IP
con un qualsiasi server su una porta specifica che gestisce un certo
servizio. Nel nostro caso bisognerà cercare un server SMTP libero come
per esempio smtp.libero.it oppure smtp.tiscalinet.it ( o ancora mail.tin.it,
mail.inwind.it, smtp.katamail.com , mail.gmx.it, mail.galactica.it,
mail.ciaoweb.net, smtp.vizzavi.it,
smtp.email.it,smtp.mail.omnitel.it,mail.supereva.it,smtp.mail.yahoo.it,
mail.interfree.it ) , ma è consigliato usare sempre il server SMTP del
provider usato dal destinatario della nostra email.

Dalla teoria alla pratica
Seguirò un esempio pratico per spiegare le cose e i vari campi
settati normalmente da un client di posta elettronica che invece possiamo
settare noi a mano.
Per gli utenti Linux dalla console avviare telnet nel modo seguente
telnet nome-server 25
dove il nome-server è il nome del server smtp che vogliamo usare e
normalmente il servizio è offerto sulla porta 25.
Per gli amanti di windows c'è da fare un piccolo discorso. Aperto il
programma facendo
avvio -> esegui -> telnet -> ok
se noi ci connettessimo subito, normalmente di default non è attivato
l'eco locale e ciò vuol dire che se digitiamo qualcosa nel nostro
terminale non si vedrebbe niente perché i caratteri sarebbero inviati
al server a cui siamo connessi e non ci sarebbe l'eco sul nostro pc. Detto
questo è consigliato vivamente di attivarlo prima di connettersi. Per
farlo
terminale -> preferenze -> spuntare eco locale -> ok
ora per connettersi
connetti -> sistema remoto -> hostname: nome-server -> porta: 25
-> ok
se invece
nella vostra versione di windows vi si è aperto il terminale da
dos, per attivare l'eco locale fare
set LOCAL_ECHO
ma conviene sempre fare un bel help '? ' .

Per connettersi invece
open nome-server 25
Da qui in avanti non farò più distinzioni tra windows e Linux i
comandi sono uguali. Ogni comando che mandiamo è sempre seguito da un
messaggio positivo o negativo che sia. I messaggi sono formati da un numero
iniziale univoco in base al tipo
di messaggio e seguito da una spiegazione del messaggio. Dal numero si
capisce subito se la richiesta è andata a buon fine oppure no. In caso
di errore o dopo una ripetizione di errori veniamo disconnessi dal server. I
messaggi si dividono in 5 classi rispettivamente ogni classe dipende dal
numero iniziale. Quelli che ci interessano sono la classe
2xx classe di successo, non e' stato errore il
messaggio è andato a buon fine il tipico messaggio di questa classe
è il 250
4xx messaggio di errore ( mai visto 404 pagina web non esistente … )
5xx in questo caso il server a cui siamo connessi ci avvisa che non ci
può servire a causa di un suo problema. In questo caso ci scolleghiamo
e riproviamo un altro giorno. Un altro caso è che non ha riconosciuto
il comando dato.

Il primo comando da mandare al server è quello
di riconoscimento, se non ci facciamo riconoscere non ci darà
l'accesso al servizio. Per autenticarci
HELO dominio-server
poi bisogna specificare il l'email del mittente
MAIL FROM:<mail-mittente>
ma soprattutto quella del destinatario, sbagliata questa .. non arriva
l'email
RCPT TO:<mail-destinatario>
spesso i comandi possono variare
a seconda della versione del server SMTP usata dal server. In aiuto col
comando
HELP
oppure
HELP comando
possiamo avere la sintassi esatta del comando. Ora la seconda parte
più importante è il campo data del messaggio dove vengono
impostati i campi già spiegati.
DATA
Normalmente i comandi vengono interpretati dopo il carattere INVIO, tranne questo
campo essendoci più di un parametro da settare oltre che tutto il
testo del messaggio. Quindi dopo aver scritto DATA ci verranno date le istruzioni
su come terminare il campo in questione. Normalmente la terminazione è
"INVIO.INVIO" , per non sbagliare basta leggere attentamente il
messaggio. E' a questo punto che si specificano la data di invio della email,
il soggetto della email, il nome del mittente ( non l'email ma il nome che si
vede alla ricezione della email ) e il testo del messaggio, ecco come
date: "numero giorno" "tipo giorno" "mese"
"anno" "ora:minuti:secondi"
es: date: 11 Mon Jun 03 22:23:24
chi avrà l'occhio più fine vedrà che i campi sono specificati in notazione
inglese poi..
from: "Nome mittente" <mail-mittente>
subject: " oggetto della email"
"corpo del testo, il messaggio vero e proprio"
INVIO . INVIO
a questo punto se la ricezione è avvenuta correttamente riceveremo il
message-ID della email mandata ( il codice che identifica la email in modo
univoco ) e sarà inoltrata. Per chiudere la connessione
QUIT

Esempio
Ecco la copia di un esempio che ho provato
personalmente mandandomi una email a me stesso:
telnet smtp.lbero.it 25
220 smtp2.libero.it ESMTP Service (7.0.012) ready
helo libero.it
250 smtp2.libero.it
MAIL FR0M:<boymix81@libero.it>
250 MAIL FR0M:<boymix81@libero.it> OK
HELP
214-Valid SMTP commands:
214- HELO, EHLO, NOOP, RSET, QUIT, STARTTLS
214- MAIL, RCPT, DATA, URFY, EXPN, HELP, ETRN
214-For more info, use HELP <valid SMTP command>
214 end of help
RCPT T0:<boymix81@libero.it>
250 RCPT T0:<boymix81@libero.it> OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
date: 11 mon Jun 03 22:22:00
from: "io stesso" <boymix8l@libero.it>
subject: ecco 1'email mandata da me
opz la mia
mail mandata da telnet! questo è il testo .
.
250 <3E9BEBC30144468C> Mail accepted
QUIT
221 smtp2.libero.it QUIT
Connessione all'host perduta.
Premere un testo per continuare...

Conclusioni
Un coltello si può usare per uccidere ma esso è stato creato
per tagliare e anche questo articolo è stato creato per capire il
protocollo SMTP ma si potrebbe usare per mandare email con campi camuffati,
per mandare una email con destinatario diverso da chi è realmente o
cose simili. Il punto è che comunque quando ci colleghiamo ad un
server egli registra il nostro IP quindi se vi arriva una email
"anonima" o "sospetta" l'unico modo per difendersi
è contattare il provider della vostra mailbox o meglio ancora
denunciare la cosa alle
autorità e saranno loro poi a contattere il server SMTP che ha inviato
l'email.
Torna alla HOME
|