Como funcionam os filtros
Módulo 6: Automático: filtros e ausência · Tempo de leitura: 10 minutos
Objetivo de aprendizagem: Depois desta lição, saberá explicar onde e quando os filtros são executados, ler um script de filtros em Sieve e prever em que pasta uma mensagem recebida vai parar.
Conceitos-chave: filtro, Sieve, ManageSieve, conjunto de filtros, regra, condição, ação, conservação implícita, stop, contém, é igual a, expressão corresponde
Os filtros são executados no servidor
Um filtro organiza o seu correio automaticamente: as mensagens com "factuur" no assunto vão para a pasta Facturen (faturas), as newsletters vão para uma pasta própria. O mais importante a saber é que esta organização não acontece no webmail, mas sim no servidor de correio, no momento em que uma mensagem é entregue na sua caixa de correio.
Daqui resultam três coisas:
- Os filtros funcionam mesmo com o webmail fechado. O seu portátil pode estar desligado. O telemóvel vê a mensagem logo na pasta certa.
- Os filtros só funcionam no correio novo. As mensagens que já estão na sua caixa de correio ficam onde estão. Se criar um filtro hoje, terá de mover as mensagens antigas manualmente.
- Os filtros aplicam-se a uma única caixa de correio. Cada caixa de correio tem os seus próprios filtros. Se quiser definir algo para todas as caixas de correio do seu domínio, como bloquear um remetente, faça-o no painel de gestão do seu alojamento.
Os filtros são escritos em Sieve, uma linguagem simples criada especificamente para filtrar correio (RFC 5228). O servidor de correio da WebOké utiliza Dovecot com Pigeonhole, a implementação de Sieve do Dovecot. O webmail converte as suas escolhas no formulário num script Sieve e envia-o para o servidor através do protocolo ManageSieve (RFC 5804). Não precisa de escrever Sieve, mas quem o sabe ler percebe exatamente o que os seus filtros fazem.
Conjunto de filtros, regras, condições e ações
Um conjunto de filtros é o script completo: todos os filtros da sua caixa de correio num único ficheiro. Pode ter vários conjuntos de filtros, mas apenas um está ativo de cada vez.
No conjunto de filtros encontram-se os filtros, também chamados regras no webmail. Cada filtro tem:
- um nome, apenas para si;
- um âmbito: a mensagem tem de cumprir todas as regras, uma das regras, ou o filtro aplica-se a todas as mensagens;
- uma ou mais condições: onde o filtro procura (assunto, remetente, outro cabeçalho), como compara e com que texto;
- uma ou mais ações: o que acontece quando as condições se verificam.
Existem três formas de comparar:
| No webmail | Em Sieve | Significado |
|---|---|---|
| contém | :contains | o texto aparece algures no cabeçalho |
| é igual a | :is | o cabeçalho é exatamente este texto |
| expressão corresponde | :matches | padrão com * (zero ou mais caracteres) e ? (exatamente um carácter) |
Em nenhuma das três as maiúsculas fazem diferença. Por predefinição, o Sieve compara com a regra i;ascii-casemap, que trata maiúsculas e minúsculas da mesma forma. Assim, "factuur" também encontra "FACTUUR" e "Factuur".
Assim é um conjunto de filtros
No webmail, pode ver o conjunto de filtros como texto em Filtros > Ações > Editar conjunto de filtros. Um exemplo tal como o webmail o escreve:
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";
}Linha a linha:
require ["fileinto"];pede ao servidor a extensão necessária para mover para uma pasta. O webmail coloca esta linha no topo automaticamente, com todas as extensões que o script utiliza.# rule:[Nieuwsbrieven]é um comentário. É assim que o webmail reconhece o nome do seu filtro. O servidor ignora esta linha.if exists "List-Id"é a condição: a mensagem tem um cabeçalho List-Id. As newsletters e as listas de correio têm este cabeçalho (RFC 2919).fileinto "Nieuwsbrieven";move a mensagem para a pasta Nieuwsbrieven (newsletters). O nome da pasta é o nome completo no servidor, com o ponto como separador (lição 5.1). Uma pasta dentro de A receber chama-se, portanto,INBOX.Team.stop;para todo o script. Os filtros seguintes já não analisam esta mensagem. No webmail, esta ação chama-se Parar de avaliar regras.if false # ...é um filtro desativado. Se desligar Filtro activado, o webmail transforma a condição emfalse: nunca verdadeiro. A condição antiga fica como comentário, para que possa voltar a ativá-la mais tarde.

De cima para baixo
O servidor lê o script de cima para baixo e analisa cada filtro. Aplicam-se três regras.
1. Sem ação, a mensagem fica em A receber. O Sieve conhece a conservação implícita (implicit keep, RFC 5228, secção 2.10.2): se nenhum filtro fizer nada, a mensagem chega normalmente a A receber.
2. Depois de ser movida, a mensagem não fica também em A receber. Um fileinto desativa essa conservação implícita. A mensagem vai para a pasta escolhida e não fica também em A receber. Se quiser as duas coisas, utilize Copiar mensagem para.
3. Sem stop, os filtros seguintes também analisam a mensagem. Se faltar stop, o servidor continua com o filtro seguinte. Se esse filtro também se aplicar, o servidor executa também essa ação. Duas ações de mover para duas pastas significam que a mensagem fica em ambas as pastas. Com stop, decide o primeiro filtro que se aplica.
É por isso que a ordem importa. No exemplo acima, Nieuwsbrieven está antes de Facturen, com um stop. Uma newsletter com "Je factuur" no assunto vai, portanto, para Nieuwsbrieven e não para Facturen. Se inverter a ordem, essa mesma newsletter acaba em Facturen, porque esse filtro não tem stop e passa a vir primeiro. A newsletter ficaria até em ambas as pastas. Por isso, coloque os filtros mais específicos no topo e dê-lhes um stop.
Seguir uma mensagem: assim faz a previsão
Pegue numa mensagem e percorra o script tal como o servidor faz:
- Comece pelo primeiro filtro. Está desativado (
if false)? Ignore-o. - A condição verifica-se? Observe com atenção o cabeçalho:
subjecté o assunto,fromo remetente com nome e endereço,too destinatário. - Se sim: execute as ações. Se houver
stop, terminou. - Se não, ou se não houver stop: passe ao filtro seguinte.
- No fim: se nenhum filtro moveu ou eliminou a mensagem, ela fica em A receber (
INBOX).
Com estes cinco passos consegue ler qualquer script, mesmo que seja longo.
Na prática: assim funciona no webmail
Os filtros encontram-se em Definições > Filtros. A lista mostra os seus filtros pela ordem em que o servidor os executa; arraste-os para alterar a ordem. Em Ações encontra Editar conjunto de filtros: aí vê e altera o script como texto. Os passos para criar um novo filtro estão no manual do Roundcube, em Criar um filtro. Noutros webmails funciona de forma semelhante: o Gmail tem filtros, o Outlook.com tem regras. Não utilizam Sieve, mas também aí a ordem e a paragem contam.
Resumo
- Os filtros são executados no servidor de correio no momento da entrega, ou seja, mesmo com o webmail fechado, e apenas no correio novo.
- O webmail escreve os seus filtros como script Sieve (RFC 5228) e coloca-o no servidor através de ManageSieve.
- Contém, é igual a e expressão corresponde não distinguem, por predefinição, maiúsculas de minúsculas.
- Se nenhum filtro fizer nada, a mensagem fica em A receber; depois de ser movida, não fica também em A receber.
- Os filtros são percorridos de cima para baixo; stop termina o script, pelo que a ordem determina o resultado.
Questionário
Exercício
Exercício A6.1: Onde vai parar este e-mail? Abra o material filters-1.txt, um conjunto de filtros tal como o webmail o escreve, e berichten-1.txt, com os cabeçalhos de quatro mensagens recebidas, numeradas de 1 a 4. Percorra cada mensagem segundo os cinco passos desta lição: de cima para baixo, ignorando os filtros desativados e com atenção ao stop. Indique, para cada mensagem, o nome da pasta onde vai parar, exatamente como aparece no script; se a mensagem ficar em A receber, indique INBOX. O programa compara as suas quatro respostas com a chave de respostas e mostra, para cada mensagem, que filtro foi decisivo.
Para saber mais
Os passos indicados para o webmail aplicam-se ao webmail da WebOké; noutros webmails funciona de forma semelhante.
- Roundcube Webmail 7.1: Criar um filtro
- Roundcube Webmail 7.2: Exemplos de filtros úteis
- Regras de e-mail no servidor (filtros no servidor)
- RFC 5228, Sieve: An Email Filtering Language (em inglês): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (em inglês): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (em inglês): https://www.rfc-editor.org/rfc/rfc2919
