Simple Mail Transfer Protocol (SMTP) è un protocollo standard per la trasmissione di email. Inizialmente proposto nella RFC 788 nel 1981, poi aggiornato con RFC 821 nel 1982 ed ulteriormente modificato nel 2008 con l'introduzione di extended SMTP, che è il protocollo attualmente in uso.
Anche se i server di posta elettronica utilizzano SMTP per inviare e ricevere mail, i client mail a livello utente utilizzano SMTP solo per inviare il messaggio al server mail, il quale si occupa dell'invio del messaggio stesso. Per recuperare i messaggi, le applicazioni client usano solitamente protocolli come IMAP o POP3.
La comunicazione tra i server mail utilizza il protocollo TCP sulla porta 25. I client mail, tuttavia, spesso inviano le mail in uscita al server sulla porta 465 o 587.
È possibile rendere sicura una connessione SMTP con TLS, nota come SMTPS, attraverso STARTTLS.
Anche se sistemi proprietari (come Microsoft Exchange e IBM Notes) e sistemi webmail (come Outlook.com, Gmail e Yahoo! Mail) utilizzano protocolli non standard per accedere alla mail box dell'account del rispettivo server mail, tutti utilizzano SMTP, per l'invio e la ricezione di mail, al di fuori dei loro sistemi.
Descrizione È un protocollo testuale relativamente semplice, nel quale vengono specificati uno o più destinatari di un messaggio e, dopo aver verificato la loro esistenza, il messaggio viene trasferito. È abbastanza facile verificare come funziona un server SMTP mediante un client telnet. Il protocollo SMTP utilizza come protocollo di livello di trasporto TCP. Il client apre una sessione TCP verso il server sulla porta 25 (molti Provider per limitare lo spam utilizzano al suo posto la porta TCP 587 come previsto dalla RFC 2476 del dicembre 1998). Per associare il server SMTP a un dato nome di dominio (DNS) si usa un Resource Record di tipo MX (Mail eXchange).
Poiché SMTP è un protocollo testuale basato sulla codifica ASCII (in particolare ASCII NVT 7-bit), non è permesso trasmettere direttamente testo composto con un diverso set di caratteri (quindi nemmeno binari). Lo standard MIME permette di estendere il formato dei messaggi mantenendo la compatibilità col software esistente. Per esempio, al giorno d'oggi molti server SMTP supportano l'estensione 8BITMIME, la quale permette un trasferimento di un testo che contiene caratteri accentati (non-ASCII) senza bisogno di trascodificarlo. Altri limiti di SMTP, quale la lunghezza massima di una riga, impediscono la spedizione di file binari senza trascodifica. (Nota che per i file binari inviati con HTTP si utilizza il formato MIME senza bisogno di una trascodifica.)
SMTP è un protocollo che permette soltanto di inviare messaggi di posta, ma non di richiederli ad un server: per fare questo il client di posta deve usare altri protocolli, quali POP3 (Post Office Protocol) e IMAP (Internet Message Access Protocol).
Storia Negli anni '60 venivano utilizzate già diverse soluzioni one-to-one per lo scambio di messaggi. Le persone comunicavano tra di loro utilizzando sistemi sviluppati per uno specifico mainframe. Al crescere dei computer connessi, soprattutto in ARPANET, vennero sviluppati diversi standard per permettere lo scambio di mail tra utenti di sistemi differenti. SMTP nacque da questi standard durante gli anni 70.
Le radici di SMTP possono essere trovate in due implementazioni descritte nel 1971: il protocollo Mail Box, la cui implementazione è stata discussa, ma viene trattata in varie RFC tra cui la RFC 196, ed implementata nel programma SNDMSG che, secondo la RFC 2235, è stato inventato da Ray Tomlinson della BBN per essere utilizzato su computer TENEX al fine di inviare messaggi su ARPANET.
Ulteriori implementazioni includono FTP Mail e Mail Protocol, entrambe del 1973. Il lavoro di sviluppo continuò durante gli anni 70, finché, intorno al 1980, la rete ARPANET si trasformò nella moderna rete internet. Jon Postel propose un Mail Transfer Protocol nel 1980 che iniziò a rimuovere la dipendenza delle mail da FTP. SMTP venne pubblicato come RFC 788 nel novembre del 1981.
Agli inizi degli anni '80, SMTP divenne largamente utilizzato. A quell'epoca era un'estensione di UUCP (abbreviazione di Unix-to-Unix Copy Program, è una suite di programmi e protocolli che permettono l'esecuzione remota di comandi e il trasferimento di file ed email tra computer), che era più adatto a gestire il trasferimento di email tra computer connessi in maniera intermittente. SMTP tuttavia funziona meglio con mittente e destinatario sempre connessi alla rete. Entrambi utilizzano un meccanismo di store and forward e sono esempi di logica push.
Sendmail, rilasciato con 4.1cBSD, subito dopo la RFC 788, fu uno dei primi mail transfer agent ad implementare SMTP. Grazie al fatto che BSD Unix divenne il sistema operativo più diffuso su internet, sendmail diventò il mail transfer agent (mail server) più utilizzato. Altri SMTP server sono Postfix, qmail, Novell GroupWise, Exim, Novell NetMail, Microsoft Exchange Server e Oracle Communications Messagging Server.
La possibilità di inviare messaggi (RFC 2476) e SMTP-AUTH (RFC 2554) furono sviluppati nel 1998 e 1999, introducendo un nuovo trend nella consegna della email. Inizialmente, i server SMTP erano tipicamente all'interno di una organizzazione, ricevendo mail per l'organizzazione dall'esterno e consegnando messaggi dall'organizzazione per l'esterno. A causa della veloce espansione del World Wide Web, i server SMTP hanno dovuto inserire regole specifiche e metodi per consegnare email ed autenticare gli utenti per prevenire abusi come consegna di mail non richieste (spam). Il lavoro sull'invio dei messaggi (RFC 2476) fu sviluppato perché i più famosi mail server spesso sovrascrivevano la mail per sistemare i problemi contenuti in essa come, per esempio, aggiungendo il nome di dominio ad un indirizzo non specificato. Questo comportamento è desiderato quando il messaggio viene corretto mentre si trova in uno stato iniziale ma pericoloso e dannoso quando il messaggio è stato generato altrove e sta per essere trasmesso. Separare mail tra consegna e trasmissione è visto come un modo per permettere ed incoraggiare il rewriting submission e bloccare il rewriting relay. Questa separazione tra consegna e trasmissione divenne velocemente la base della sicurezza mail.
Essendo nato come puro protocollo ASCII text-based 7-bit, SMTP non gestiva bene i file binari e i caratteri non utilizzati nella lingua Inglese. Standard come Multipurpose Internet Mail Extension (MIME) furono sviluppati per codificare i file binari per il trasferimento tramite SMTP. I mail transfer agent (MTA) sviluppati dopo Sendmail tendevano ad essere implementati come 8-bit-clean così da poter trasmettere qualsiasi file di testo contenente dati (in una qualsiasi codifica 8-bit ASCII-like) attraverso SMTP. Oggigiorno gli 8-bit-clean MTA tendono a supportare l'estensione 8BITMIME, permettendo la facile trasmissione di file binari, come avviene per file di testo. Recentemente è stata sviluppata l'estensione SMTPUTF8 per permettere il supporto di testo con codifica UTF-8, garantendo lo scambio di messaggi in lingue come Cirillico e Cinese.
Molte persone contribuirono allo sviluppo delle specifiche SMTP, tra i quali Jon Postel, Eric Allman, Dave Crocker, Ned Freed, Randall Gellens, John Klensin e Keith Moore.
Modello di gestione delle mail Una mail è inviata da un client di posta (mail user agent, MUA) ad un server mail (mail submisson agent, MSA), usando SMTP attraverso TCP sulla porta 587. La maggior parte dei provider di posta tuttavia permettono ancora l'invio sulla tradizionale porta 25. L'MSA consegna la mail al mail transfer agent (MTA). Spesso MSA e MTA sono istanze dello stesso software, avviato con opzioni diverse sulla stessa macchina. Oltre che con un classico client, un account di posta in uscita con protocollo SMTP può essere configurato in qualsiasi applicazione software che possa inviare posta elettronica.
Il MTA utilizza il DNS per trovare il record MX di uno specifico dominio (la parte dell'indirizzo dopo il carattere @). Il record MX contiene il nome dell'host target. Basandosi sul nome dell'host e su altre informazioni, il MTA sceglie un server e si connette come SMTP client.
Il trasferimento di messaggi può avvenire in una singola connessione tra due MTA o attraverso una serie di salti attraverso diversi sistemi intermediari. Un server SMTP può essere destinatario del messaggio o intermediario (compiendo operazioni di store and forward) o gateway (può trasmettere il messaggio utilizzando anche altri protocolli, oltre a SMTP). Ogni salto è un trasferimento formale di responsabilità sul messaggio, per cui ciascun server che riceve il messaggio deve consegnarlo o segnalare un errore.
Una volta che il server destinatario accetta il messaggio in arrivo, lo consegna ad un mail delivery agent (MDA), che lo salva in una mailbox per la consegna locale.
Una volta consegnato al mail server, il messaggio è memorizzato per poter esser recuperato da un determinato mail client autenticato (MUAs). La mail è recuperata attraverso applicazioni sul dispositivo dell'utente, chiamate mail client, usando il protocollo Internet Message Access Protocol (IMAP), che facilita sia l'accesso alle mail sia gestisce le mail immagazzinate, o Post Office Protocol (POP) che tipicamente usa il tradizionale formato mbox per le mail, o un sistema proprietario come per esempio Microsoft Exchange/Outlook o Lotus Notes/Domino. I client Webmail possono utilizzare entrambi i modi ma il protocollo per il recupero solitamente non è un protocollo standard. POP3 e IMAP sono protocolli simili ma con alcune differenze sostanziali: POP3: il client mail si collega al server, scarica la posta in locale, cancella i messaggi scaricati dal server e si disconnette (è possibile comunque impostare alcuni parametri per evitare la cancellazione della mail dal server). Caratteristiche di questo protocollo: possibilità di avere i messaggi sempre salvati in locale quindi non è necessaria una connessione internet (ovviamente necessaria per invio e scaricamento dei nuovi messaggi) e risparmio di spazio sul server. IMAP: il client mail si collega al server, richiede i nuovi messaggi e li presenta all'utente salvandoli sotto forma di file temporanei (analogamente a POP3, è possibile salvare le mail in locale in maniera permanente). Qualsiasi modifica apportata ai messaggi viene riprodotta anche sul server e su qualsiasi altro dispositivo col quale si è effettuato l'accesso. Caratteristiche: posta salvata sul server quindi sempre reperibile da qualsiasi dispositivo tramite autenticazione, possibilità di recuperare la mail anche se un determinato dispositivo sul quale si consultano le mail smette di funzionare, risparmio spazio sul client.
SMTP definisce come viene trasmesso il messaggio, non il suo contenuto. Definisce la struttura e i suoi parametri, come l'envelope sender, ma non l'header (ad eccezione delle informazioni di tracciamento) o il corpo del messaggio stesso. STD 10 e RFC 5321 definiscono la struttura di SMTP mentre STD 11 e RFC 5322 definiscono il messaggio (header e body) attraverso un Internet Message Format.
Struttura del Protocollo SMTP è un protocollo connection oriented, text based, nel quale un mail sender comunica con un mail receiver inviando stringhe di comandi e fornendo le informazioni necessarie attraverso un canale di comunicazione affidabile, tipicamente basato su TCP. Una sessione SMTP consiste nello scambio di comandi generati da un client SMTP e le corrispettive risposte del server SMTP. Una sessione può includere zero o più transazioni SMTP. Una transazione SMTP consiste in tre sequenze di comandi e risposte: MAIL FROM: comando per definire l'indirizzo di ritorno, chiamato anche return-path, reverse-path, bounce address, mfrom o envelope sender.