SMTP
(Simple Mail Transfer Protocol)
Il protocollo SMTP, descritto nella RFC 821, è un protocollo ad alto livello, e quindi molto semplice, per la gestione della posta elettronica. Si intrappone tra l’utente e il server di posta e il suo funzionamento è alla base di tutte le e-mail che viaggiano nella rete, essendo un metodo standard, tutti i client di posta più diffusi lo utilizzano.
Questo protocollo è formato da semplici comandi che rappresentano un vero e proprio colloquio tra l’utente (o il client di posta per lui) e il server di posta (normalmente in ascolto sulla porta 25), vediamoli
in dettaglio :
HELO dominio.it – (Hello) E’ la presentazione al server al quale ci stiamo
collegando, dominio.it è il nome del nostro server;
feedback | |
250 dominio.it | Il server di posta risponde con un ok e il nome del nostro server |
421 dominio.it Service not available, closing transmission channel | Errore – Il servizio non è disponibile |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Failure reply | Errore – Errore di connessione |
504 Command parameter not implemented | Errore – Parametro del comando non implementato |
MAIL FROM:<mittente@server.it> – (Mail) Questo
comando indica al server di posta che siamo intenzionati a spedire un messaggio,
il campo mittente@server.it è l’indirizzo di posta di chi stà
inviando il messaggio;
feedback | |
250 OK | Il mittente è stato accettato |
421 dominio.it Service not available, closing transmission channel | Errore – Servizio non disponibile, viene interrotta la connessione |
451 Requested action aborted: error in processing | Errore – Errore nel processo |
452 Requested action not taken: insufficient system storage | Errore – La richiesta non può essere esaudita per spazio di archiviazione insufficiente |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
552 Requested mail action aborted: exceeded storage allocation | Errore – Superato il limite di spazio di archiviazione disponibile |
RCPT TO:<destinatario@server.it> – (Recipient)
Indica al server che vogliamo spedire il messaggio all’indirizzo destinatario@server.it,
questo campo può essere ripetuto più volte qualora il messaggio
debba essere inviato a più destinatari;
feedback | |
250 OK | Il destinatario esiste ed è stato accettato |
251 User not local; will forward to <forward@server.it> | Il destinatario non è presente, ma siccome è conosciuto l’email verrà inoltrata al indirizzo forward@server.it, serve ad avvisare il mittente che la prossima volta può utilizzare il nuovo indirizzo |
421 dominio.it Service not available, closing transmission channel | Errore – Il servizio non è disponibile |
450 Requested mail action not taken: mailbox unavailable | Errore – La casella richiesta è al momento non disponibile |
451 Requested action aborted: error in processing | Errore – Errore nel processo |
452 Requested action not taken: insufficient system storage | Errore – La richiesta non può essere esaudita per spazio di archiviazione insufficiente |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
503 Bad sequence of commands | Errore – Errore nella sequenza dei comandi |
550 Failure reply | Il destinatario non è presente nel server e quindi il messaggio non può essere inviato |
551 User not local; please try <forward@server.it> | Il destinatario non è presente, l’indirizzo dove può essere trovato e forward@server.it, ma l’email non verrà inoltrata, dovrà essere cura del mittente inviarla al nuovo indirizzo |
552 Requested mail action aborted: exceeded storage allocation | Errore – Superato il limite di spazio di archiviazione disponibile |
553 Requested action not taken: mailbox name not allowed | Errore – Il nome fornito non è permesso |
DATA – (Data) Con questo comando diciamo al server che tutto ciò
che verrà scritto in seguito sarà il corpo dell’e-mail, cioè
il messaggio vero e proprio, per terminare il blocco di testo da inviare,
è necessario inserire <CRLF>.<CRLF> (un invio, un punto
e un altro invio);
feedback | |
250 OK | Il messaggio è stato recepito correttamente (al termine del invio del messaggio dopo il <CRLF>.<CRLF> |
354 Intermediate reply | Dopo aver inserito il comando data, il server indica con questo messaggio che è in attesa del corpo del messaggio. |
421 dominio.it Service not available, closing transmission channel | Errore – Il servizio non è disponibile |
451 Requested action aborted: error in processing | Errore – Errore nel processo |
452 Requested action not taken: insufficient system storage | Errore – La richiesta non può essere esaudita per spazio di archiviazione insufficiente |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
503 Bad sequence of commands | Errore – Errore nella sequenza dei comandi |
552 Requested mail action aborted: exceeded storage allocation | Errore – Superato il limite di spazio di archiviazione disponibile |
554 Transaction failed | Errore – Fallimento |
VRFY Nome – (Verify) Verifica se il nome inserito
è presente nel server a cui è stata formulata la richiesta,
in caso affermativo viene fornita l’e-mail;
feedback | |
250 Nome Cognome <email@server.it> | Al nome richiesto corrisponde l’indirizzo email@server.it |
251 User not local; will forward to <email@server.it> | Il nome esiste, ma è in un altro server con l’indirizzo email@server.it |
421 dominio.it Service not available, closing transmission channel | Errore – Il servizio non è disponibile |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
502 Command not implemented | Errore – Comando non implementato |
504 Command parameter not implemented | Errore – Parametro del comando non implementato |
550 String does not match anything | Il nome richiesto non è presente in questo server |
551 User not local; please try <email@server.it> | Il nome esiste, ma è in un altro server con l’indirizzo email@server.it |
553 User ambiguous | Esistono più utenti simili al nome fornito |
EXPN Gruppo – (Expand) Chiede che vengano elencati
tutti gli appartenenti al gruppo richiesto, se il gruppo esiste vengono forniti
i nomi e i relativi indirizzi e-mail;
feedback | |
250 Nome1 Cognome1 <email1@server.it> 250 Nome2 Cognome2 <email2@server.it> | Elenco dei componenti del gruppo richiesto con relative e-mail |
421 dominio.it Service not available, closing transmission channel | Errore – Il servizio non è disponibile |
550 Access Denied to You | Non si ha il permesso di visualizzare i componenti del gruppo richiesto |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
502 Command not implemented | Errore – Comando non implementato |
504 Command parameter not implemented | Errore – Parametro del comando non implementato |
SEND FROM:<mittente@server.it> – (Send) Indica che vogliamo mandare un messaggio che dovrà
essere inoltrato solo se l’utente con email specificata è attivo in quel
momento e accetta messaggi terminale, utilizzato quindi come una rudimentale
chat;
feedback | |
250 OK | Il comando è stato accettato |
421 dominio.it Service not available, closing transmission channel | Errore – Servizio non disponibile, viene interrotta la connessione |
451 Requested action aborted: error in processing | Errore – Errore nel processo |
452 Requested action not taken: insufficient system storage | Errore – La richiesta non può essere esaudita per spazio di archiviazione insufficiente |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
502 Command not implemented | Errore – Comando non implementato |
552 Requested mail action aborted: exceeded storage allocation | Errore – Superato il limite di spazio di archiviazione disponibile |
SOML
FROM:<mittente@server.it> – (Send or Mail) E’
simile al comando Send, solo che in questo caso qualora l’utente non fosse attivo,
il messaggio verrebbe postato come una normale mail;
feedback | |
250 OK | Il comando è stato accettato |
421 dominio.it Service not available, closing transmission channel | Errore – Servizio non disponibile, viene interrotta la connessione |
451 Requested action aborted: error in processing | Errore – Errore nel processo |
452 Requested action not taken: insufficient system storage | Errore – La richiesta non può essere esaudita per spazio di archiviazione insufficiente |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
502 Command not implemented | Errore – Comando non implementato |
552 Requested mail action aborted: exceeded storage allocation | Errore – Superato il limite di spazio di archiviazione disponibile |
SAML FROM:<mittente@server.it> – (Send and Mail) Invia il messaggio all’utente attivo, in ogni caso
viene anche postato il messaggio come una normale mail;
feedback | |
250 OK | Il comando è stato accettato |
421 dominio.it Service not available, closing transmission channel | Errore – Servizio non disponibile, viene interrotta la connessione |
451 Requested action aborted: error in processing | Errore – Errore nel processo |
452 Requested action not taken: insufficient system storage | Errore – La richiesta non può essere esaudita per spazio di archiviazione insufficiente |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
502 Command not implemented | Errore – Comando non implementato |
552 Requested mail action aborted: exceeded storage allocation | Errore – Superato il limite di spazio di archiviazione disponibile |
RSET – (Reset) Cancella i comandi precedentemente inviati ritornando allo stato di semplice collegamento;
feedback | |
250 Nome1 Cognome1 <email1@server.it> 250 Nome2 Cognome2 <email2@server.it> | Elenco dei componenti del gruppo richiesto con relative e-mail |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
504 Command parameter not implemented | Errore – Parametro del comando non implementato |
550 Access Denied to You | Non si ha il permesso di visualizzare i componenti del gruppo richiesto |
HELP [Command] – (Help) Senza nessun comando visualizza
la lista dei comandi, con il comando ne spiega la funzione e l’utilizzo;
feedback | |
211 System status, or system help reply | Informazioni sul comando richiesto |
214 Help message | Informazioni sui comandi |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
501 Syntax error in parameters or arguments | Errore – Errore di sintassi o nei parametri |
502 Command not implemented | Errore – Comando non implementato |
504 Command parameter not implemented | Errore – Parametro del comando non implementato |
NOOP – (No Operation) Mantiene la connessione attiva,
non eseguendo però alcuna operazione;
feedback | |
250 OK | Messaggio accettato |
421 dominio.it Service not available, closing transmission channel | Errore – Servizio non disponibile, viene interrotta la connessione |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
TURN – (Turn) Questo comando inverte le parti tra client
e server, se il client invierà tale comando diventerà server e
il server client, se il server invierà tale comando diventerà
client e il client server, può essere rifiutato;
feedback | |
250 OK | Comando accettato |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
502 NO | Comando non accettato |
503 Bad sequence of commands | Errore – Errore nella sequenza dei comandi |
QUIT – Termina la connessione attiva con il
server.
feedback | |
221 dominio.it Service closing transmission channel | Conferma la chiusura |
500 Syntax error, command unrecognized | Errore – Il comando è sconosciuto |
Elencati i comandi vediamo un semplice dialogo per l’invio di una mail:
Server: | 220 server.it Simple Mail Transfer Service Ready |
Client: | HELO client.it |
Server: | 250 server.it |
Client: | MAIL FROM:<mail@client.it> |
Server: | 250 OK |
Client: | RCPT TO:<mail@server.it> |
Server: | 250 OK |
Client: | RCPT TO:<nomail@server.it> |
Server: | 550 No such user here |
Client: | DATA |
Server: | 354 Start mail input; end with <CRLF>.<CRLF> |
Client: | Corpo del messaggio |
Client: | . |
Server: | 250 OK |
Client: | QUIT |
Server: | 221 server.it Service closing transmission channel |
In questo modo è stato mandato il messaggio “Corpo del messaggio”
dal mittente mail@client.it ai destinatari mail@server.it e nomail@server.it,
ma il secondo destinatario è sconosciuto dal sistema, quindi verrà
inoltrato solo al primo.
Nel corpo del messaggio è possibile mettere del testo
formattato in HTML o dei campi particolari quali Subject: o To: che spesso i
client capiscono ed interpretano visualizzandoli poi in appositi campi all’utente.