Procmail – Filtrando correo

Una regla tiene un aspecto similar al siguiente esquema:

:0 [opciones] [ : ]
* condicion A
* condicion B
* condicion C
etc...
* condición N
comando a ejecutar

Tras cada :0 podemos utilizar las siguientes opciones:

  • Opción H -> La condición se comprobará en la cabecera del mensaje en curso (valor por defecto).
  • Opción B -> La condición se comprobará en el cuerpo del mensaje.
  • Opción D -> Hace la comprobación case sensitive, es decir, se distingue entre mayúsculas y minúsculas.
  • Opción i -> Ignorar cualquier error ocurrido en la regla.
  • Opción c -> crea un Carbon Copy, es decir, hace que la regla sea no terminal. Si existe una c en las opciones de la regla, tras finalizar el procesado de la misma se crea una copia del mensaje para que se puedan verificar más reglas.
  • Opciones w y W -> Espera a que se finalice la ejecución del comando de esa regla para poder recibir el código de salida del mismo. La opción W hace lo mismo que w pero en caso de ocurrir algún error no emite ningún mensaje sobre el mismo.
  • Opción f -> Hace a procmail actuar como un filtro. Esto quiere decir que tras ejecutarse las acciones pertinentes sobre el mensaje se generará un nuevo mensaje de salida que pasará por el resto de reglas del fichero. Esto sirve para modificar campos o valores de un email. Los filtros son, pues, otro tipo de reglas no terminales, pues tras modificar el mensaje seguimos haciéndolo pasar por el resto de reglas.
  • Opción h -> Hace que en un filtro sólo se filtre la cabecera (que la cabecera se pase al comando especificado).
  • Opción b -> Hace que en un filtro sólo se filtre el cuerpo o body (que sólo se le pase el cuerpo al comando).
  • Opción E y e-&t; Hace que se ejecute la regla sólo si la anterior regla no se ejecutó. En el caso de la e minúscula, sólo se ejecutará una regla si la que la precede en el fichero de reglas se intentó ejecutar pero produjo algún error.
  • Opción A y a-> Hace que se ejecute la regla sólo si la anterior regla se ejecutó. En el caso de la a minúscula, sólo se ejecutará una regla si la que la precede en el fichero de reglas se ejecutó sin producir errores.
  • Opción r -> Entrega el mensaje sin realizar correcciones ni comprobaciones

Las condiciones son propiamente la regla en sí, y en caso de que se cumplan se procederá a ejecutar el comando especificado pasándole el mensaje en función de las opciones que hubiesemos seleccionado (por defecto pasandole la cabecera y el cuerpo). Toda condición empieza por un símbolo ‘*’ y suelen estar constituidas por expresiones regulares (del tipo de grep, rgrep, etc.) que consisten en búsquedas de cadenas de carácteres en las diferentes partes del mensaje. En una expresión regular se utilizan los siguientes símbolos:

  • Símbolo ‘^’ -> Indica el comienzo de una línea.
  • Símbolo ‘$’ -> Indica el final de una línea.
  • Símbolo ‘*’ -> Indica cero o más veces.
  • Símbolo ‘?’ -> Indica cero o una vez.
  • Símbolo ‘+’ -> Indica una o más veces.
  • Símbolo ‘.’ -> Cualquier carácter excepto un \n (salto de línea).
  • Símbolo [a-z] -> Que quede en un rango de carácteres (primero-último).
  • Símbolo [^a-z] -> Que no quede en un rango de carácteres (primero-último).
  • Símbolo ‘|’ -> Permite especificar operación O ( a | b = ‘a’ o ‘b’ )

Al comienzo de la línea de condición tambien pueden existir opciones sobre esa condición:

  • Símbolo ‘<‘ -> Permite comprobar si el fichero tiene un tamaño menor al especificado.
  • Símbolo ‘>’ -> Permite comprobar si el fichero tiene un tamaño mayor al especificado.
  • Símbolo ‘!’ -> Invierte la condición (se cumplirá cuando la condición sea falsa).
  • Símbolo ‘$’ -> Realiza susticiones de variables en las expresiones regulares.
  • Símbolo ‘?’ -> Necesita el resultado que devuelve el programa especificado.

COMANDOS

Tras cada condición se especifica un comando para que sea ejecutado si la regla se cumple. Distinguimos principalmente cuatro comandos básicos:

1. Fichero: Hace que procmail añada el mensaje al final del fichero, con otros posibles mensajes.

2. Directorio: Hace que procmail guarde el mensaje en el directorio con un nombre propio no repetido.

3. !direccion@email.es: Mediante el carácter ‘!’ podemos enviar el mensaje a la dirección de correo especificada.

4. |programa: El carácter ‘|’ permite ejecutar un programa/comando de linux. La salida del programa saldrá por la salida estándar, aunque se puede redirigir a cualquier lado con el redireccionamiento estandar de linux (>/dev/null, >fichero, etc). También es posible asignar la salida del programa a una variable de entorno.

Deja un comentario