Maria Garcia Suarez, a las 15:30 del mi�rcoles 16 abr 2003, coment�:
> Hola!
> 
> Siguiendo la recomendacion de la gente de la lista
> (gracias!) me he mirado (e he instalado) procmail.

Estoy seguro que los consejos acerca de instalar procmail ten�a la mejor
intenci�n, pero vistos los resultados dudo mucho que fueran acertados.

Procmail es una potente herramienta para filtrar y clasificar correo,
pero en manos inexpertas es la forma m�s f�cil de que �ste se pierda (o
que se acumule sin control). Es el doble filo de cualquier herramienta.

Vamos por partes:

> He creado el directorio ~HOME/.procmail
> 
> Alli he creado el fichero ~HOME/.procmail/.procmailrc
> con el siguiente contenido:

Primer punto; yo no lo llamar�a .procmailrc, para evitar confusiones con
el ~/.procmailrc y evitar problemas, ya que aunque est� en otro
directorio, si se mueve al $HOME sin pensar y el sistema est�
configurado para usar cualquier ~/.procmailrc que encuentre entonces si
puedes perder correo. Llam�mosle pues "filtro.rc".

Ahora es evidente lo que ocurre: al ejecutar "formail -s procmail <mbox",
procmail intenta leer el ~/.procmailrc, que no existe, y env�a otra vez
el correo al spool...

> VERBOSE=on
> MAILDIR=$HOME
> PMDIR=$HOME/.procmail
> DEFAULT=/var/spool/mail/maria
> LOGFILE=$PMDIR/procmail.log
> INCLUDERC=$PMDIR/general.rc

Con esto en filtro.rc, despu�s de procesar las recetas en general.rc, el
procmail deposita cualquier correo no enviado a un buz�n (en este caso
TODOS, puesto que las condiciones de las recetas est�n mal escritas) en
el buz�n por omisi�n ($DEFAULT), como si existiese la siguiente receta
impl�cita al final:

  :0:
  $DEFAULT

Esa es otra raz�n para que el /var/spool/mail/$USER ($DEFAULT) crezca
sin control. Por tanto, y para este caso, al final de tu filtro.rc pon
(repito que �nicamente para este caso concreto):

  :0
  /dev/null

Ten en cuenta de que el correo no desaparece del spool (o el fichero de
entrada que leas), sino simplemente es descartado por este filtro.

Otra cosa. Mira el "$PMDIR/procmail.log". Estoy convencido que ahora
mismo te est� ocupando bastantes megas in�tilmente, debido al
"VERBOSE=on", que es �til para depurar fallos, pero aqu� lo �nico que se
consigue es consumir m�s espacio de disco, puesto que ni siquiera podr�s
entender lo que registra. As� que b�rralo sin problemas, y cambia lo
siguiente:

  VERBOSE=no
  LOGABSTRACT=all

Con eso te registrar� en $LOGFILE la cabecera de cada correo y el buz�n
al que lo env�a (o el filtro/comando que lo procesa). Eso ser� m�s que
suficiente para ver donde termina el correo que intentas filtrar. El
resto puede quedarse como est� para este caso. Aunque yo recomendar�a
crear un directorio Mail (� mail), y poner "MAILDIR=$HOME/Mail", para
no correr el riesgo de que coincida el nombre de un buz�n con el de
alg�n fichero que tengas en tu $HOME.

Vamos con el $PMDIR/general.rc
Dado que ahora en $DEFAULT tienes los correos duplicados, lo primero es
poner una receta que filtre dichos duplicados:

  :0 hW: $MAILDIR/msgid.cache$LOCKEXT
  |formail -D 100000 $MAILDIR/msgid.cache

Esta receta (casi tomada literalmente del man de procmailex) crea una
cache con las cabeceras Message-Id: de cada correo, eliminando aquellos
que coinciden con alguna de las guardadas en la cache. He puesto un
tama�o relativamente alto (100K) para este caso, pero seg�n el n�mero de
correos que tengas en el spool puede que necesites incluso algo m�s
grande. Calcula que cada msgid ocupa unos 50 bytes, multiplica por el
n�mero de correos (aprox.) y por 2 (para dar margen) y pon esa cifra.

Ahora las recetas. Por cada direcci�n de correo que quieras separar en
un buz�n diferente, pon lo siguiente:

  :0:
  * ^TOlista-de-correoN
  lista-de-correoN

Al final de todas las recetas, pon una que recoja todas las que no
coincidan (si no coincide ninguna, todos los correos ir�n aqu�, salvo
los duplicados):

  :0:
  lista-desconocida

Si te fijas, con esta receta, la de arriba que descartaba el correo
(envi�ndolo a /dev/null) en ning�n caso ser�a alcanzada... salvo que
cambiemos el nombre a general.rc y no cambiemos el $INCLUDERC, o
viceversa.

Ahora ya puedes ejecutar:

  $ formail -ds procmail ~/.procmail/filtro.rc </var/spool/mail/$USER

Examina el correo en los buzones creados, mira que todo ha funcionado
correctamente ojeando el $LOGFILE, y ya puedes borrar tanto el $LOGFILE
como el spool (usa ">/var/spool/mail/$USER").

Me he referido siempre al spool (/var/mail/spool/$USER) pero esto
tambi�n lo puedes aplicar a tu "~/mbox"; eso ya depende de lo que
quieras hacer, de c�mo tengas configurada la recogida de correo, etc.

Y no te preocupes en perder correo si algo va mal; este estar� siempre
en el spool o en ~/mbox, y en el peor de los casos lo que har�as es
duplicarlo, como de echo ya te ha ocurrido.

Si necesitas unas recetas un poco m�s elaboradas (por ejemplo, filtrar
por fechas, origen, lo que sea) h�znoslo saber y te echar�/echaremos una
mano.

Saludos

        MS

Responder a