Cómo funcionan los filtros
Módulo 6: Automático: filtros y ausencia · Tiempo de lectura: 10 minutos
Objetivo de aprendizaje: Después de esta lección podrá explicar dónde y cuándo se ejecutan los filtros, leer un script de filtros en Sieve y predecir en qué carpeta acaba un mensaje entrante.
Conceptos clave: filtro, Sieve, ManageSieve, conjunto de filtros, regla, condición, acción, conservación implícita, stop, contiene, es igual a, coincide con la expresión
Los filtros se ejecutan en el servidor
Un filtro ordena su correo automáticamente: los mensajes con "factuur" (factura) en el asunto van a la carpeta Facturen (Facturas) y los boletines, a una carpeta propia. Lo más importante que debe saber es que esa clasificación no ocurre en el webmail, sino en el servidor de correo, en el momento en que un mensaje se entrega en su buzón.
De ahí se derivan tres cosas:
- Los filtros funcionan aunque el webmail esté cerrado. Su portátil puede estar apagado. El teléfono ve el correo directamente en la carpeta correcta.
- Los filtros solo actúan sobre el correo nuevo. El correo que ya está en su buzón se queda donde está. Si crea hoy un filtro, tendrá que mover usted mismo los mensajes antiguos.
- Los filtros se aplican a un solo buzón. Cada buzón tiene sus propios filtros. Si quiere configurar algo para todos los buzones de su dominio, como bloquear a un remitente, hágalo en el panel de administración de su alojamiento.
Los filtros están escritos en Sieve, un lenguaje sencillo pensado específicamente para filtrar correo (RFC 5228). El servidor de correo de WebOké utiliza Dovecot con Pigeonhole, la implementación de Sieve de Dovecot. El webmail convierte las opciones que usted elige en el formulario en un script Sieve y lo envía al servidor mediante el protocolo ManageSieve (RFC 5804). No necesita escribir Sieve, pero quien sabe leerlo entiende exactamente qué hacen sus filtros.
Conjunto de filtros, reglas, condiciones y acciones
Un conjunto de filtros es el script completo: todos los filtros de su buzón en un solo archivo. Puede tener varios conjuntos de filtros, pero siempre hay solo uno activo.
Dentro del conjunto de filtros están los filtros, que en el webmail también se llaman reglas. Cada filtro tiene:
- un nombre, solo para usted;
- un ámbito: el mensaje debe cumplir todas las reglas, una de las reglas, o el filtro se aplica a todos los mensajes;
- una o varias condiciones: dónde mira el filtro (asunto, remitente, otra cabecera), cómo compara y con qué texto;
- una o varias acciones: qué ocurre si se cumplen las condiciones.
Hay tres formas de comparar:
| En el webmail | En Sieve | Significado |
|---|---|---|
| contiene | :contains | el texto aparece en algún lugar de la cabecera |
| es igual a | :is | la cabecera es exactamente este texto |
| coincide con la expresión | :matches | patrón con * (cero o más caracteres) y ? (exactamente un carácter) |
En las tres, las mayúsculas y minúsculas no importan. Sieve compara de forma predeterminada con la regla i;ascii-casemap, que trata igual las mayúsculas y las minúsculas. Así, "factuur" también encuentra "FACTUUR" y "Factuur".
Así es un conjunto de filtros
En el webmail puede ver el conjunto de filtros como texto con Filtros > Acciones > Editar conjunto de filtros. Un ejemplo tal como lo escribe el webmail:
require ["fileinto"];
# rule:[Nieuwsbrieven]
if exists "List-Id"
{
fileinto "Nieuwsbrieven";
stop;
}
# rule:[Facturen]
if allof (header :contains "subject" "factuur")
{
fileinto "Facturen";
}
# rule:[Collega Daan]
if false # header :contains "from" "daan@example.com"
{
fileinto "INBOX.Team";
}Línea por línea:
require ["fileinto"];pide al servidor la extensión necesaria para mover a una carpeta. El webmail la coloca al principio por sí mismo, junto con todas las extensiones que usa el script.# rule:[Nieuwsbrieven]es un comentario. Con él, el webmail reconoce el nombre de su filtro. El servidor se salta esta línea.if exists "List-Id"es la condición: el mensaje tiene una cabecera List-Id. Los boletines y las listas de correo la tienen (RFC 2919).fileinto "Nieuwsbrieven";mueve el mensaje a la carpeta Nieuwsbrieven (Boletines). El nombre de la carpeta es el nombre completo en el servidor, con el punto como separador (lección 5.1). Por tanto, una carpeta bajo Entrada se llamaINBOX.Team.stop;detiene todo el script. Los filtros siguientes ya no examinan este mensaje. En el webmail, esta acción se llama Parar de evaluar reglas.if false # ...es un filtro desactivado. Si desmarca Filtro activado, el webmail convierte la condición enfalse: nunca se cumple. La condición antigua se conserva como comentario, para que pueda volver a activarla más adelante.

De arriba abajo
El servidor lee el script de arriba abajo y examina cada filtro. Para ello se aplican tres reglas.
1. Sin ninguna acción, el mensaje se queda en Entrada. Sieve conoce la conservación implícita (implicit keep, RFC 5228, sección 2.10.2): si ningún filtro hace nada, el mensaje llega sin más a Entrada.
2. Tras un traslado, el mensaje no está además en Entrada. Un fileinto desactiva esa conservación implícita. El mensaje llega a la carpeta elegida y no también a Entrada. Si quiere tenerlo en ambos sitios, use Copiar mensaje a.
3. Sin stop, los filtros siguientes también miran. Si falta stop, el servidor continúa con el filtro siguiente. Si ese filtro también coincide, el servidor ejecuta también esa acción. Dos traslados a dos carpetas significan que el mensaje acaba en ambas carpetas. Con stop decide el primer filtro que coincida.
Por eso importa el orden. En el ejemplo anterior, Nieuwsbrieven está por encima de Facturen y tiene un stop. Un boletín con "Je factuur" (Su factura) en el asunto va, por tanto, a Nieuwsbrieven y no a Facturen. Si invierte el orden, ese mismo boletín acaba en Facturen, porque ese filtro no tiene stop y ahora va primero. El boletín incluso estaría en ambas carpetas. Por eso, coloque los filtros más específicos arriba y deles un stop.
Recorrer un mensaje: así lo predice
Tome un mensaje y recorra el script como lo hace el servidor:
- Empiece por el primer filtro. ¿Está desactivado (
if false)? Sálteselo. - ¿Se cumple la condición? Fíjese exactamente en la cabecera:
subjectes el asunto,fromel remitente con nombre y dirección,toel destinatario. - Si se cumple: ejecute las acciones. Si aparece
stop, ha terminado. - Si no se cumple, o no hay stop: pase al filtro siguiente.
- Al final: si ningún filtro ha movido ni eliminado el mensaje, este está en Entrada (
INBOX).
Con estos cinco pasos puede leer cualquier script, aunque sea largo.
En la práctica: así funciona en el webmail
Los filtros se encuentran en Configuración > Filtros. La lista muestra sus filtros en el orden en que el servidor los ejecuta; puede arrastrarlos para cambiar el orden. En Acciones está Editar conjunto de filtros: ahí ve y modifica el script como texto. Los pasos para crear un filtro nuevo están en el manual de Roundcube, en Crear un filtro. En otros webmails funciona de forma parecida: Gmail tiene filtros y Outlook.com, reglas. No usan Sieve, pero también ahí cuentan el orden y la detención.
Resumen
- Los filtros se ejecutan en el servidor de correo al entregar el mensaje, por lo que funcionan aunque el webmail esté cerrado, y solo sobre el correo nuevo.
- El webmail escribe sus filtros como script Sieve (RFC 5228) y lo coloca en el servidor mediante ManageSieve.
- Contiene, es igual a y coincide con la expresión no distinguen de forma predeterminada entre mayúsculas y minúsculas.
- Si ningún filtro hace nada, el mensaje se queda en Entrada; tras un traslado, no está además en Entrada.
- Los filtros se recorren de arriba abajo; stop termina el script, así que el orden determina el resultado.
Cuestionario
Ejercicio
Ejercicio A6.1: ¿Dónde acaba este correo? Abra el material filters-1.txt, un conjunto de filtros tal como lo escribe el webmail, y berichten-1.txt, con las cabeceras de cuatro mensajes entrantes, numerados del 1 al 4. Recorra cada mensaje siguiendo los cinco pasos de esta lección: de arriba abajo, saltándose los filtros desactivados y prestando atención a stop. Para cada mensaje, escriba el nombre de la carpeta en la que acaba, exactamente como aparece en el script; si el mensaje acaba en Entrada, escriba INBOX. El programa compara sus cuatro respuestas con la clave de respuestas y muestra, para cada mensaje, qué filtro fue decisivo.
Para saber más
Cuando se indican pasos en el webmail, se refieren al webmail de WebOké; en otros webmails funciona de forma parecida.
- Roundcube Webmail 7.1: Crear un filtro
- Roundcube Webmail 7.2: Ejemplos de filtros útiles
- Reglas de correo electrónico del lado del servidor (filtros en el servidor)
- RFC 5228, Sieve: An Email Filtering Language (en inglés): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (en inglés): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (en inglés): https://www.rfc-editor.org/rfc/rfc2919
