Fetchmail y procmail: ¡desgarga y filtra tu correo ya!

Fetchmail es una utilidad diseñada por ESR para recoger el correo de servidores remotos (pop3, imap, ...) mientras que procmail es un programa que filtra todos estos correos entrantes según unas reglas que podemos definir.

En primer lugar, debemos tener configurado un sistema de correo local. Sendmail, postfix, exim, qmail... todos son buenas alternativas para hacer esto :-)

Recoger correo : fetchmail

El primer paso es definir una serie de cuentas de las que fetchmail deberá recoger los correos. Es necesario editar el fichero $HOME/.fetchmailrc y poner entradas del tipo:

poll pop3.servidor.com protocol pop3
    user USUARIOREMOTO with pass "secreto" is USUARIOLOCAL here

Lanzando fetchmail desde la línea de comandos, hará que éste lea el fichero de configuraciones y pase a bajar todos los correos en cada uno de los servidores, inyectandolos en el sistema de correo local. Según distribuciones, el correo suele ir a /var/spool/mail/USUARIO ó /var/mail/USUARIO, siendo ya accesible por cualquier cliente de correo.

NOTA: algunos clientes de correo tienen la costumbre de mover el correo una vez leido o accedido a $HOME/mbox. Esto puede ser algo engorroso cuando no se usa siempre el mismo cliente de correo, algo a tener en cuenta :-)

TRUCO:Puede ser que tengamos contratado un hosting/housing para un determinado dominio, pero que nos interese hacer el reparto y filtrado de forma local (menos cuentas pop, menos gastos). Para ello fetchmail permite inyectar los correos entrantes en el sistema de correo. Para todo esto, nuestro MTA debe aceptar correo para el dominio requerido (en este caso, maquina.dom-local.com y dom-externo.es):

poll pop.isp-externo.com proto pop3
    localdomains maquina.dom-local.com dom-externo.es
    user USUARIOEXTERNO with pass "secreto" is * fetchall

Descargamos el correo con:

$ fetchmail --envelope X-Envelope-To

Filtrar correo : procmail

Llegados a este punto, desearemos filtrar los correos entrantes . Para ello, debemos editar $HOME/.procmailrc añadiendo los filtros que sean necesarios.

NOTA:Según nuestra configuración de /etc/procmailrc, puede ser necesario que cada usuario llame a procmail de forma discrecional, editando $HOME/.fordward con una línea como esta:

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #USUARIO"

Las reglas de filtrado están en $HOME/.procmailrc

En este caso, vamos a ver un par de reglas de filtrado simples, aunque en los links recomendados se ve cómo hacer cosas más complejas. Las reglas están formadas por, al menos, 3 líneas. La primera de ellas alude a qué parte del mensaje se ha de aplicar, la segunda es similar una expresion regular, que si se cumple, dará lugar a que el correo se almacene en el fichero al que se refiere la tercera línea. Ejemplo:

:0:
* From.*pepe@example.com
mail/correo_de_pepe

Con esto nos serviría, por ejemplo, para poder filtrar el correo de una lista de correo :-)