7.3. File di regole (esempi)

=== file: general.rc ===

# backup di tutte le email in ingresso
# N.B.: se si vuole un backup compresso, sostituire con quanto segue, senza # iniziale
:0c:
|gzip -9fc >> .backup.gz
#:0c:
#.backup

# corregge possibili header from errati
:0fhw:
| $FORMAIL -I "From " -a "From "

# emimina i messaggi doppi, copiandoli per sicurezza in un file apposito
:0Whc:msgid.lock
| $FORMAIL -D 8192 $PMDIR/msgid.cache
:0a:
.duplicati

:0:
* ^TO_root
IN.admin

#correzione vecchi messaggi pgp
:0
* !^Content-Type: message/
* !^Content-Type: multipart/
* !^Content-Type: application/pgp
{
        :0 fBw
        * ^-----BEGIN PGP MESSAGE-----
        * ^-----END PGP MESSAGE-----
        | formail -i "Content-Type: application/pgp; format=text; x-action=encrypt"
 
        :0 fBw
        * ^-----BEGIN PGP SIGNED MESSAGE-----
        * ^-----BEGIN PGP SIGNATURE-----
        * ^-----END PGP SIGNATURE-----
        | formail -i "Content-Type: application/pgp; format=text; x-action=sign"
}

# corregge indicatori di firme errati (maledetto outlook...)
:0 fBw
* ^--$
| sed -e 's/^--$/-- /'

# corregge prefissi di risposta errati (sempre sia maledetto outlook...)
:0 fHw
* ^Subject:.*R:
| sed -e 's/R:/Re:/g'

# "impipa" a Little Brother DataBase per conservare
# gli indirizzi email di chiunque mi scriva
:0hc
| lbdb-fetchaddr
     

Nota: Il flag f permette di considerare la pipe seguente come un filtro; il flag h impone che siano inviati anche gli header in pipe; il flag w impedisce che il file di lock sia rilasciato fino a quando il comando in pipe non ha concluso il suo processo. Il flag c permette di far proseguire l'email attraverso il flusso delle regole successive. Quindi in questo caso, essendo la prima regola, TUTTE le email saranno copiate per backup nel file indicato, dopo di che continueranno ad attraversare le altre regole, fino a incontrarne un'altra che effettuerà un confronto positivo (eventualmente facendola proseguire anch'essa con un flag c), e quindi togliendola dal flusso, o finiranno nello spool principale nel caso contrario. Il flag W ha lo stesso comportamento di quello w, ma non invia messaggi di avvertimento sullo schermo ("Program Failure"). Infine il flag a, permette di eseguire un comando SOLO se la regola IMMEDIATAMENTE precedente ha avuto esito positivo (quindi in questo caso se viene trovato un messaggio doppio, viene accodato a ".duplicati"). La macro "TO_" viene spiegato tra poco. Le ultime regole correggono alcuni messaggi che potrebbero risultare errati (vecchi pgp, outlook...), e conservano gli indirizzi nell'archivi di LBDB, un programma che consente di raccogliere informazioni sui mittenti.

=== file: lists.rc ===

DUMMY=`test -d $MAILDIR/Lists || mkdir $MAILDIR/Lists`

:0:
* ^TO_procmail@informatik.rwth-aachen.de
Lists/ML-procmail

:0:
* ^TO_vim@vim.org
Lists/ML-vim-$DATE
     

Nota: TO_ è una macro predefinita di procmail che intercetta un indirizzo email fra gli header destinazione (To, Cc, Resent-To, ecc.). Va scritto ESATTAMENTE come lo vedete (* ^TO_indirizzo@email), rispettando spazi e maiuscole. Non inserite simboli < o >. Altre informazioni all'interno di man procmailrc.

Suggerimento: Inserite le regole per le mailing-list più trafficate all'inizio di lists.rc, in modo che i messaggi vengano elaborati prima e attraversino meno regole, velocizzando il processo.

Nota: Il secondo esempio invece suddivide le email anche in base a mese e anno (la variabile DATE è impostata in .procmailrc), il tutto in automatico (mese e anno sono quelli dello smistamento, NON dell'invio dagli autori alla mailing-list!) !

Le email da mailing-list finiscono in una directory apposita, che viene creata in automatico se non esiste.

=== file: spam.rc ===

:0:
* ^from.*qualche\.rompi\.balle@spamlandia\.com
/dev/null

:0:
* ^from.*sex
/dev/null

# free money? Ma andassero a cag**e...
:0
* ^Subject:.*\$\$\$
spam

# filtro tramite black-list
:0
* ? formail -x"From" -x"From:" -x"Sender:" -x"Reply-To:" -x"Return-Path:" -x"To:" | egrep -is -f $PMDIR/black.lst
spam

# email che non hanno me come destinatario
:0:
* !^TO .*(mrshark|fragola).*
spam

# X-Advertisement header = spam!
:0:
* ^X-Advertisement:.*
spam

# email indirizzate a nessuno!
:0:
* To:[ ]*$
spam

# header "To:" assente!
:0:
* !^To: .*
spam

# campi Message-ID vuoti di solito indicano mailserver
# fuori norma, spesso usati per inviare spam.
:0
* ^Message-ID.*<>
spam
     

Nota: Lo spam finisce dritto dritto nel nulla! Notate l'uso di \. per indicare il punto (ricordate che il punto da solo significa QUALSIASI CARATTERE, quindi anche il punto stesso, ma non fidatevi, potrebbe avere effetti non voluti). /dev/null è un buco nero di sistema (hai capito il pinguino! ;-) ) che disperde qualsiasi cosa ci finisca dentro. Il secondo esempio invece l'ho messo per far vedere che non è necessario mettere .* alla fine: è sottinteso, e in questo caso tutte le email che contengono la stringa sex vengono eliminate. La terza filtra i messaggi che contengono $$$ nel Subject:. Le ultime regole sono spiegate nella sezione seguente dei trucchetti.

Attenzione

I due file di regole spam.rc e spam2.rc sono attualmente alternativi! Infatti molte delle cose presenti nel primo file sono fatte anche da SpamBouncer, e per filtri specifici potete sempre usare la Black-List. Attivatene quindi un solo file in .procmailrc!

=== file: friends.rc ===

:0:
* ^from.*gino@pluto\.cxm
gino

:0:
* ^subject.*barzellett
{
  :0c:
  ! michele@yahoo.com
  :0:
  barzellette
}
     

Nota: Qui da notare l'uso delle parentesi graffe, che permettono di riunire comandi che devono agire su una stessa email. In questo caso di tutte le email che arrivano e che contengono la stringa barzellett (quindi sia barzelletta che barzellette) nel subject, ne viene generata una copia che viene inoltrata a michele@yahoo.com, dopo di che l'email finisce nella mailbox barzellette e la regola si conclude.