Il Simple Mail Transfer Protocol, SMTP è il protocollo che permette di scambiare messaggi tra host, e si occupa di gestire quasi tutto il traffico email su Internet; quindi la sua funzione è molto importante. E’ stato formalizzato nella RFC 821.
Un server SMTP ascolta sulla porta TCP/25, ed accetta connessioni sia da altri server che da client: quando inviate un messaggio, il vostro programma si incarica di contattare il server SMTP del vostro provider, che a sua volta cercherà l’SMTP del destinatario e recapiterà la vostra email.
Quello che normalmente viene identificato con l’etichetta “server della post in uscita” non è altro che il vostro server SMTP.
SMTP definisce il formato dei messaggi da trasferire e il metodo relativo: l’host mittente usa comandi SMTP per mandare messaggi all’host ricevente.
Una connessione SMTP consta di (almeno) 6 fasi:
- Il client si connette alla TCP/25 del server, che risponde con un messaggio
220 <ready>
- Il client richiede l’inizio sessione con un comando
HELO
, seguito opzionalmente dal proprio nome completo di dominio (FQDN). Il server risponde con250 <OK>
- Il client specifica il mittente con
mail from: <indirizzo>
, il server:250 <OK>
. - Adesso il client identifica i destinatari con
rcpt to:<indirizzo>
, la risposta è ancora250 <OK>
. - Il client dichiara di essere pronto a trasmettere il vero messaggio con:
data
, risposta del server:250 <OK>
. Il messaggio viene trasmesso tramite caratteriASCII
a 7 bit. Eventuali allegati sono codificati a 7 bit tramite BinHex, uuencode, o MIME. - Una volta conclusa la trasmissione, il client invia la stringa di fine messaggio, di solito si tratta di un punto seguito da una riga vuota, e la sessione viene chiusa tramite
quit
.
(*)
Si noti che, per limitare lo spam, un server SMTP accetta posta solo per gli utenti del proprio dominio, rifiutando il “relay”.
Una volta che il server SMTP del provider ha ricevuto il messaggio, contatta il server SMTP incaricato della ricezione e gli trasmette la email.
Perché questo avvenga, ci deve essere un modo per risolvere la parte dominio di un indirizzo email (in pratica tutto ciò che segue “@”), e normalmente il compito viene assolto dal DNS.
Interrogando un DNS per ottenere informazioni su un dominio, si può ricavare l’indirizzo del server SMTP incaricato dello scambio di posta, leggendo il valore del record MX (Mail eXchanger).
Vediamo tutto il processo in pratica usando un prompt dei comandi: proveremo a mandare una mail usando solo l’interfaccia a caratteri e il programma telnet. Manderemo un messaggio a [email protected]
da [email protected]
.
Per prima cosa scopriamo qual’è il server SMTP destinato a ricevere la posta per gmail.com
: apriamo una finestra comandi e impartiamo il comando nslookup
.
Al prompt “>” digitiamo set type=mx
, per specificare che abbiamo bisogno di interrogare un record MX, quindi inseriamo il dominio da controllare: gmail.com
Dei 6 server ritornati scegliamo quello con il valore MX preference
più basso, gli altri sono a priorità minore, da contattare in caso il primario non risponda.
Usciamo da nslookup
con exit
.
Colleghiamoci al server SMTP preposto usando telnet, specificando la porta 25: telnet gmail-smtp-in.l.google.com 25
.
Ecco la sequenza dei comandi, quello che dovete inserire è in neretto.
telnet gmail-smtp-in.l.google.com 25
220 mx.gmail.com ESMTP 6si3449404wrl
helo [email protected]
250 mx.gmail.com at your service
mail from:<[email protected]>
250 2.1.0 OK
rcpt to:<[email protected]>
250 2.1.5 OK
data
354 Go ahead
from: Andrea Beggi <[email protected]>
to:Andrea Beggi
subject: prova
questa riga è vuota
Messaggio test
.
questa riga è vuota
250 2.0.0 OK 1122292690 6si3449404wrl
quit
221 2.0.0 mx.gmail.com closing connection 6si3449404wrl
Potete sostituire tranquillamente la riga Messaggio test
con una o più righe costituenti il corpo del messaggio. l’importante è che il messaggio sia chiuso da una riga con un solo punto, seguita da una riga vuota.
Nell’immagine potete vedere la sequenza corretta dei comandi SMTP per l’invio di posta.
Provate con il vostro indirizzo per testare il funzionamento del processo.
(*) Nota: questa è la versione standard dei messaggi SMTP, ma i server possono parlare “dialetti” diversi ma ugualmente supportati, basta guardare l’esempio: non tutti i codici di risposta del server sono conformi allo schema canonico.
Commenti
31 risposte a “TCP/IP in pillole: SMTP”
MA!!! anche tu hai il prompt dei comandi con carattere verde su nero?
siamo tropo geek :-PPP
Tambu:LOL! E’ una vecchia abitudine che mi porto dietro da aaaaaaanni….
SMTP for dummies
Andrea Beggi ha pubblicato sul suo blog una bellissima guida introduttiva all’SMTP. Nella guida vengono trattate le basi del protocollo ed un esempio su come inviare una email da terminale.
ciauz
…
Nonostante in passato i miei occhi abbiano visto troppo spesso fosfori verdi e usurati, preferisco white on blue.
Questione di gusti. 🙂
articolo davvero molto interessante,mi ha fatto ritornare ai bei ricordi dell’adolescenza di quando usavo telnet alle superiori per spedire email,una cosa per� non ho mai capito,cosa fare per visualizzare gli allegati in modo “normale” e se tramite telnet � possibile anche aggiungere allegati alle email in uscita che non risiedano in un server ftp ma localmente nel pc!
[OT] Ciao, come fai per cambiare il prompt dei comandi con carattere verde su nero?
Mi piacerebbe…
Inviare email via telnet
Spesso per provare il corretto funzionamento di un mailserver � necessario inviare un’email via telnet. Andrea tempo fa sul suo blog in un interessante articolo sul protocollo SMTP ne ha spiegato la procedura di base.
Ma cosa succede se vogli…
mi potreste dire qual’e’ l’ip del server smtp dei gestori di posta elettronica?
es. libero?
Grazie.
Ciao Andrea,
ho apprezzato l’articolo, semplice e comprensibile.
Ho provato a seguere le indicazioni ma se uso destinatari con indirizzi tipo @hotmail o @supereva, ricevo un messaggio di deny. Perch�? forse sicurezze implementate dagli amministratori di hotmail e supereva?
Ti ringrazio anticipatamente della risposta.
Andrea
a me invece restituisce un errore di bad rcpt non capisco come mai… grazie ciao!
valerio
ciao ho letto il tuo articolo. vorrei farti alcune domande ad esempio nelle fasi di saluto tra server e host dopo aver inserito il comando helo quale “host name” devo inserire? tu hai inserito [email protected]. Qualsiasi mio indirizzo di posta elettronica inserisca mi fa sempre errore 250 (host name sconosciuto) allora invece di mettere l’indirizzo di posta ho inserito il mio indirizzo IP, mi riconosce e va avanti. poi quando metto il comando mail from mi da un erroe 50.. (se non sbaglio 505). dove sbaglio? come posso fare a sapere con quale host name devo presentarmi? ciao mi farebbe piacere avere una tua risp.
a me invece restituisce un errore di bad rcpt non capisco come mai… grazie ciao!
valerio
– Non esiste un account su quel server. accertati della sua esistenza.
———————————————————————
mi potreste dire qual’e’ l’ip del server smtp dei gestori di posta elettronica?
es. libero?
– C’e’ scritto nell’articolo.
Invece di inserire gmail.com usa libero.it
——————————————————————-
Qualsiasi mio indirizzo di posta elettronica inserisca mi fa sempre errore 250 (host name sconosciuto) allora invece di mettere l’indirizzo di posta ho inserito il mio indirizzo IP, mi riconosce e va avanti. poi quando metto il comando mail from mi da un erroe 50.. (se non sbaglio 505). dove sbaglio? come posso fare a sapere con quale host name devo presentarmi?
– Il server in questione controlla la relazione tra l’indirizzo IP
ed il dominio. Se l’IP non fa parte dell’indirizzo, non ti fa
proseguire nell’invio del messaggio, perche’ crede che si tratti
di una contraffazione (header spoofing), e lo riggetta.
Se inserisci il tuo IP, il server ti fa proseguire, fino a quando
tu inserisci l’indirizzo. E’ palese che l’indirizzo che hai
inserito non e’ lo stesso con il quale ti sei autenticato. prova
ad usare lo stesso, vedrai che riuscirai a mandare il messaggio.
——————————————————————-
Ho provato a seguere le indicazioni ma se uso destinatari con indirizzi tipo @hotmail o @supereva, ricevo un messaggio di deny.
Incolla l’errore esatto. Quando te lo da, ed i comandi che dai.
——————————————————————-
saluti ovd
Si può ottenere l’e-mail di una persona partendo dall’indirizzo IP?
Ciao,volevo dirti che il tuo articolo è perfetto e che sn riuscito a mandare un’email cn il telnet immediatamente,sia a gmail sia ad altri provider…
volevo sapere solamente una cosa,quando cerco il server smtp di hotmail.it a cui connettermi mi appare quest’indirizzo :
pamx1.hotmail.com
fino a qui tutto ok,ma appena tento di connettermi cn il telnet mi scade il time out e nn si connette….
Vorrei avere dei consigli per questo provider…
a presto,ciao!
mi puoi aiutare forse… con incredimail sulle propieta’
del server in uscita trovo la porta 25 (che lampeggia in azzurro) e in arrivo la porta 100..
Morale ricevo le Mail ma non riesco a spedirle (con questo errore- 501 5.5.4 Invalid Address -)
MALEDICO IL GIORNO CHE NON HO SCELTO QUESTO INDIRIZZO DI STUDIO. CIAO GRAZIE
Ciao ragazzi, premetto che non sono esperto in materia, vorrei sapere come faccio a conoscere l’smtp? io uso un pc dell’ufficio e non conosco il provider, sareste così gentili da darmi delle dritte, magari indagando tramite il pannello di controllo, per individuare d’apprima il provider e quindi l’smtp. Grazie a tutti
Grazie del chiaro articolo
ho un router che periodicamente si disconnette e cambia IP. E’ possibile con questo sistema inviare un email con un allegato che mi dica quale è l’ ip del mio router in quel momento, così che io possa collegarmi in remoto?
Fabio: http://www.dyndns.com
Bello… e per i server SMTP che necessitano di autenticazione?
Mi puoi rispndere su [email protected]
GRAZIE
ALESSANDRO
http://www.crazyboxrally.tk
Ho provato come fai tu a spedire verso [email protected], ma mi risponde che io costituisco SPAM e mi rifiuta.
Ho provato allora verso [email protected] (che e’ anche il mio provider). Trovo che il server e’ “smtp.aliceposta.it” e vado avanti. Tutto bene, sembrerebbe!
La email SEMBRA partire (messaggio: queued mail for delivery), ma se vado a controllare nel destinatario NON la ricevo.
Questo e’ il solito comportamento che rilevavo un’ora fa quando non andavo ancora a cercare l’exchanger con nslookup e usavo come smtp “out.alice.it”.
Dove sbaglio?
in vb.net 05 ho creato un client tcp per connettersi alla porta 25 smtp del server, ma non riesco a fare quello che fa nslookup con un client tcp. chi mi da una mano ?
ho lo stesso problema di marco.Chi mi aiuta? grazie
Bravo, ma insieme alle trenette metti anche la polenta e brasato (qui in Cina vengono le allucinazioni alimentari)
Ciao Andrea… visto che tu ci capisci molto più di me ti chiedo una cortesia enorme… sto impazzendo per cercare di far funzionare incredimail con Hotmail… il problema è che non trova le impostazioni necessarie (pop3 e SMTP, il mio ragazzo invece c’è riuscito semplicemente! è possibile che il mio indirizzo sia vecchio e non va bene? siccome devo cambiarlo…potresti aiutarmi a trvare POP3 e SMTP da inserire!!! grazie mille!!
minchia aiuto sto impazzando con sta c…o di server smtp di tiscali se qualcuno ha scoperto sta porta parli ora o taccia per sempre……….. scherzi a parte..chi mi aiuta devo mandare dei lavori mi serve troppo inviare la posta———–a proposito ho tiscali
UN indirizzo di posta elettronica al quale ho scritto e dal quale ho ricevuto mail fino a ieri ora mi dice “failed bad destinatin”
Che significa che non esiste piu???
Roberta
[…] In questo esempio il dominio ha due mail server. Il primo, più importante, è quello con il campo priorità più basso (10) ed è il primo che verrà contattato. Se esso non risponde si passa all’altro (se c’è) che fa da backup e si incaricherà di inoltrare i messaggi al server principale non appena esso tornerà online; impostando due priorità uguali si può ottenere una specie di bilanciamento di carico. Maggiori informazioni sul recapito della posta, il protocollo SMTP e una breve prova pratica li trovate in un mio vecchio post. […]
Grazie .. funziona anche senza tls
ciao…
ho provato sulla mia mail d google(gmail) e funziona tutto perfettamente…
giusto per cambiare provider ho testato la procedura con la mail di mia sorella (hotmail) e quella di due miei amici(libero e live) e la cosa funziona.
solo una domanda…. in tutti e tre i casi la mail ricevuta da un indirizzo fasullo (ho utilizzato [email protected]) viene ricevuta ma rimane nella categoria “spa,/mail indesiderata”, come mai?
ah, leggendo una guida c’era scritto che automaticamente il server invia il mio indirizzo ip nel corpo della mail, tra le righe in cui c’à specificato from/to/subject e, la stessa guida, dice di scrivere subito dopo il comando “data” il comando “Received: by nomeprovider.it id AA112122 with SMTP; Sun, Oct 97 13:40:58”
tra cui: nomeprovider.it—>lo stesso utilizzato con “helo”
Sun, Oct 97 13:40:58—>data in formato standard
id AA112122—>numero di serie del server, va cambiato
e non è nulla di importante
e poi la stessa guida dice che si deve digitare il comando “Message-ID: che serve a far credere che il messaggio sia partito effettivamente dal server “libero.it” con l’id 123.AA12342 (che può essere cambiato purchè non uguale a quello utitilizzato in precedenza nell’intestazione “Received”
Ora proverò a utilizzare i comandi per cui ho chiesto, anche se il mio ip non è comunque visibile in nessuna delle mail che ho provato
Luigi io sto leggendo la tua stessa guida però ho un problema se per caso puoi contattarmi qui: [email protected] per darmi una mano, te ne sarei grato…