Posta elettronica

Loris Tissino

16 luglio 2009

MTA, MDA e MUA

Nel contesto delle applicazioni legate alla posta elettronica, si distinguono tre diversi tipologie:

Mail Transport Agent

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:

Configurazione di un 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.

Mail User Agent

È 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.

Mail retrieval

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:

Mail management

La posta in arrivo nella propria casella può essere gestita in maniera più o meno efficace e organizzata.

Il file ~/.forward permette di indicare:

Organizzazione delle cartelle di posta elettronica

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:

Altri programmi organizzano la posta in directory diverse:

Formati delle mailbox

I formati delle mailbox variano, ma in genere sono riconducibili ad uno dei seguenti standard:

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

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.

Esempio di .procmailrc (1)

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

Esempio di .procmailrc (2)

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

Esempio di .procmailrc (3)

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

Esempio di .procmailrc (4)

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

File di log di procmail

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

Mailfilter

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

Esempio di script per estrarre gli allegati

(Non pubblico)