Filtrar los mensajes de la bulmailing con procmail


Puesto que es una pregunta recurrente en la bulmailing,
a sugerencia de Ricardo,
he decidido escribir este mini truco para filtrar el correo de la
lista con procmail y guardarlo separado
del resto de nuestro correo en un buzón aparte.

Actualización: añadidas, a petición popular, algunas reglas típicas.

Primero de todo, esto no es ni pretende ser un tutorial de procmail ni nada que se le aproxime
mínimamente, para éso estan las excelentes y completísimas páginas man que no
debería dejar de leer ningún usuario de procmail:

man procmail

man procmailrc

man procmailex

Ojo: Los enlaces anteriores son konqueror pagüered 😉

Procmail soporta tanto mbox como maildir, pero los ejemplos están puestos todos con mbox; como comentaba tcb más abajo, para maildir hay que poner un / al final del nombre del buzón, pero ojo que tambien hay que quitar el : de después del 0 (porque con maildir ya no hay que manejar lockfiles).

La regla de filtrado:

Para que los mensajes de la bulmailing vayan a parar al buzón
IN.bulma pondremos la siguiente regla en nuestro ~/.procmailrc:

:0:

* ^X-BeenThere:.*bulmailing@bulma\.net

IN.bulma

o bien la siguiente (una de las dos):

:0:

* ^List-Id:.*<bulmailing\.bulma\.net>

IN.bulma

Todo esto son cabeceras smtp que añade el gestor de la lista (mailman en este caso) a todos los mensajes que
pasan por ella.

¿Y no es más sencillo filtrar por el tag [bulma] del asunto?

No es mas sencillo, y además está mal. Porque si alguien nos contesta en privado a un mensaje de la lista, lo más probable es que lleve el tag ése en el asunto; y entonces lo filtraremos al buzón de la lista sin darnos cuenta de que realmente no lo es.

¿Y para probarla?

Si coincide que ponemos la susodicha regla un dia de poco tráfico (o nuestra
impaciencia para testearla es superior al tráfico de la lista en ese momento);
la tentación inicial seria mandar un mensaje con asunto prueba no
leer
para ver si se ejecuta correctamente. Si hacemos una prueba,
probablemente nadie se enfadará, pero a la segunda o tercera, la probabilidad de
molestar a alguien crece significativamente. Y tampoco es plan andar
incordiando a cientos de personas con nuestras pruebas.

El truco que yo utilizo es el siguiente:

Generar un fichero mbox con un mensaje cualquiera de la lista (esto es
importante: sólo uno). Llamémosle p.mbox.
Entonces tenemos varias opciones (2 de ellas sugeridas por
thibaut):

  a) cat p.mbox | /usr/sbin/sendmail -oi miusuario@localhost

  b) cat p.mbox | formail -ds procmail

  c) cat p.mbox | procmail

A tener en cuenta:

1.- a) sólo funcionará si tenemos un smtp correctamente
configurado en nuestro sistema

2.- a) y c) sólo funcionaran si en p.mbox hay un y
sólo un mensaje. b) sirve si hay más (aunque mejor probar de uno en uno,
¿no?)

3.- contrariamente a lo que pueda parecer, a) no requiere tener sendmail instalado (cualquier mta suele proporcionar un /usr/sbin/sendmail compatible).

Necesito un mensaje que no venga de la lista y nadie me quiere! :’-(

Tranquilo!, Calimero. Manda un mensaje a [email protected] y un señor que
tienen contratado y que sólo hace éso, responder a esos mensajes, te contestará
enseguida (es bastante rápido). Pero, no te pases, me han dicho que
tiene una paciencia limitada y si abusas del servicio a lo mejor se enfada
contigo.

Anexo 1 para nota (para los suscritos a cientos de listas):

Si estás suscrito a muchas (pero muchas) listas y no quieres poner una regla para cada una de ellas, puedes
usar la siguiente (propuesta por thibaut) que es genérica:

:0:

* ^List-Id:[^<]*<\/[^>]+

$LISTAS/ALL/$MATCH

Anexo 2 (algunas reglas típicas):

Muchas de ellas aparecen tal cual en el man procmailex, pero bueno, aquí van:

Mover el correo que spamassassin ha marcado como spam al buzón in.spam:

:0:

* ^X-Spam-Flag: YES

in.spam

Para más información sobre las reglas completas para el spamassassin, ver el fichero de Debian /usr/share/doc/spamassassin/procmailrc.example (para otras distros, YMMV).

Separar los correos provenientes de algunos remitentes concretos:

:0:

* ^From:.*(webmaster.*@barrapunto.com|schneier@counterpane\.com|webmaster@daviscup\.com)

IN.newsletters

Borrar los mensajes del gusanito swen (esto es más indicado para nuestro servidor de correo, en el caso de que dispongamos de procmail en él):

:0 B

* > 65536

* ^TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$

* ^AAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v$

/dev/null

Separar los mensajes duplicados por Message-ID (si estamos suscritos a varias listas y la gente hace crossposting entre ellas recibiremos varias copias de un mismo mensaje, así se separan los repes):

:0 Whc: .msgid.lock

| formail -D 16384 .msgid.cache

:0 a:

IN.duplicates

Separar los mensajes dirigidos a una dirección determinada (esto sólo funcionara si la dirección destinataria aparece en las cabeceras del mensaje, cosa que no sucede siempre):

:0:

* ^TO_.*spamtrap@midominio\.net

in.spamtrap

Separar los mensajes con tamaño mayor de 256 KBytes (otra regla apropiada para el servidor y menos útil en el pc donde leemos el correo):

:0:

* > 262144

IN.muygrandes

Filtrar los mensajes de remitentes no deseados (aka. trolls):

:0:

* ? formail -x”From:” -x”From” -x”Sender:” | egrep -is -f $HOME/.blacklist.txt

in.trolls

y en $HOME/.blacklist.txt pondríamos las direcciones de correo de dichos trolls. OJO: una por linea y sin lineas en blanco (o lo filtrará absolutamente todo).

Bueno, de momento esto es todo. Si se me ocurre algo interesante más (o si
alguien lo sugiere) ya lo pondré.

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1965 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.