Files
learning/networking/030-smtp.md
2025-06-23 20:56:39 +02:00

54 lines
4.0 KiB
Markdown

# Simple Mail Transfer Protocol
`SMTP` è un protocollo utilizzato per l'invio di email. Basato sul protocollo di trasmissione TCP, garantisce una comunicazione affidabile.
SMTP può operare su diverse porte:
- `25`: questa è la porta standard per SMTP. È utilizzata per l'invio di email senza crittografia, il che significa che le informazioni vengono trasmesse in chiaro. Per questo motivo, l'uso della porta 25 è spesso limitato o bloccato dai provider di servizi Internet per prevenire abusi e spam
- `465`: questa porta è utilizzata per `SMTPS` (SMTP Secure), che implementa la crittografia tramite `TLS` (Transport Layer Security)
- `587`: questa porta è utilizzata per SMTP con il comando `STARTTLS`, che consente di avviare una connessione sicura utilizzando TLS. Inizialmente, la connessione avviene in chiaro, ma può essere successivamente crittografata
## Comandi SMTP
SMTP è un protocollo basato su comandi e codici di risposta, similmente a HTTP. Utilizza vari comandi per gestire l'invio delle email e fornisce codici di stato come feedback per indicare il risultato delle operazioni.
- `HELP`: quando un client invia questo comando, il server risponde fornendo un elenco dei comandi supportati
- `HELO`: inviato dal client per l'autoidentificazione. Questo comando è solitamente accompagnato da un indirizzo email o nome di dominio che identifica il mittente
- `MAIL FROM`: seguito da un indirizzo email, questo comando identifica l'effettivo mittente del messaggio
- `RCPT TO`: utilizzato per specificare uno o più indirizzi email che rappresentano i destinatari del messaggio
- `DATA`: questo comando indica al server che il client è pronto a inviare il corpo del messaggio. Il server risponde con il codice 354, `Enter message, ending with '.' on a line by itself`. Questo significa che il client può inviare il messaggio e che il server considererà la trasmissione terminata quando riceverà un punto su una riga da solo
- `QUIT`: inviato dal client per terminare la comunicazione con il server. Il server risponde con il codice 221, confermando la chiusura della connessione
- `AUTH LOGIN`: comando utilizzato dal client per l'autenticazione sul server SMTP. Se l'autenticazione ha successo, il server risponde con il codice 235, indicando *Authentication successful*
![smtp-commands](asset/img/smtp-commands.png)
## Codici di risposta SMTP
I codici di risposta SMTP sono suddivisi in cinque categorie principali:
- `1XX`: *risposte informative*. Sono molto rari e non vengono utilizzati frequentemente
- `2XX`: *comando eseguito con successo*. Alcuni esempi comuni includono:
- `250`: comando eseguito con successo
- `235`: autenticazione riuscita
- `221`: il server sta chiudendo la connessione
- `3XX`: questi codici indicano che *il server richiede ulteriori informazioni* al client per completare la richiesta. Ad esempio:
- `334`: il server chiede le credenziali per l'autenticazione
- `354`: il server è pronto a ricevere i dati della mail (comando DATA)
- `4XX`: *errori temporanei*, che possono essere risolti con un nuovo tentativo. Alcuni esempi includono:
- `421`: il server chiude la connessione per sovraccarico o manutenzione
- `450`: la casella di posta del destinatario non è disponibile
- `451`: errore del server
- `452`: troppe mail inviate in poco tempo
- `5XX`: *errori permanenti*.
- `500`: errore di sintassi di un comando smtp
- `501`: parametri errati
- `503`: sequenza di comandi errata
- `504`: comando non supportato dal server
- `550`: indirizzo email del destinatario inesistente
- `552`: casella del destinatario piena
- `554`: il server rifiuta il messaggio, classificandolo come spam o phishing
## MIME
`MIME`, acronimo di *Multipurpose Internet Mail Extensions*, è uno standard che amplia le funzionalità del protocollo SMTP, permettendo l'invio di contenuti più complessi via email. Supporta caratteri non ASCII, inclusi caratteri accentati e simboli di diverse lingue. Inoltre, consente di allegare file di vari tipi, come immagini, audio, video e documenti, e di inviare email in formato HTML.