Automatitzar la creació de carpetes per llistes de correu amb procmail

En aquest post trobareu una recepta molt útil per als que utilitzeu procmail per organitzar / filtrar el correu, el que fa és crear automàticament una carpeta dins del maildir del usuari cada cop que ens donem d’alta a una nova llista de correu, i posteriorment classificar tots els missatges procedents de la llista en aquesta nova carpeta. La carpeta rep automàticament el nom de la llista de correu.

Funciona amb quasi tots els gestors de llistes de correu que trobareu por ahi: mailman, majordomo, ezmlm,… i si amb algo no funciona és molt fàcil d’adaptar el filtre mirant les capçaleres del correu procedent de la llista. La gràcia que té és que no cal editar el .procmailrc cada cop que ens donem d’alta a una nova llista per classificar-la en una carpeta separada, amb aquest filtre tot s’organitza automàtic.

:0
* ^X-Mailing-List-Name: \/[^@]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^Sender: owner-\/[^@]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^X-BeenThere: \/[^@]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^Delivered-To: mailing list \/[^@]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^X-Mailing-List: < \/[^@]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^X-Loop: \/[^@]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^X-List-ID: <\/[^@\.]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^X-list: \/[^@\.]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/
	
:0
* ^Delivered-To: lista \/[^@]+
.list.`echo $MATCH | sed -e 's/[\/]/_/g'`/

El filtre té un “petit” problema si utilitzeu IMAP: Si us donen d’alta a una llista de correu sense avisar, no veureu els missatges ja que es col·locaran a una carpeta nova que no tindreu suscripció a través d’IMAP. Per sol·lucionar-ho jo utilitzo aquest scriptillo que llanço des d’un cron un cop al dia, per a que m’enviï un correu cada cop que rebo una llista nova:

#!/bin/sh
TMP=\"/home/pau/tmp\"
ls -a --color=\"no\" ~/.maildir/ |grep \"\.list\.\" |sed -e \"s/\.list\.//g\" |sort > ${TMP}/mailinglists2.txt
diff ${TMP}/mailinglists2.txt ${TMP}/mailinglists.txt > ${TMP}/mailinglists3.diff
if [ $? != 0 ]; then
        mail -s \"new mailing list!\" myemail@example.org < ${TMP}/mailinglists3.diff
        mv ${TMP}/mailinglists2.txt ${TMP}/mailinglists.txt
fi

Espero que li sigui útil a algú… :)

This entry was posted in linux. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>