Como filtrar mensajes de correo en un servidor IMAP

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Creación)
 
m (Descripción: mejorando enlace a la app)
Línea 2: Línea 2:
 
Los actuales clientes de correo incluyen entre sus funcionalidades el filtrado de los mensajes atendiendo a diversos parámetros configurables por quien los usa. De este modo se pueden clasificar y priorizar mejor la correspondencia.
 
Los actuales clientes de correo incluyen entre sus funcionalidades el filtrado de los mensajes atendiendo a diversos parámetros configurables por quien los usa. De este modo se pueden clasificar y priorizar mejor la correspondencia.
 
Pero en situaciones de gran movilidad es dificil mantener coordinados dichos filtros entre diferentes equipos (trabajo, casa, cibercafes, ...).
 
Pero en situaciones de gran movilidad es dificil mantener coordinados dichos filtros entre diferentes equipos (trabajo, casa, cibercafes, ...).
En esta y otras situaciones podemos usar una herramienta llamada [[IMAPFilter]].
+
En esta y otras situaciones podemos usar una herramienta llamada [[imapfilter | IMAPFilter]].
 +
 
 
=Requisitos=
 
=Requisitos=
 
Unicamente es necesario disponer del programa IMAPfilter (no necesariamente en el servidor de correo IMAP).
 
Unicamente es necesario disponer del programa IMAPfilter (no necesariamente en el servidor de correo IMAP).

Revisión de 18:52 28 sep 2009

Contenido

Descripción

Los actuales clientes de correo incluyen entre sus funcionalidades el filtrado de los mensajes atendiendo a diversos parámetros configurables por quien los usa. De este modo se pueden clasificar y priorizar mejor la correspondencia. Pero en situaciones de gran movilidad es dificil mantener coordinados dichos filtros entre diferentes equipos (trabajo, casa, cibercafes, ...). En esta y otras situaciones podemos usar una herramienta llamada IMAPFilter.

Requisitos

Unicamente es necesario disponer del programa IMAPfilter (no necesariamente en el servidor de correo IMAP). Este tutorial se ha probado contra un servidor IMAP configurado siguiendo el tutorial Virtual Users And Domains With Postfix, Courier, MySQL And SquirrelMail (Ubuntu 9.04). Es posible que con otros tipos de servidores sean necesarios algunos reajustes.

Proceso

Instalación

En los repositorios de Jaunty se encuentra la aplicación IMAPFilter, de modo que deberemos teclear en una terminal:

sudo aptitude install imapfilter

O instalar desde el gestor de paquetes Synaptic dicha aplicación.

Configuración

La configuración solo precisa de la creación de un archivo que incluira las opciones generales, las opciones de cada cuenta de correo que queramos gestionar y los filtros a aplicar en la cuenta o cuentas. El programa buscara este fichero llamado config.lua dentro de la carpeta oculta .imapfilter, que a su vez se encontrara en la carpeta del usuario o usuaria en cuestión. De modo que podemos empezar creando dicha carpeta para nuestro usuario.

  • En terminal:
mkdir ~/.imapfilter

Y continuaremos editando dicho fichero con nuestro editor de texto preferido y cambiando sus permisos para que nadie pueda leer las contraseñas de las cuentas de correo:

  • En terminal:
nano .imapfilter/config.lua && chmod go-rwx .imapfilter/config.lua
gedit .imapfilter/config.lua && chmod go-rwx .imapfilter/config.lua

Lo único un poco complicado es la sintaxis de este fichero, y en realidad tampoco lo es tanto. Esta basada en el lenguaje de programación LUA y esta muy bien descrita (en ingles) en la documentación del programa.

Opciones generales

Las opciones generales van precedidas del texto options. y para empezar mostrare un ejemplo:

options.create = true
options.close = true
options.subscribe = true

Esto indica al programa:

  1. options.create que al escribir un mensaje en una carpeta no existe la cree.
  2. options.close que se cierre la carpeta en uso al terminar las operaciones, lo que implica que se eliminen los mensajes marcados como eliminados en ese momento.
  3. options.subscribe implica que las carpetas creadas automaticamente seán suscritas (visibles).

En la documentación se explicán el resto de opciones que enumero: create,close,crammd5,expunge,info,namespace,starttls,subscribe,timeout

Configuración de las cuentas

Para configurar cada cuenta de correo usaremos la funcion IMAP() del siguiente modo:

cuenta1 = IMAP {
 server = 'imap.servidor.com',
 port = 993,
 username = 'yo',
 password = 'secreto',
 ssl = 'ssl3'
}
  1. La linea server indica el nombre del servidor IMAP.
  2. La linea port indica el puerto usado para conectar al servidor IMAP (143 para IMAP y 993 para IMAPS).
  3. La linea username indica nuestro nombre de usuario en el servidor IMAP.
  4. La linea password indica la clave de nuestra cuenta en el servidor IMAP.
  5. La linea ssl indica que se usara una conexion segura (IMAPS) y el protocolo a usar ssl2 , ssl3 , tls1.

Configuración de los filtros

Y aqui entramos en lo unico un poco mas complicado. Como decia antes, este archivo de configuración se escribe siguiendo las normas del lenguaje de programación LUA y por tanto es preciso tener algunos conocimientos básicos de programación para perfeccionar este archivo, pero para ayudar existen los multiples ejemplos que se proveen en la documentación. Así que nada mejor que mostrar algunos y sus resultados.

Buscando mensajes

  • Obtener mensajes (despues veremos que podemos hacer con estos mensajes) no vistos y con un remitente especifico
no_vistos_de_spam = cuenta1.INBOX:is_unseen() *
 cuenta1.INBOX:contain_from('@spam.com')

Aqui podemos ver que pedimos una lista de mensajes de la bandeja de entrada (INBOX) que coincidan con dos condiciones.

  1. Que no hayan sido vistos por el usuario (is_unseen).
  2. Que el remitente contenga el texto @spam (contain_from).

El simbolo * indica el operador Y (AND) que le dice a IMAPFilter que deben cumplirse las dos condiciones.

  • Obtener mensajes que provengan de un determinado remitente y que su asunto no sea uno determinado:
de_pepe_no_urgentes = cuenta1.INBOX:contain_from('pepe@servidor.com') -
 cuenta1.INBOX:contain_subject('urgente')

En este caso el simbolo - indica el operador NO (NOT) que le dice al programa que se debe cumplir la primera y que no se debe cumplir la segunda condición.

Haciendo cosas con los mensajes

Ahora deberemos indicar al programa que hacer con estos mensajes que ha localizado para nosotros y de nuevo un par de ejemplos comunes.

  • Eliminar mensajes:
cuenta1.INBOX:delete_messages(no_vistos_de_spam)

Aqui le decimos que elimine mensajes de la cuenta cuenta1 y el listado de mensajes exacto es el que indicamos previamente con el nombre no_vistos_de_spam.

  • Mover mensajes a una carpeta determinada:
cuenta1.INBOX:move_messages(cuenta1['De Pepe/No urgente'],de_pepe_no_urgentes)

En este ejemplo moveremos los mensajes que indicamos con el listado de_pepe_no_urgentes a la carpeta No urgente que esta dentro de la carpeta De Pepe.

Preparando su ejecución programada

Ahora es necesario que se ejecute el programa IMAPFilter para que apliquen nuestros filtros. Lo haremos con la opcion debug (-d)) para obtener información extra de lo que sucede y hace el programa.

imapfilter -d

Esto aplicara por primera vez los filtros, pero para que se ejecuten repetidamente deberemos crear una tarea programada que lo realice por nosotros. Dicha tarea programada la debera realizar el mismo usuario del sistema que es propietario del archivo de configuración. Así que en una terminal pondremos el siguiente comando:

crontab -e

Si es la primera vez que usamos crontab nos preguntara por el editor de textos que queremos usar. En mi caso me decante por la opcion 3, nano. Una vez tengamos abierto el archivo de configuración de las tareas programadas agregaremos la siguiente linea:

0,10,20,30,40,50 * * * * /usr/bin/imapfilter

La opción -d es mejor eliminarla para no recibir mas información pero si tienes dudas, usala aqui tambien para poder controlar que hizo el programa con tus mensajes y asi depurar tus filtros.

A tener en cuenta

  • Los textos con simbolos especiales como tildes, eñes, etc. Pueden aparecer en nuestro programa de correo de una manera y el servidor entenderlos de otra. Aconsejo que mires el codigo fuente del mensaje primero para asegurarte de como aparece el texto allí o usar las palabras o trozos de palabras que no contengan dichos simbolos. Por ejemplo: El mensaje pone Información sobre las españolas, pues escribe el filtro:
infoespa = cuenta1.INBOX:contain_subject('Informaci') +
 cuenta1.INBOX:contain_subject('sobre las espa)

Referencias

Herramientas personales