Procmail è il programma che si occupa di smistare in diverse caselle le email che arrivano dai vostri account pop o direttamente dal sistema. È forse il più complicato tra i programmi che dovrete configurare per la gestione della vostra posta elettronica. Prima di tutto alcune precisazioni su alcune convenzioni che uso: le caselle che contengono email in entrata io le chiamo per comodità IN-qualchecosa, mentre quelle in uscita sono ovviamente OUT-qualcosaltro, e le mailing-lists con ML-ancoraqualcosa. I nomi di file sono interamente in minuscolo, mentre le directory iniziano con una lettera Maiuscola. I file accessori di .procmailrc finiscono con ".rc". Per mia comodità tengo di solito i file di configurazione ausiliari nelle directory di pertinenza del servizio, quindi i file richiamati da .procmailrc sono in $HOME/Mail/.Pm (mentre i file di Mutt sono in $HOME/Mail/.Mutt, i file di Slrn sono in $HOME/News/.Slrn, ecc). Il punto iniziale delle directory serve per nasconderle mentre sfoglio i miei spool con mutt o slrn, per mail e news. Per sicurezza TUTTA la posta in arrivo viene accodata in un file di backup (mostrerò anche come mantenere questo file in formato compresso gzip, per ridurre gli sprechi di spazi), verranno estratte dal flusso in ingresso le email provenienti da persone conosciute (per riinviarle in un file apposito), e quelle provenienti da mailing list (inviate in file univoci per ciascuna), lasciando le email rimanenti nello spool principale.
Il file di configurazione di Procmail (.procmailrc, nella vostra directory HOME) è suddiviso in due parti distinte: la prima è la configurazione vera e propria del programma, con variabili e path vari; la seconda invece è fatta dall'insieme delle regole che permettono di smistare la posta nei diversi file mailbox. In particolare, per la seconda parte, è più comodo suddividere le regole in file distinti (da includere nel file principale con la direttiva INCLUDERC), in base al loro uso: ad esempio un file con le regole per le mailing-list, un file per le email da amici, un file per lo spam, e così via. Questa comunque è la strada seguito nel Quick&Easy Configuration HOWTO. Procmail processa messaggi nell'ordine in cui sono scritte le regole, all'interno del file .procmailrc o nei file in esso inclusi, e se non trova alcuna regola adatta accoda il messaggio allo spool principale (ecco perché, senza alcun file .procmailrc, i messaggi finiscono in /var/spool/mail/nomeutente, in genere mailbox di default di un sistema Linux). Le regole di procmail sono composte da espressioni regolari (la sintassi è nella sezione apposita), e possono essere divise in tre parti:
una linea di inizio (con possibili flag), :0, seguito da una serie di flags che ne indicano il comportamento (alcune vengono spiegate nel seguito, le altre possono essere trovate in man procmailrc). Il secondo ":" indica che si vuole usare un lockfile sulla mailbox durante il processo, in modo da prevenire una possibile corruzione della stessa in caso di accesso contemporaneo da altri programmi (pensate alla possibile cancellazione di un messaggio con il vostro client mail mentre la mailbox è in fase di elaborazione da procmail). Dopo il ":" si può indicare un nome per il file di lock, altrimenti verrà generato in automatico da procmail.
una o più condizioni, identificate da * come primo carattere
una linea di smistamento, che può essere un file, una directory o una linea che inizia con | (pipe), che permette di inviare il messaggio in input ad un programma esterno per una qualche elaborazione, o ancora una linea che inizia per !, che permette di inviare una copia del messaggio a ciascun indirizzo email indicato dopo il !. Altre possibilità sono elencate in man procmailrc.