Nel contesto delle applicazioni legate alla posta elettronica, si distinguono tre diversi tipologie:
MDA (Mail Delivery Agent) con il compito di consegnare la posta al destinatario, quando questa giunge sul sistema (e quando è generata sul sistema stesso)
MTA (Mail Transport Agent) con il compito di far sì che i messaggi giungano a destinazione (ossia fino al sistema sul quale è presente la casella di posta del destinatario)
MUA (Mail User Agent), il programma usato effettivamente dall'utente per gestire la propria corrispondenza elettronica
La comunicazione tra MTA avviene con il protocollo SMTP (Simple Mail Transfer Protocol). Molto spesso un MTA integra le funzioni di MDA.
Esempi noti di MTA:
La posta viene consegnata al sistema configurato come gestore della posta per un determinato dominio nei record MX (Mail eXchange) del DNS.
$ dig virgilio.it MX
; <<>> DiG 9.5.0-P2 <<>> virgilio.it MX
[snip]
;; QUESTION SECTION:
;virgilio.it. IN MX
;; ANSWER SECTION:
virgilio.it. 1447 IN MX 10 mxrm.virgilio.it.
Un MTA può essere configurato per tentare una consegna diretta dei messaggi, oppure per usare altri host specifici (seguendo apposite tabelle di routing dei messaggi), oppure ancora per affidarsi sempre ad un singolo smarthost (ad esempio, quello del provider).
Inoltre, l'MTA può essere configurato per rifiutare/respingere messaggi con determinati contenuti, riscrivere intestazioni, ecc.
È il programma con il quale l'utente (umano) interagisce effettivamente.
Permette di comporre messaggi e spedirli (tramite un MTA), di accedere alla posta locale e, in alcuni casi, di connettersi tramite protocollo POP3 o IMAP per la ricezione/visualizzazione dei messaggi.
Esempi noti di MUA:
I messaggi di posta elettronica possono essere anche composti e letti con il comando mail
.
Può capitare che il sistema di gestione della posta di un dominio non corrisponda ad una macchina della rete locale (casalinga o aziendale), ma che sia invece fuori (tipicamente, presso un provider).
In questo caso, è necessario recuperare la posta esternamente, direttamente con un MUA (se supporta questa funzionalità) o con un programma specifico, che può anche gestire caselle multidrop (l'idea è che la posta non viene scaricata dal MUA quando l'utente umano preme il pulsante "Scarica posta", ma ad intervalli regolari da un programma apposito, che la fa trovare "già scaricata" al MUA).
Può essere utile tenere in considerazione:
La posta in arrivo nella propria casella può essere gestita in maniera più o meno efficace e organizzata.
Il file ~/.forward permette di indicare:
In un sistema con un server di posta elettronica configurato e con degli utenti che lavorano in locale, la posta è in genere organizzata in questo modo:
mail
Altri programmi organizzano la posta in directory diverse:
I formati delle mailbox variano, ma in genere sono riconducibili ad uno dei seguenti standard:
From
<ctrl>-A
I MUA inoltre introducono spesso, per ottimizzare le prestazioni, dei file indice nascosti (.inbox.index, .inbox.index.ids, .inbox.index.sorted).
Inoltre, si deve tenere presente che con il formato maildir una cartella ne può contenere un'altra (e si avrà quindi anche .nomecartella.directory).
Procmail può essere invocato a livello di sistema (in combinazione con il MTA) oppure singolarmente dal singolo utente. Qui analizziamo il secondo caso.
Il file .forward dell'utente conterrà (le virgolette sono comprese):
"| exec /usr/bin/procmail"
Nella home directory dell'utente sarà poi presente il file di configurazione .procmailrc, che conterrà le regole da applicare ai messaggi in ingresso.
Il file è unico: qui viene mostrato in più parti per esigenze di organizzazione dello spazio.
Configurazione iniziale
PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/mail # assicurarsi che ci sia!
LOGFILE=$HOME/.procmail/log # molto utile
IMPURI=$HOME/impuri
METAMAIL_TMPDIR=$HOME/estratti
Poi si inizia con le diverse regole.
I messaggi con il subject indicato (espressione regolare) devono essere cestinati
:0
* ^Subject.*MAKE.*MONEY.*FAST
/dev/null
Tutti i messaggi che arrivano da Julie vanno nella mailbox indicata (che deve esistere)
:0
* ^From.*julie
$MAILDIR/julie
Tutti i messaggi che contengono la parola delivery vengono messi, ognuno in un file a sé stante, nella directory indicata
:0
* ^Subject.*delivery
$MAILDIR/delivery
I messaggi con contenuto in formato MIME vengono passati a gzip che li comprime aggiungendoli al file indicato. L'elaborazione continua con le regole successive (a causa del flag c
).
:0 c
* ^Content-Type
| gzip >> $IMPURI/impuri.gz
Tutti i messaggi che hanno julie nell'oggetto vengono rispediti a julie@localhost
:0 c
* ^Subject.*julie
! julie@localhost
Tutti i messaggi che contengono la parola 'allegato' vengono passati a metamail, che tramite variabile d'ambiente è informato di usare una directory specifica per i file temporanei
I flag BH
indicano di effettuare il test sia su body sia su head del messaggio I flag bh
indicano di passare all'elaborazione successiva sia il body sia lo head
:0 bhHB
* ^Subject.*allegato
| metamail -q -w -x
Il file di log generato da procmail può essere analizzato con il programma mailstat:
$ mailstat log
Total Number Folder
----- ------ ------
396 1 /dev/null
43453 2 gzip >> $IMPURI/impuri.gz
696 1 /home/loris/mail/delivery/
381 1 /home/loris/mail/julie
2638 2 /var/mail/loris
----- ------
47564 7
Permette di cancellare i messaggi prima di scaricarli da un server POP3.
Un esempio di file di configurazione:
LOGFILE=/home/john/.mailfilter/log
SERVER=popmail.qualcuno.net
USER=john
PASS=segretodipulcinella
PROTOCOL=pop3
PORT=110
DENY=^From:.marketing@example.com
SHOW_HEADERS=yes
VERBOSE=3
(Non pubblico)