7.4. Usi avanzati e trucchetti

7.4.1. Gestione compatta delle Mailing List

Un grazie ad Aldo Maggi (Turms) per la prima regola seguente! ;-) Potete sostituire le regole nel file lists.rc con la sola regola seguente, elencando tra le () tutte le mailing list che avete sottoscritto, separandole con una pipe (|). Dovete inserire solo la parte dell'indirizzo email della ML che compare prima della @ nel campo From delle email che ricevete.

:0:
* ^TO_\/(debian-lists|pluto-linux|lugroma|cslug|erlug)@
* MATCH ?? ()\/[^@]+
Lists/ML-$MATCH
       

Se volete automatizzare ancora la gestione delle mailing list, potete usare al posto della regola precedente le seguenti, che cercano di intercettare gli header aggiuntivi che di solito vengono aggiunti dai gestori di ML. Questi sono quelli che ho trovato io, se per caso qualche email scappa a queste regole e finisce nella vostra mailbox di default, non dovete fare altro che vedere quale altro header usa il programma che gestisce la ML e aggiungere una nuova regola simile alle seguenti:

:0:
* ^X-Mailing-List-Name: \/[^@]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`

:0:
* ^Sender: owner-\/[^@]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`

:0:
* ^X-BeenThere: \/[^@]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`

:0:
* ^Delivered-To: mailing list \/[^@]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`

:0:
* ^X-Mailing-List: <\/[^@]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`

:0:
* ^X-Loop: \/[^@]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`

:0:
* ^X-List-ID: <\/[^@\.]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`

:0:
* ^X-list: \/[^@\.]+
Lists/`echo $MATCH | sed -e 's/[\/]/_/g'`
       

7.4.2. Salvataggio automatico degli allegati

La regola seguente salva tutti gli allegati delle email in entrata in una serie di sottodirectory di $MAILDIR/attach/: le sottodirectory sono create in base alla data, ma potete modificare molto semplicemente lo script per salvarle in altri modi. DATE è definita nello script .procmailrc principale. Per salvare TUTTI gli allegati, questa regola va messa in coda a general.rc La regola ha il flag c, quindi il messaggio poi procede normalmente attraverso le regole seguenti.

DUMMY=`test -d $MAILDIR/attach || mkdir $MAILDIR/attach`
DUMMY=`test -d $MAILDIR/attach/$DATE || mkdir $MAILDIR/attach/$DATE`
METAMAIL_TMPDIR=$MAILDIR/attach/$DATE
:0cbhHB:
| metamail -q -w -x
       

7.4.3. Risponditore automatico

Le regole seguenti creano dei risponditori automatici, che inviano una email precreata in risposta ad un'altra email con un subject fissato, evitando però di rispondere a mailing list o a messaggi provenienti da noi stessi, e inviando un unico messaggio per persona, anche in presenza di email multiple, usando una cache dei campi From.

La seconda regola invece invia in automatico un file (se volete sapere le novità dell'ultima versione del Quick&Easy Configuration HOWTO, mandatemi un'email con subject: "qechowto-update", senza le virgolette e con body vuoto, tanto non lo leggo, visto che vi sarà inviata una risposta automatica ;-) ), conservando comunque l'email in un file nascosto, per sapere chi richiede cosa...). L'ultima regola invia la vostra firma pubblica pgp a chi la richiede.

=== file: autoreply.rc ===

:0Whc: vacation.lock
* $^To:.*\<$\LOGNAME\>
* !^FROM_DAEMON
* !^X-Loop: tuo.indirizzo@di.email
| formail -rD 8192 vacation.cache
  :0ehc
  | (formail -rI"Precedence: junk" \
       -A"X-Loop: tuo.indirizzo@di.email" ; \
     echo "Ho ricevuto la tua email,"; \
     echo "ma non sarò a casa prima di lunedì."; \
     echo "-- "; cat $HOME/.signature \
    ) | $SENDMAIL -oi -t

:0
* !^From +TUO_USERNAME
* !^Subject:.*Re:
* !^FROM_DAEMON
* ^Subject:.*send-file
| (formail -r ; cat filename) | $SENDMAIL -oi -t
.richieste_file

# invia in automatico la chiave pubblica pgp a chi
# la richiede indicando nel Subject: "get pgp key"
:0
* !^Subject:.*Re:
* !^FROM_DAEMON
* ^Subject: get pgp key
| (/usr/bin/formail -r ; cat $HOME/.pgp_publickey) | $SENDMAIL -oi -t
.richieste_pgp
       

7.4.4. Processare via procmail una mailbox esistente

Se dovete/volete far processare una mailbox esistente secondo le regole che avete stabilito per procmail, potete usare il seguente script, preso dai docs ufficiali. Sostituite il percorso di ORGMAIL con quello del vostro effettivo spool o della mailbox da trattare.

#!/bin/sh
ORGMAIL=/var/spool/mail/$LOGNAME

if cd $HOME &&
  test -s $ORGMAIL &&
  lockfile -r0 -l1024 .newmail.lock 2>/dev/null
then
  trap "rm -f .newmail.lock" 1 2 3 13 15
  umask 077
  lockfile -l1024 -ml
  cat $ORGMAIL >>.newmail &&
  cat /dev/null >$ORGMAIL
  lockfile -mu
  formail -s procmail <.newmail &&
  rm -f .newmail
  rm -f .newmail.lock
fi
exit 0
       

oppure usare il semplice comando:

cat nome-file-mbox | formail -s procmail
       

7.4.5. Killing form Mutt

Questo tip è una semplificazione di quello presente in Linux Gazette N. 62. Le regole seguenti, insieme a 2 macro per mutt e a uno script perl, permettono di implementare velocemente un sistema di kill con una semplice combinazioni di tasti, in modo simile alla macro onekey-score.sl del newsreader slrn. Aggiungete queste 2 righe al file .muttrc nella vostra HOME:

macro index \ek "| formail -x From: | addysort >> ~/Mail/.Pm/black.lst\n"
macro pager \ek "| formail -x From: | addysort >> ~/Mail/.Pm/black.lst\n"
       

In questo modo, con un semplice <ESC> k aggiungerete il mittente dell'email attualmente visualizzata o evidenziata in mutt alla black-list, cioè un file che viene poi usato da procmail nelle volte successive per filtrare le email indesiderate, inviandole in una mailbox per lo spam o direttamente su /dev/null, a voi la scelta. Lo script perl addysort è il seguente (copiatelo in qualche directory compresa nel vostro $PATH, e rendetelo eseguibile con un chmod 755 addysort):

#!/usr/bin/perl -wn
# Estrae l'indirizzo email dall'attuale riga "From:"

unless (/\</) { print; } else { print /<([^>]+)/, "\n"; }
       

La regola che filtra tramite la black-list l'ho aggiunta al file spam.rc visto prima, quindi andate a leggerla direttamente in quella sezione, e in pratica confronta gli header che indicano la destinazione finale con i campi "From" contenuti nel file della black-list. Le ultime 5 regole del file spam.rc servono a intercettare altre possibili fonti di spam.

7.4.6. Correzione tipi MIME errati

La regola seguente preconverte le email testuali in arrivo, che dovessero essere in formato base64 o quoted-printed, in un più semplicemente gestibile formato 8bit.

:0
* ^Content-Type: *text/plain
{
  :0 fbw
  * ^Content-Transfer-Encoding: *quoted-printable
  | mimencode -u -q

    :0 Afhw
    | formail -I "Content-Transfer-Encoding: 8bit"

  :0 fbw
  * ^Content-Transfer-Encoding: *base64
  | mimencode -u -b

    :0 Afhw
    | formail -I "Content-Transfer-Encoding: 8bit"
}