Simple Mail Transfer Protocol: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: Aggiungo template {{interprogetto}} (FAQ) |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. |
||
(10 versioni intermedie di 5 utenti non mostrate) | |||
Riga 1:
'''Simple Mail Transfer Protocol''' ('''SMTP''') è un [[Protocollo di comunicazione|protocollo standard]] per la trasmissione di [[Posta elettronica|email]]. Inizialmente proposto nella [[Request for Comments|RFC]] 788<ref name="RFC788">{{
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
La comunicazione tra i server mail utilizza il protocollo [[TCP/IP|TCP]] sulla porta 25<ref name="
È possibile rendere sicura una connessione SMTP con [[Transport Layer Security|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
== Descrizione ==
È un protocollo [[ASCII|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]]<ref>{{Cita web|url=https://www.port25.com/how-to-check-an-smtp-connection-with-a-manual-telnet-session-2/|titolo=Test comunicazione SMTP con telnet|accesso=4 gennaio 2018|dataarchivio=5 aprile 2017|urlarchivio=https://web.archive.org/web/20170405053531/http://www.port25.com/how-to-check-an-smtp-connection-with-a-manual-telnet-session-2/|urlmorto=sì}}</ref>. Il protocollo SMTP utilizza come protocollo di [[livello di trasporto]] [[Transmission Control Protocol|TCP]]. Il client apre una [[sessione]] TCP verso il server sulla [[porta (reti)|porta]] 25 (molti Provider per limitare lo spam utilizzano al suo posto la porta TCP 587 come previsto dalla RFC 2476 del
Poiché SMTP è un protocollo testuale basato sulla codifica [[ASCII]]<ref name="
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 [[Post Office Protocol|POP3]] (Post Office Protocol) e [[Internet Message Access Protocol|IMAP]] (Internet Message Access Protocol).
=== Storia ===
Negli anni
Le radici di SMTP possono essere trovate in due implementazioni descritte nel 1971: il protocollo Mail Box, la cui implementazione è stata discussa<ref>{{Cita web|url=http://www.multicians.org/thvv/mail-history.html|titolo=The History of Electronic Mail|lingua=en|accesso=2017-12-06}}</ref>, ma viene trattata in varie RFC tra cui la <nowiki>RFC 196</nowiki><ref>{{
Ulteriori implementazioni includono FTP Mail<ref>{{
Agli inizi degli anni
[[Sendmail]], rilasciato con [[Berkeley Software Distribution|4.1cBSD]], subito dopo la RFC 788, fu uno dei primi mail transfer agent ad implementare SMTP<ref>{{Cita web|url=https://docs.freebsd.org/44doc/smm/09.sendmail/paper.pdf|titolo=}}</ref>. Grazie al fatto che BSD [[Unix]] divenne il [[sistema operativo]] più diffuso su internet, sendmail diventò il [[Server di posta elettronica|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 (<nowiki>RFC 2476</nowiki><ref name="RFC2476">{{
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|lingua Inglese]]. Standard come Multipurpose Internet Mail Extension ([[Multipurpose Internet Mail Extensions|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
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 ([[Client di posta elettronica|mail user agent]], MUA) ad un server mail ([[Server di posta elettronica|mail submisson agent]], MSA), usando SMTP attraverso [[TCP/IP|TCP]] sulla porta 587. La maggior parte dei provider di posta tuttavia permettono ancora
Il MTA utilizza il [[Domain Name System|DNS]] per trovare il record MX di uno specifico dominio (la parte
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.
Riga 42:
Una volta che il server destinatario accetta il messaggio in arrivo, lo consegna ad un [[Mail Delivery Agent|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
* [[Post Office Protocol|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.
* [[Internet Message Access Protocol|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
== 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/IP|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:
# '''<code>MAIL FROM</code>''': comando per definire
# '''<code>RCPT TO</code>''': comando per definire il destinatario del messaggio. Questo comando può essere inviato più volte, una per ogni destinatario (gli indirizzi fanno parte della struttura (envelope)).
# '''<code>DATA</code>''': comando inviato per segnalare
Oltre alle risposte intermedie al comando '''<code>DATA</code>''', ogni risposta del server può essere positiva (caratterizzata dal codice 2xx) o negativa. Le risposte negative possono essere permanenti (5xx) o temporanee (4xx). Un rifiuto ('''reject''') rappresenta un fallimento permanente e il client dovrebbe inviare un bounce message al server dal quale ha ricevuto il messaggio. Un '''drop''' è una risposta positiva, seguita dal messaggio di rifiuto, invece che dal messaggio di avvenuta consegna.
Un server di trasmissione tipicamente determina quale è il server a cui si deve connettere attraverso il record MX (Mail eXchange) del [[DNS]] di ciascun dominio. Se non esiste nessun record MX, alcuni server controllano il record A. La differenza principale tra MTA e MSA consiste nel fatto che la connessione ad un MSA richiede un'[[autenticazione SMTP]]. La suddivisione tra MTA e MSA comporta diversi benefici:
* Il MSA, poiché interagisce direttamente con l'utente (attraverso il MUA), può correggere piccoli errori nel formato del messaggio (per esempio, data mancante, destinatario mancante, nome di dominio inesistente ecc). Un MTA che accetta un messaggio non può effettuare in maniera affidabile e sicura queste modifiche a qualsiasi modifica fatta dal MTA raggiunge il mittente del messaggio, dopo che il messaggio è già stato inviato.
* MSA e MTA possono avere diverse soluzioni per il blocco dello spam. La maggior parte dei MSA richiedono un'autenticazione tramite mail e [[password]] e quindi il mittente del messaggio può essere rintracciato. Questo permette al MSA di avere una politica meno stringente sullo spam. Vedi anche: [[message submission agent]].
=== Recupero Messaggi ===
Riga 65:
=== Inizializzazione Coda di Messaggi Remota ===
L'Inizializzazione di una coda di messaggi remota è una caratteristica di SMTP che permette ad un [[host]] remoto di iniziare il processamento della coda delle mail su un server, il quale può ricevere messaggi destinati ad esso inviando in comando '''<code>TURN</code>'''. Questa caratteristica tuttavia è stata giudicata insicura<ref name="
=== Internazionalizzazione ===
Utenti per i quali la lingua scritta non è basata sull'alfabeto [[Lingua latina|Latino]] o che usano simboli non contenuti nel set di caratteri [[ASCII]], possono aver problemi causati dal fatto che
== SMTP Server ==
Un [[client di posta elettronica]] necessita di conoscere
=== Restrizioni di Accesso ===
Gli amministratori dei server necessitano di imporre un qualche tipo di controllo riguardo quali client possono utilizzare il server, per permettere la gestione, per esempio, dello spam. Esistono due soluzioni utilizzate solitamente:
* In passato, molti sistemi imponevano restrizioni
* I moderni server SMTP offrono tipicamente un sistema alternativo che richiede
==== Restrizioni di Accesso Basate sulla Posizione ====
Al di sotto di questi sistemi, un [[Internet service provider|ISP]] non permette accesso al server SMTP da parte di utenti al di fuori della rete gestita dall'[[Internet service provider|ISP]] stesso. Più precisamente, il server potrebbe consentire solamente
Un server SMTP di una organizzazione potrebbe quindi fornire solamente servizi ad utenti sulla stessa rete, bloccando
Quando un utente è mobile, e potrebbe connettersi ad internet attraverso diversi ISP, questo tipo di restrizione di utilizzo è onerosa e la modifica
==== Client autentication ====
I moderni server SMTP solitamente richiedono
==== Open Relay ====
Un server accessibile su tutta la rete internet e che non adotta questi tipi di restrizioni per
==== Porte ====
La comunicazione tra mail server solitamente avviene attraverso [[TCP/IP|TCP]] sulla porta 25, anche se i [[Client mail|client di posta elettronica]] solitamente utilizzano un'altra porta. I servizi mail accettano di solito
* 587 (consegna), come standardizzato nella <nowiki>RFC 6409</nowiki><ref>{{
* 465 (consegna sicura). Originariamente assegnata al servizio [[secure SMTP]] nel 1990, poi deprecata dalla <nowiki>RFC 2487</nowiki><ref>{{
La porta 2525 e altre possono essere utilizzate da alcuni provider ma non sono ufficialmente supportate.
Molti [[Internet service provider|Internet Service Provider]] ora bloccano tutte le mail inviate dalla porta 25, come misura anti spam<ref>{{Cita web|url=https://www.pcworld.com/article/116843/article.html|titolo=ISPs Pitch In to Stop Spam|sito=PCWorld|lingua=en|accesso=2017-12-14|dataarchivio=19 agosto 2016|urlarchivio=https://web.archive.org/web/20160819051210/http://www.pcworld.com/article/116843/article.html|urlmorto=sì}}</ref> e consentono l'invio solamente dal server mail designato. Il provider così può controllare il traffico in uscita.
== Comandi SMTP ==
Riga 159:
L'inizio della trasmissione del testo della mail è identificata dal comando <code>DATA</code>, dopo il quale il testo è trasmesso linea per linea e termina con la sequenza <code><CR><LF>.<CR><LF></code>detta sequenza di ''end-of-data''. Poiché una linea può contenere solamente un punto (.) come parte del testo, il client manda ''due'' punti consecutivi ogni volta che una linea inizia con un punto. Analogamente il server sostituisce ogni sequenza di due punti consecutivi con uno solo (questa tecnica è chiamata ''dot-stuffing'').
La risposta positiva del server all{{'}}''end-of-data'' significa che il server si è preso in carico la consegna del messaggio. Un messaggio può essere duplicato se, in questa fase, avviene un problema di comunicazione, causato per esempio da un calo di corrente. Finché il mittente non riceve il messaggio con codice <code>250</code>, si suppone che il messaggio non sia stato consegnato. Analogamente dopo che il destinatario ha deciso di accettare il messaggio, il mittente assume che il messaggio sia stato consegnato. Tuttavia, durante questo arco di tempo (tempo che intercorre tra quando il messaggio è stato inviato a quando il client riceve la risposta caratterizzata dal codice 250), entrambi gli agent hanno copie attive di messaggi che tentano di consegnare<ref>{{
Il comando <code>QUIT</code> termina la sessione. Se la mail ha altri destinatari, il client si connetterà ad un opportuno server SMTP per i successivi destinatari. Le informazioni che il client invia coi comandi <code>HELO</code> e <code>MAIL FROM</code>, sono inserite (non mostrate nel codice di esempio) nella mail come campi ''header'' aggiuntivi, dal server destinatario, aggiungendo rispettivamente i campi ''Received'' e ''Return-Path''.
Alcuni client sono implementati in modo da chiudere la connessione dopo che il messaggio è stato accettato (
== Estensioni ==
Il client può scoprire quali opzioni supporta un server attraverso il messaggio <code>EHLO</code>, come mostrato in seguito, invece di inviare il tradizionale <code>HELO</code>. Il client ritorna ad un messaggio di <code>HELO</code> solo se il server non supporta le estensioni di SMTP.<ref
I moderni client possono usare la keyword <code>SIZE</code>, introdotta dall'estensione [[ESMTP]], per chiedere al server la dimensione massima del messaggio che viene accettato. In passato, c'era il rischio che client e server tentassero di trasferire messaggi troppo grandi, che sarebbero stati bloccati dopo aver utilizzato le risorse della rete tra cui il tempo di connessione<ref>{{Cita web|url=https://www.iana.org/assignments/mail-parameters/mail-parameters.txt|titolo=Parametri Mail}}</ref>.
Riga 180:
</pre>
Dalla risposta si evince che ''smtp2.example.com'' dichiara di accettare un messaggio massimo di dimensione fissata non maggiore di 14.680.064 ottetti (8-bit, byte). Tuttavia la dimensione massima del messaggio può variare a seconda
Nel caso più semplice, un server [[ESMTP]] dichiara una dimensione massima subito dopo la ricezione del comando di <code>EHLO</code>, anche se, secondo la <nowiki>RFC 1870</nowiki><ref>{{
== La sicurezza del protocollo SMTP ==
Riga 194:
== Gli standard RFC relativi ==
Pubblicato nel 2008, il RFC 5321
Inoltre, i seguenti RFC estendono le funzionalità del protocollo SMTP:
(in lingua originale)
* RFC 1123
* RFC 1870
* RFC 2505
* RFC 2920
* RFC 3030
* RFC 3207
* RFC 3461
* RFC 3463
* RFC 3464
* RFC 3798 - Message Disposition Notification
* RFC 3834
* RFC 4952
* RFC 4954
* RFC 5068
* RFC 5322
* RFC 5336 - SMTP Extension for Internationalized Email Addresses (aggiorna RFC 2821, RFC 2822, and RFC 4952)
* RFC 5504 - Downgrading Mechanism for Email Address Internationalization
* RFC 6409
* RFC 6522
* RFC 8314
(tradotti in italiano)
* {{cita web|http://www.rfc.altervista.org/rfctradotte.html|RFC 1869 - Estensioni del servizio SMTP (tradotta)}}
Riga 230:
== Altri progetti ==
{{interprogetto|preposizione=sul}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC}}
* {{Garzanti|SMTP}}
* {{cita web|lingua=en|url=https://www.cloudflare.com/learning/email-security/what-is-smtp/|titolo=What is the Simple Mail Transfer Protocol (SMTP)?|sito=[[Cloudflare]]|accesso=7 febbraio 2024}}
{{IPstack}}
|