Ejemplos básicos de uso de Sieve

Nota

A la diferencia de los filtros de mensajes convencionales que puede estar acostumbrado a usar en sus aplicaciones de correo electrónico, no tiene que crear muchos filtros pequeños con Sieve que después tiene que activar/desactivar uno por uno. Más bien, usted pondrá todos sus filtros (cada uno considerado como un bloque de comandos) en un solo archivo de filtro, que debe ser activado. Si necesita cambiar o eliminar alguno de los filtros, debe editar el archivo que contiene el bloque.

requerir un comando

En la parte superior de su archivo de filtro, debe incluir la lista de características de Sieve (separadas por comas) que necesita usar para que sus bloques de código (filtros separados) puedan ser utilizados.

Por ejemplo, la siguiente línea le permitirá utilizar las funciones entre paréntesis de los bloques de comandos:

require [«fileinto», «vacation»];

Pondrá sus bloques de comando de filtro directamente debajo de esta línea.

NOTE: Actualmente soportamos las siguientes extensiones:

fileinto reject regex mailbox foreverypart
envelope imap4flags date extracttex
encoded-character copy index  
vacation subaddress include ihave  
comparator-i;ascii-numeric variables duplicate  
relational body mime  

Comentar

Si quiere facilitar que otros (o usted mismo, más tarde) recuerden para qué sirven sus bloques de comandos, puede dejar comentarios. Hay dos maneras de hacerlo:

Comenzar una línea con un hash (#)

Cualquier cosa después del símbolo del hash (#) no se tendrá en cuenta. Esto puede ser útil no solo para los comentarios, sino también para desactivar temporalmente un filtro, poniendo un # al principio de cada línea en su bloque de comandos, así:

#if address :is ["from", "sender"] "support-renew@gandi.net"
#
#{
#        fileinto "Inbox/Renew";
#        stop;
#}

Utilizar un comentario C-style

Otra manera de dejar un comentario, uno que quieras tener en un formato de párrafo, puede hacerse así:

/* This starts with a forward slash
 * and then each line that follows
 * must start with a "*" symbol and
 * end like this */

Ejemplos de filtros

Hay características mucho más avanzadas que las que se describen aquí, y puede encontrar información sobre ellas en los distintos enlaces que se ofrecen al final de esta página. El objetivo aquí es proporcionar al nuevo usuario de los filtros Sieve una comprensión básica de cómo se utilizan.

Archivar correos electrónicos en una carpeta

Digamos que quiero que un filtro ponga todos mis recordatorios de renovación de dominios Gandi en una subcarpeta especial de mi bandeja de entrada que yo llamo «Renew». El bloque de filtro Sieve para esto se vería como el siguiente:

if address :is ["from", "sender"] "support-renew@gandi.net"

{
        fileinto "Inbox/Renew";
        stop;
}

El nombre de la carpeta que utiliza es relativo a la ubicación de la raíz (root). Por lo tanto, «Inbox/Renew» coresponde a una subcarpeta de Inbox llamada Renew. Si pone, por ejemplo, «Inbox», iría a la carpeta principal de su Bandeja de entrada (Inbox).

Truco

el comando opcional «stop;» que se ve en el ejemplo anterior indica al filtro que se detenga si el correo cumple esa condición. Por lo tanto, no continuará ejecutando ningún bloque de comandos después de éste.

Configuración de una respuesta «out-of-office» sencilla

Aquí puede ver una forma de establecer una respuesta «out-of-office» (sobrescribirá cualquier mensaje que usted ponga en su campo de mensaje de respuesta «out-of-office» en nuestro sitio web):

if allof(currentdate :value "ge" "date" "2018-08-01",
         currentdate :value "le" "date" "2018-08-15")
{
    vacation
    :days 1
    :subject "Gone fishing"
    text:

  "Hello,

   I have gone fishing and will return sometime next week.

   Mr. Smith
.
;
}

Las dos primeras líneas del ejemplo anterior muestran una forma opcional de incluir una fecha de inicio y fin para la respuesta «out-of-office». Si desea utilizarlo, deberá incluir las extensiones «date» y «relational», además de la extensión «vacation».

Usa a mr.smith+anything@ cuando lo necesite

En muchos casos, es útil crear una dirección de correo electrónico específica para un sitio web, cuando le piden que proporcione una dirección de correo electrónico.

Puede usar su dirección de correo electrónico de Gandimail más «+» cualquier cosa para crear un alias. Por ejemplo mr.smith+amazon@ recibiría todos mis correos de Amazon. Lo que es útil aquí, es que usted puede hacer que Sieve cree automáticamente la carpeta para separar los correos enviados a esa dirección a su propia carpeta.

require ["variables", "envelope", "fileinto", "subaddress"];

if envelope :is :user "to" "mr.smith" {
 if envelope :matches :detail "to" "*" {
   /* Save name in ${name} in all lowercase except for the first letter.
    * Anything, anything, ANYTHING thus all become 'Anything'.
    */
   set :lower :upperfirst "name" "${1}";
 }

 if string :is "${name}" "" {
   /* Default case if no detail is specified */
   fileinto "Inbox";
 } else {
   /* For mr.smith+anything@ this will become plus/anything */
   fileinto "plus/${name}";
 }
}

un ejemplo de archivo de filtro de Sieve completo

Aquí está el aspecto de un archivo de filtro Sieve completo, combinando los filtros anteriores.

Es una buena práctica comentar su código para ayudarle a usted o a otros a ver mejor lo que hizo. Ejemplo:

#this is a comment to say that below are the extensions I need for my command blocks to work.

require ["variables", "envelope", "fileinto", "subaddress", "date", "vacation", "relational"];


#this is a comment to say that below is the automatic filing into a folder

if address :is ["from", "sender"] "support-renew@gandi.net"

{
        fileinto "Inbox/Renew";
        stop;
}


#this is a comment to say that below is the out-of-office reply

if allof(currentdate :value "ge" "date" "2018-08-01",
        currentdate :value "le" "date" "2018-08-15")
{
    vacation
    :days 1
    :subject "Gone fishing"
    text:

 "Hello,

  I have gone fishing and will return sometime next week.

  Mr. Smith
.
;
}


#Below is to create and file into a subdirectory, addresses I make on the fly.

if envelope :is :user "to" "mr.smith" {
 if envelope :matches :detail "to" "*" {
   set :lower :upperfirst "name" "${1}";
 }

 if string :is "${name}" "" {
   fileinto "Inbox";
 } else {
   fileinto "plus/${name}";
 }
}

Así que cuando un correo electrónico llega a este buzón, pondrá cualquier recordatorio de renovación de Gandi en mi subcarpeta «Renew», y enviará una respuesta «out-of-office». Si voy a un sitio web llamado examplecompany y hago una cuenta en él con mr.smith+examplecompany@ cualquier correo electrónico que me envíen a esa dirección lo hará a una nueva carpeta que Sieve creará automáticamente llamada «examplecompany».