miércoles, 4 de septiembre de 2013

procmail en el nilo


Todo el mundo cree que su configuración es casi jeroglífica y están en lo cierto. Ahora les mostraré una traducción romanizada del .procmailrc usado por el faraón Tutancamón. No no no no serio, les explicaré lo poquito que aprendí de procmail cacharreando y comiéndome los man Sin internet. Veremos solamente lo básico para no desbordarle el cerebro.

fetchmail y la mayoría de los MTA entregan a través de procmail. En este ejemplo, pasamos por alto el MTA y le damos el correo a procmail directamente; pero más adelante veremos como operar nuestro propio MTA. Tengamos en cuenta que todo entra por estandar input. Veamos como se las arreglaba Tutancamon para distribuir sus correos en unix.

$ cat .procmailrc

MAILDIR=$HOME/Mail
DEFAULT=/var/mail/$USER
VERBOSE=off

:0
* ^From:.princesa@rio_nilo.eg
jevita

Aquí de configuramos en las tres primeras lineas lo necesario para que funcione en "~/Mail" y la magia empieza en el jeroglifico ":0"

Eso es un numero cero con dos puntos y si ponemos ":0:" le decimos que bloquee el fichero de arribo para por si alguien lo modifica por el camino, osea, evita que dos aplicaciones escriban en el mismo fichero.
Yo no lo uso. Bueno, veamos lo demás:

* ^From:.princesa@rio_nilo.eg

Eso es "*" Compara "^" lo que empieze de "From:" palante ".princesa@rio_nilo.eg" note el punto delante de la dirección; quiere decir que machee lo que tenga delante para no contar el nombre real y guiarte por la dirección de correo así por ejemplo si el header de la dirección dice.

   From: "Pantera del Desierto" <princesa@rio_nilo.eg>

Procmail usará esa expresión egrep(por si no lo a notado) y macheara la dirección de correo sin importar lo que tenga.

Luego en la siguiente linea dice solamente

jevita

Guao! Que ruta tan simple. Es que ya declaramos la variable $MAILDIR y eso lo hace una ruta relativa que el programa la interpreta como una ruta absoluta conjugada con la vairable $MAILDIR.

Yo para ponerle la tapa al pomo, creo un link entre los "inboxes"

ln -s /var/mail/inbox /hom/tutancamon/Mail/inbox

Así el inbox del home y el de /var/mail son la misma cosa. Pero acá hay un detalle curioso y es que procmail es capaz de entregar en cualquier formato (decente) de correo. Si pusiéramos:

jevita/

Con el "/" al final. Entregaríamos en un "Maildir" bajo "~/Mail/".

Aprovechemos para hablar un poquito sobre los "maildir"

Maildir es el formato de "qmail". Muy bueno para grandes cantidad de correos muy rápido. Su escritura y lectura es mas rápido porque es de uno en uno. También dicen que es más seguro pero no dicen en que
sentido o porqué es más seguro, así que... no creo que sea más seguro. Las explicaciones que dan usualmente hablan de mayor rendimiento pero no de seguridad como tal. El Maildir organiza los correos tendiendo dentro 3 subdirectorios: "cur","new","tmp" El directorio "cur" almacena los correos leídos, el directorio "new" los nuevos y el "tmp" los que están siendo escritos, evitando así el uso de locks. Cada correo será siempre un fichero separado en la carpeta new o cur, ideal para cuando desarrollo aplicaciones de correo y no quiera lidiar con el formato mbox.

Pero volviendo con procmail... En el caso que pusiéramos:

jevita/.

Con un "/." entonces entregaríamos en formato "MH" que es el que usan algunos clientes muy viejos pero es otro buen sustituto del mbox principalmente cuando son muchos correos. De todas formas le recomiendo
más "Maildir" que "MH", ya que mh tiene TODO el correo (nuevo y viejo) en un mismo directorio, usando un fichero de control para ver cual es nuevo o viejo. Dicho fichero varía según el cliente y suele dar unos
bateos horribles.

Por último:

jevita

Entrega en formato crudo porque si confiamos en que será un mbox... no se mi procmail que fue descargado y compilado supuestamente última vesión y el formato mbox no pincha bien. Mas bien tira los correos
crudos uno atrás del otro en un fichero. Para corregir ese "palo" yo pongo esta regla primero que ninguna.

:0fw
| formail

Formail es un programa que manipula los encabezados del correo. Veamos un ejemplo típico de formail manipulando encabezados:

| formail -I "From: Fulano <direccion@dominio.org>"

Esto le insertará y/o remplazará el encabezado from. Digamos que desea marcar todos los hilos nuevos de un lista y que dichos correos lleguen a su carpeta filtrada con la marca flag puesta. Aquí formail es la herramienta definitiva.Digamos que la lista se llama gutl-l@jovenclub.cu:

Nuestro procmailrc se vería así:

:0fw # resalta los nuevos correos en gutl
* X-BeenThere: gutl-l@jovenclub.cu
* !^Subject.*(Re:|Fw:)
|formail -I 'X-Status: F'


Osea que todo lo que NO tenga Re o Fw en el asunto es un nuevo hilo, ya solo es cuestión de mirar la carpeta donde filtra la lista y verá los nuevos hilos con la flag puesta. El como se ven, depende mucho de
su cliente de correo.

Bueno y como filtral una lista? Pues mailman tiene el encabezado X-BeenThere: donde va la dirección de la lista, así que:

:0 # gutl-l la lista de cuba
* X-BeenThere: gutl-l@jovenclub.cu
gutl-l

Con eso tienen una breve noción de procmail, lo demás es "creatividad"

No hay comentarios:

Publicar un comentario

Si vas a decir groserias, aclara el significado para los que no somos de tu mismo país.