Filtro Sieve (filtri personalizzati avanzati)
- Lettura
- 36 minuti
- Categoria
- Ricevere e leggere le email
Proton Mail offre agli utenti diversi modi per filtrare automaticamente le email assegnando tag o organizzandole in cartelle. In generale, ci sono tre metodi:
- Aggiungere i mittenti alla Lista dei bloccati e alle liste dei mittenti consentiti in modo che vengano sempre o non vengano mai inseriti nella cartella dello spam;
- Creare un filtro personalizzato utilizzando l’interfaccia interattiva di Proton Mail;
- [Più avanzato] Creare un filtro personalizzato in Sieve.
Tra questi metodi, creare un filtro personalizzato in Sieve offre la massima versatilità, ma è anche più complicato da usare. Per questo motivo, consideriamo Sieve una funzionalità avanzata per utenti con una certa esperienza tecnica. Per la maggior parte degli utenti, l’interfaccia interattiva è adatta per creare i filtri personalizzati di cui hai bisogno.
Indice
Che cos’è Sieve?
Sieve è un linguaggio di programmazione utilizzato per filtrare le email. Puoi creare filtri in Sieve scrivendo regole semplici. Ad esempio, “Assegna a tutti i messaggi di Kyle l’etichetta verde”. La combinazione di queste regole consente di creare un sistema di filtraggio sofisticato.
Puoi scrivere le regole di Sieve da zero, copiarle da esempi come quelli in questo articolo o utilizzare un software che rende tutto più semplice.
In effetti, ti offriamo già un modo per creare filtri Sieve utilizzando l’interfaccia interattiva, che utilizza i tuoi input per generare filtri Sieve. Un altro ottimo modo per imparare Sieve è creare filtri utilizzando l’interfaccia interattiva e poi modificarli in Sieve, poiché l’interfaccia interattiva stessa utilizza un sottoinsieme di Sieve.
Ad esempio, confronta il seguente filtro creato utilizzando l’interfaccia interattiva…
… con il codice dello stesso filtro visualizzato nell’editor Sieve:
Questo articolo ti introdurrà a Sieve e ti spiegherà come scrivere i tuoi filtri Sieve. Se hai bisogno di ulteriori informazioni sull’utilizzo di Sieve, online sono disponibili numerosi altri tutorial che possono esserti d’aiuto. Se hai domande su Sieve in Proton Mail a cui non viene data risposta in questa pagina, puoi sempre contattare il team di supporto qui.
Primi passi
Per iniziare a creare filtri Sieve, accedi a mail.proton.me(nuova finestra), vai su Impostazioni → Tutte le impostazioni → Proton Mail → Filtri → Aggiungi filtro Sieve.
Uno script Sieve è composto da un elenco di comandi. Nella maggior parte degli script inizia con un comando require. Il comando require carica un’estensione che fornisce una determinata funzionalità. Ad esempio, per assegnare un’etichetta o inserire un messaggio in una cartella, abbiamo bisogno del comando fileinto.
Per caricare questo comando scriviamo semplicemente:
require "fileinto";
Per caricare più estensioni puoi utilizzare un elenco:
require ["fileinto", "imap4flags"];
In questo caso, imap4flags carica un’estensione che ti consente di contrassegnare la posta come letta. Dopo il comando require, spesso eseguirai alcuni test sul messaggio in arrivo. Ciò avviene combinando if e un altro comando come address o header.
Infine, se i test hanno successo, puoi applicare un’azione a un messaggio. Ad esempio, supponiamo di voler inserire tutte le email provenienti da uno specifico mittente nella stessa cartella e contrassegnare la posta in arrivo come letta. Questo potrebbe essere scritto come:
require ["fileinto", "imap4flags"];
# I don't really like Spott
if address :is "from" "Spott.Tenerman@northpark.example.com"
{
addflag "\\Seen";
fileinto "enemies";
}Nota che il simbolo # indica un commento e non viene interpretato come parte dello script Sieve. Inoltre, la cartella o l’etichetta che imposti (qui enemies) deve esistere nel tuo ambiente: puoi imparare a creare cartelle ed etichette qui. Dopo aver inserito questo filtro, premi il pulsante SALVA. Il tuo filtro verrà ora eseguito per ogni email in arrivo.
Naturalmente, potresti voler inserire le email di più mittenti nella stessa cartella. In questo caso, puoi passare un elenco di stringhe al comando address (una stringa(nuova finestra) è una serie di caratteri, in questo caso un indirizzo email):
require ["fileinto", "imap4flags"];
# I don't really like Spott and Kyyyhel
if address :is "from" ["Spott.Tenerman@northpark.example.com", "Kyhel.Broski@northpark.example.com"]
{
addflag "\\Seen";
fileinto "enemies";
}Nota che ogni volta che puoi passare una stringa a una condizione di test, di solito è possibile passare anche un elenco. Verrà quindi cercata una corrispondenza provando una qualsiasi delle stringhe nell’elenco. Questo non si applica a comandi come fileinto, addflag, ecc.
Ma Sieve è molto più potente del semplice riordino della tua casella di posta. Ti consente anche di rifiutare le email con un messaggio di resposta:
require "reject";
# Reject mails that spell my name wrong
if header :contains "subject" "Kyhel"
{
reject "My name is not Kyhel";
}Utilizzare i test
Combinare i test in Sieve
Come ti abbiamo mostrato nella sezione Primi passi, puoi eseguire test utilizzando il comando if sui messaggi in arrivo per determinare se un’email deve essere interessata da un comando require.
Oltre al comando if, esistono altri comandi di test che ti consentono di strutturare il tuo script in modo semplice.
Else
Il comando else ti consente di fare qualcosa quando il comando if non ha eseguito le sue azioni. Un esempio di ciò è:
require ["fileinto"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
fileinto "Kenny";
} else {
fileinto "Understandable";
}Qui, l’email verrà spostata nella cartella Kenny se l’oggetto è esattamente mmph mmph. In caso contrario (quindi quando l’oggetto non è esattamente mmph mmph), l’email verrà spostata nella cartella Understandable.
Elsif
Il comando elsif è la contrazione di else if. Come il comando else, verrà eseguito se la condizione if è errata, ma solo se la condizione elsif è corretta. Se il comando elsif non è corretto, verrà eseguito il blocco elsif o else successivo.
require ["fileinto", "imap4flags"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
fileinto "Kenny";
# Kyhel sends me only speeches
} elsif address :is "from" "Kyhel.Broski@northpark.example.com" {
fileinto "Speeches";
} else {
# otherwise the mail is important, so add a star.
addflag "\\Flagged";
}Nota che in una singola esecuzione verrà eseguito solo uno dei blocchi if, elsif o else.
Anyof
A volte hai bisogno di eseguire un comando quando uno dei diversi test va a buon fine. A questo scopo, puoi utilizzare il comando anyof. Questo si fa scrivendo anyof seguito da una parentesi aperta ‘(’, le istruzioni che vuoi testare separate da virgole e una parentesi chiusa ‘)’.
require ["fileinto", "imap4flags"];
# Kenny either sends from kenny@northpark.example.com or puts "mmph mmph" in the subject.
if anyof(address :is "from" "kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
fileinto "Kenny";
}Questo script inserirà i messaggi provenienti da kenny@northpark.example.com o che contengono mmph mmph nella riga dell’oggetto nella cartella Kenny.
Allof
Esiste anche la controparte di anyof: allof. Questo ti consente di eseguire un comando solo quando tutte le condizioni fornite corrispondono:
require ["fileinto", "imap4flags"];
# Kenny always sends me mails with mmph mmph
if allof(address :is "from" "Kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
fileinto "Kenny";
}
Questo script inserirà i messaggi provenienti da kenny@northpark.example.com e che contengono mmph mmph nella riga dell’oggetto nella cartella Kenny.
Not
Infine, a volte hai bisogno di applicare un comando se qualcosa non corrisponde. Aggiungere not davanti all’istruzione farà in modo che ciò avvenga:
require ["fileinto", "imap4flags"];
# If a subject line does not contain real guitar put it into the young people folder
if not header :contains "subject" "real guitar"
{
fileinto "Young people";
}Che equivale a:
require ["fileinto", "imap4flags"];
# The else part will be evaluated if the condition is not true
if header :contains "subject" "real guitar"
{
# do nothing
} else {
fileinto "Young people";
}Questo inserisce tutte le email che non contengono real guitar nella riga dell’oggetto nella cartella Young people.
È ovviamente possibile combinare tutti questi test insieme. Ad esempio, potresti voler segnare come importante un’email se al contempo non proviene da Kenny e non contiene mmph mmph nell’oggetto:
require ["fileinto", "imap4flags"];
if not anyof ( header :contains "subject" "mmph mmph",
address :is "from" "Kyhel.Broski@northpark.example.com" ) {
addflag "\\Flagged";
}Eseguire test sulle intestazioni
Utilizzando il comando address puoi eseguire test sulle intestazioni degli indirizzi, come l’intestazione from, to e sender. Puoi estrarre diverse parti dell’indirizzo email utilizzando uno dei seguenti flag:
- :localpart — la parte prima del simbolo della chiocciola (@)
- :domain — la parte dopo il simbolo della chiocciola (@)
- :all — l’intero indirizzo
Il seguente snippet spiega l’uso di questo comando:
require ["fileinto", "imap4flags"];
# Northpark people are made of paper, springfield are mostly yellow
if address :domain "from" "northpark.example.com"
{
fileinto "PaperPeople";
} elsif address :domain "from" "springfield.example.com"{
fileinto "YellowPeople";
}
if address :localpart "from" "chef"
{
addflag "\\Flagged";
}In sintesi, questo script inserirà tutto ciò che viene inviato dal dominio northpark.example.com in PaperPeople e da springfield.example.com in YellowPeople.
Inoltre, a prescindere dal dominio da cui viene inviata un’email, se la parte prima di @ è uguale a chef (ad es. chef@example.com), il messaggio verrà contrassegnato. Un altro utilizzo interessante è quello di memorizzare automaticamente tutto ciò che viene inviato a un indirizzo in una cartella:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :localpart "to" "support"
{
fileinto "Support";
}Avanzate
Il comando envelope ti consente di eseguire altri test. In generale, il test address recupera solo il valore dall’intestazione. Tuttavia, nella sessione SMTP si può specificare un indirizzo from diverso rispetto a quello presente nell’intestazione.
Nell’interfaccia dell’intestazione di Proton Mail, l’envelope-from equivale all’intestazione return-path e l’envelope-to equivale all’intestazione x-original-to.
Utilizzando il comando envelope puoi recuperare gli indirizzi reali di to: e from: dall’envelope. Nota che non esistono altri campi oltre a questi due, quindi sender non esiste in questo comando. Tieni presente che envelope si trova in un’estensione e quindi richiede che tu usi require per questa estensione come prima cosa.
require ["fileinto", "imap4flags", "envelope"];
# Northpark people are made of paper, springfield are mostly purple
if envelope :domain "from" "northpark.example.com"
{
fileinto "PaperPeople";
} elsif envelope :domain "from" "springfield.example.com"{
fileinto "PurplePeople";
}
if envelope :localpart "from" "chef"
{
addflag "\\Flagged";
}Utilizzare i comparatori per valutare due valori
Quando un test valuta due valori, è possibile specificare come viene eseguito questo confronto utilizzando diversi flag chiamati comparatori. In precedenza abbiamo già utilizzato due comparatori: :is e :contains, che verificano se la stringa data è esattamente uguale al valore specifico e se il valore specifico contiene la stringa data, come nel seguente test.
require ["fileinto", "imap4flags"];
if not anyof (
header :contains "subject" "mmph mmph", # the subject contains mmph mmph
address :is "from" "Kyhel.Broski@northpark.example.com" # the recipient is exactly Kyhel.Broski@northpark.example.com
) {
addflag "\\Flagged";
}Il comparatore :matches può essere utilizzato anche per definire un formato più specifico. Confronterà entrambi i valori dall’inizio alla fine, proprio come il comparatore :is. Tuttavia, nel caso di :matches, il valore che hai definito può contenere i valori ? e *. Il punto interrogativo corrisponderà a un singolo carattere, mentre l’asterisco (chiamato carattere jolly) corrisponderà a zero o più caratteri.
Con questo formato, puoi creare questo test:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph*" {
addflag "\\Flagged";
}In questo esempio, il test andrà a buon fine se l’oggetto del messaggio inizia con mmph e contiene poi qualsiasi altro carattere o caratteri successivi. In altre parole, l’email verrà contrassegnata quando l’oggetto inizia con ‘mmph’. ‘mmph mmph‘ e ‘mmph mmph Hello‘ corrisponderanno entrambi; ‘Hello mmph‘ e ‘Springfield sales‘ no.
L’asterisco può anche essere utilizzato a metà del valore e più volte, come segue:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph *mmph *mmph" {
addflag "\\Flagged";
}Questo test corrisponderà se l’oggetto inizia con ‘mmph ‘ (con uno spazio), contiene un altro ‘mmph ‘ (con uno spazio) e termina con ‘mmph‘ (senza spazio). Gli oggetti corrispondenti sono ‘mmph mmph mmph‘, ‘mmph mmph mmphmmph‘ o ‘mmph is mmph and mmph‘.
Questo comparatore :matches può essere molto utile per il confronto degli indirizzi. Come forse saprai, Proton Mail ha diversi domini: protonmail.com e proton.me. Se vuoi verificare se un messaggio proviene da un utente Proton Mail, puoi utilizzare questo script:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :domain :matches "from" "protonmail.*"
{
fileinto "Internal";
}Se per qualche motivo hai bisogno di far corrispondere esattamente il carattere * o ?, allora puoi schermarli aggiungendo \\\\ prima: \\\\* corrisponderà a un asterisco e \\\\? corrisponderà a un punto interrogativo.
Nota che supportiamo anche l’estensione regex, che definisce anche il comparatore :regex. Questo comparatore è una versione più precisa di :matches, ma è molto complesso. Per maggiori informazioni, leggi la documentazione ufficiale(nuova finestra).
In alcuni casi (come vedrai nel prosieguo di questo articolo), potresti voler confrontare valori numerici. Il pacchetto relational è fatto apposta per questo utilizzo. Questo pacchetto definisce il comparatore :value, che è seguito dal tipo di confronto.
Ti consente di verificare se un valore è maggiore di (con tipo di confronto “gt”), maggiore o uguale a (“ge”), uguale a (“eq”), minore o uguale a (“le”) o minore di (“lt”) il valore dato.
Quando si confrontano valori numerici, anche il pacchetto comparator-i;ascii-numeric è molto utile. Indica all’interprete dello script che il contenuto della stringa è un numero e non una stringa normale. Può essere utilizzato aggiungendo al test :comparator “i;ascii-numeric”.
Con tutte queste informazioni, possiamo costruire il seguente script:
require ["fileinto", "relational", "comparator-i;ascii-numeric"];
if header :value "ge" :comparator "i;ascii-numeric" "subject" "2"
{
fileinto "Dummy example";
}Questo test sposterà il messaggio nella cartella Dummy example se l’oggetto è maggiore o uguale a 2. Se l’oggetto non è un numero, ma un testo, allora il test fallirà. Di per sé questo esempio sembra molto stupido, ma è destinato a essere utilizzato in combinazione con altre estensioni come date, che definiremo più avanti in questo articolo.
Confronto tramite contesto in Sieve
Puoi anche accedere alle informazioni relative al tuo account e al contesto di Proton Mail in generale utilizzando le estensioni. Ad esempio, puoi verificare se l’indirizzo del mittente è nella tua lista dei contatti.
Accedere alla tua lista dei contatti
Puoi accedere alla tua lista dei contatti utilizzando l’estensione extlists. In combinazione con i test sulle intestazioni, puoi quindi verificare se un contatto è nella tua lista dei contatti.
require ["fileinto", "extlists"];
# Checks that the sender is in your personal address book
if header :list "from" ":addrbook:personal?label=Family"
{
fileinto "Known";
}Questo test contrassegnerà un messaggio con l’etichetta Known se il mittente è contenuto nella lista :addrbook:personal?label=Family. La lista può essere divisa in due parti. In primo luogo, :addrbook:personal significa che l’indirizzo si trova nella tua rubrica personale. In secondo luogo, label=Family restringe ulteriormente la lista, specificando che, oltre a essere nella tua rubrica, il contatto deve appartenere anche al gruppo di contatti Family. Se hai bisogno, puoi cambiare questa etichetta in un altro gruppo di contatti. Potresti usare :addrbook:personal?label=Work se vuoi, nel qual caso il test andrebbe a buon fine solo se il mittente è nella tua rubrica e nel gruppo di contatti Work.
Più in generale, una lista rispetta il Tag URI Scheme(nuova finestra) e puoi aggiungere parametri extra per restringere i tuoi filtri. Quindi puoi utilizzare questa lista come segue:
require ["fileinto", "extlists"];
# replace :your:list:here by the list you want to use
if header :list "from" ":your:list:here"
{
# some actions...
}Abbiamo fornito quattro liste diverse:
- :addrbook:personal¹ verifica se un indirizzo è nella tua lista dei contatti. La lista accetta il parametro label che corrisponde a uno specifico gruppo di contatti. Questo parametro può essere declinato in quattro sottoversioni:
- :addrbook:personal?label=something corrisponderà a un contatto che si trova nel gruppo di contatti “something”;
- :addrbook:personal?label.starts-with=something corrisponderà a un contatto che appartiene ad almeno un gruppo che inizia con “something”;
- :addrbook:personal?label.ends-with=something corrisponderà a un contatto che appartiene ad almeno un gruppo che termina con “something”;
- :addrbook:personal?label.contains=something corrisponderà a un contatto che appartiene ad almeno un gruppo che contiene “something”.
Puoi anche accedere alle informazioni crittografiche riguardanti l’email corrispondente:
- :addrbook:personal?keypinning=true corrisponderà a un contatto che ha una chiave attendibile. Cambiando true in false corrisponderà a un contatto che non ha una chiave attendibile;
- :addrbook:personal?encryption=true corrisponderà a un contatto per cui la crittografia è abilitata. Cambiando true in false corrisponderà a un contatto per il quale la crittografia non è configurata o è disabilitata;
- :addrbook:personal?signing=true corrisponderà a un contatto per cui la firma è abilitata. Sostituendo true con false, corrisponderà a un contatto per cui la firma è disabilitata.
- :addrbook:myself¹ corrisponde a ogni indirizzo di tua proprietà;
- :addrbook:organization corrisponde a ogni indirizzo appartenente a qualcuno dell’organizzazione di cui fai parte;
- :incomingdefaults:inbox controlla se l’indirizzo si trova nella tua lista degli indirizzi consentiti;
- :incomingdefaults:spam controlla se l’indirizzo si trova nella tua Lista Bloccati.
Combinata con l’estensione delle variabili (descritta nel paragrafo successivo), le variabili di corrispondenza verranno modificate. La variabile di corrispondenza ${0} conterrà sempre l’ultimo indirizzo email contenuto nella lista specificata. Se la lista è contrassegnata dalla nota 1, la variabile di corrispondenza ${1} conterrà il nome visualizzato.
Ad esempio, con le liste qui sotto, puoi creare un filtro per eliminare qualsiasi email ricevuta da persone esterne alla tua famiglia o non presenti nella tua whitelist:
require "extlists";
# checks that the sender is not in the contact group Family, whilelisted or yourself
if not anyof(
header :list "from" ":addrbook:personal?label=Family",
header :list "from" ":incomingdefaults:inbox",
header :list "from" ":addrbook:myself"
) {
discard; # permanently delete the email
}Se tale condizione è soddisfatta, verrà eseguita l’azione discard. Questa azione elimina l’email immediatamente e in modo permanente. Potresti anche semplicemente spostarla nella cartella del cestino utilizzando un’azione fileinto invece di un discard: fileinto “trash”;.
Creazione di variabili
Un altro strumento utile per la gestione del contesto è la definizione di variabile. Una variabile è uno spazio di archiviazione temporaneo in cui puoi inserire del testo ed etichettarlo con un nome. In seguito, potrai riutilizzare questo contenuto richiamandolo con il suo nome. Ad esempio, potresti avere il seguente script:
require ["reject", "variables"];
# First check who is the sender
if allof(
address :is "from" "Kenny@northpark.example.com",
header :contains "subject" "mmph mmph"
) {
# It's from Kenny!
# Create the variable message containing 'mmph mmph'
set "message" "mmph mmph";
} else {
# Create the variable message containing 'Sorry, I don't want emails today!'
set "message" "Sorry, I don't want emails today!";
}
# Then, reject the message
reject "${message}";L’obiettivo di questo script è rifiutare un’email con un messaggio personalizzato. Se l’email originale proviene da kenny e l’oggetto è ‘mmph mmph‘, viene creata la variabile ‘message‘, contenente mmph mmph. In caso contrario, il messaggio verrà compilato con ‘Sorry, I don’t want emails today!‘. Infine, nell’ultimo passaggio riutilizziamo questa variabile nel comando reject.
Sieve non definisce le variabili in modo nativo, quindi sono definite nell’estensione variables, che deve essere richiesta all’inizio del tuo script. Ci sono due modi per definire una variabile.
- Creazione esplicita di una variabile:
L’azione set consente di creare una variabile.
require "variables"; # Create a variable called "labelname" and containing the string "Work". set "labelname" "Work";
La prima stringa è il nome della tua variabile e la seconda è il suo valore. Quindi l’esempio precedente crea una variabile chiamata labelname contenente Work.
Una volta definita una variabile, puoi richiamarla aggiungendo il seguente formato in una stringa: ${name}, dove name è il nome della tua variabile. Al momento dell’esecuzione, sarà sostituito dal valore della variabile. (Se non hai definito la variabile, verrà sostituita da una stringa vuota). Di conseguenza, nel seguente script:
require "variables";
require "fileinto";
# Create a variable called "labelname" and containing the string "Work".
set "labelname" "Work";
# Move the email in "${foldername}/${labelname}" which becomes after variable resolution "/Work";
fileinto "${foldername}/${labelname}";La tua email verrà contrassegnata con l’etichetta /Work. Poiché abbiamo già definito la variabile labelname, questa viene sostituita da Work. Tuttavia, foldername non è definita, quindi viene semplicemente rimossa.
- Assegnazione implicita di una variabile:
Il caso d’uso più interessante delle variabili si ha quando si utilizza un test :matches. Prendiamo il seguente esempio, in cui il mittente dell’email è test@proton.me:
require "variables";
require "fileinto";
# do a matches test
if header :matches "from" "*@*" {
# The first * matches "test", the second "protonmail".
# Thus, the first matching variable contains "test"
fileinto "${1}";
}Se utilizzato con l’estensione delle variabili, il risultato di un’operazione di corrispondenza verrà archiviato nelle variabili. Diverse variabili verranno impostate con un nome numerico. Innanzitutto, la variabile 0 conterrà la corrispondenza completa (nel nostro esempio sarà l’indirizzo completo: test@proton.me). Successivamente, il primo gruppo di corrispondenza verrà assegnato alla variabile 1 (nel nostro esempio sarà test), il secondo gruppo alla seconda variabile (proton.me) e così via fino all’ultimo gruppo.
Nel nostro esempio, viene eseguito il comando fileinto. La posizione è definita come ${1}, che viene riconosciuta come una variabile e quindi sostituita con il suo valore, calcolato come sopra: test.
Nota che è anche possibile assegnare variabili in un test :regex, utilizzando gruppi di corrispondenza di espressioni regolari.
Trasformazione delle variabili
Un’ottima possibilità è la trasformazione delle variabili. Per farlo, si può usare la parola chiave set con una combinazione di flag per modificare il valore prima di assegnarlo alla variabile.
- :lower cambierà il valore di una variabile in minuscolo;
- :upper cambierà il valore di una variabile in maiuscolo;
- :lowerfirst cambierà in minuscolo la prima letteral del valore della variabile;
- :upperfirst cambierà in maiuscolo la prima lettera del valore della variabile;
- :quotewildcard inserirà tra virgolette qualsiasi carattere jolly contenuto nella stringa, in modo da poterlo utilizzare letteralmente in un’istruzione di corrispondenza;
- :length restituirà la lunghezza del valore.
Nota che puoi anche riutilizzare una variabile definita in un’altra azione set. Miglioriamo i nostri esempi precedenti:
require "variables";
require "fileinto";
# Set labelname to WORK, and modify it to lowercase with the first letter in upper case
set :lower :upperfirst "labelname" "WORK";
set :lower :upperfirst "foldername" "geneva";
# Create a variable that is a combination of foldername and labelname
set "location" "${foldername}/${labelname}";
fileinto "${location}";Passo dopo passo, il filtro creerà tre variabili. Il primo comando set creerà la variabile labelname. Il contenuto della variabile è Work. Infatti, il valore originale WORK viene trasformato utilizzando sia il flag :lower che il flag :upperfirst, passando a work e poi a Work.
Il secondo comando set creerà una seconda variabile chiamata foldername, contenente la stringa Geneva. Infatti, sono stati utilizzati i flag :lower e :upperfirst.
Infine, viene creata la variabile location. Il valore “${foldername}/${labelname}” contiene due variabili: foldername e labelname. Quindi l’interprete sieve sostituirà queste variabili con i loro valori: Work e Geneva.
Infine, la variabile location viene utilizzata come argomento per il comando fileinto. Di conseguenza, l’email verrà spostata nella cartella il cui nome corrisponde al valore della variabile location: Work/Geneva.
I comparatori possono essere applicati anche alle variabili di corrispondenza:
require "variables";
require "fileinto";
if address :all :matches "from" "*@*" {
set :lower :upperfirst "fileintovar" "${1}";
fileinto "${fileintovar}";
}Qui, se il mittente dell’email è test@proton.me, verrà contrassegnata con l’etichetta Test.
Un altro modo per modificare il valore di una variabile consiste nell’utilizzare l’estensione vnd.proton.eval. Questa estensione definisce il nuovo flag :eval, che ti consentirà di eseguire semplici calcoli:
require "variables";
require "fileinto";
require "vnd.proton.eval";
# do a match test on the sender address
if header :matches "from" "*" {
# create a variable called length, containing the length of the first
# matching variable
set :length "length" "${1}";
# Create a variable called fileintovar containing the result of the expression written below
set :eval "fileintovar" "${length} * 25 - 1 / 8+3";
fileinto "${fileintovar}";
}In questo esempio, considerando sempre che l’email provenga da test@proton.me, l’email verrà contrassegnata con il valore 478. Infatti, la lunghezza della prima variabile di corrispondenza è 19 e il risultato di 19 * 25 – 1 / 8 + 3 viene arrotondato per eccesso a 478.
A prima vista questo potrebbe sembrare inutile, ma l’estensione acquista maggiore senso se combinata con altre operazioni.
Confronto con altri campi in Sieve
È anche possibile stabilire una corrispondenza su intestazioni specifiche. Ad esempio, per inserire tutti i messaggi inviati a liste (spesso si tratta di messaggi di marketing o newsletter), puoi fare così:
require "fileinto";
# Filter all lists into the same folder
if exists "list-unsubscribe"
{
fileinto "advertisements";
}Per suddividere le email dei social media nelle rispettive cartelle, potresti scrivere:
require "fileinto";
# Filter all lists into the same folder
if anyof(exists "x-facebook", exists "x-linkedin-id") {
fileinto "social";
} elsif exists "list-unsubscribe"
{
fileinto "advertisements";
}Nota che utilizziamo:
anyof(exists "x-facebook", exists "x-linkedin-id")
invece di:
exists ["x-facebook", "x-linkedin-id"]
Poiché quest’ultimo controlla se sono stati impostati sia x-facebook che x-linkedin-id.
Per verificare effettivamente quale valore contiene un’intestazione, puoi usare il test header:
require "fileinto";
# Put all mails that have been sent without TLS/SSL into the same folder
if header :is "x-pm-transfer-encryption" "none" {
fileinto "unencrypted";
}Oltre all’operazione :is, che esegue una corrispondenza esatta, il comando header supporta anche :matches, che esegue una corrispondenza utilizzando caratteri jolly (ad esempio, “*@*.com” corrisponderà a qualsiasi indirizzo email che termina con punto com), e il comando :contains, che controlla se l’intestazione contiene una determinata stringa.
Per progettare i filtri Sieve, può essere utile recuperare le intestazioni di un’email. Per farlo nell’interfaccia web di Proton Mail, vai su Altro (∨) → Visualizza intestazioni. Si aprirà una nuova finestra contenente tutte le intestazioni dell’email.
Filtrare in base alla dimensione del messaggio in Sieve
È possibile gestire le email di grandi dimensioni in modo diverso rispetto a quelle piccole. Ad esempio, potresti voler contrassegnare le email di grandi dimensioni in modo da poterle eliminare per risparmiare spazio nella casella email. Questo può essere fatto nel seguente modo:
require ["imap4flags"];
# Flag emails that probably have large attachments (> 2 MiB)
if size :over 2M # you can also use 2097152 if you want, they are synonymous
{
addflag "\\Flagged";
}
# Automatically mark as read really small messages. They can't have much content anyway...
if size :under 1000
{
addflag "\\Seen";
}Come puoi vedere, le unità sono disponibili se vuoi specificare grandi dimensioni, aggiungendo la lettera corrispondente all’unità prevista subito dopo il numero. Sono disponibili tre unità: K per un kibioctet (o 1.024 byte), M per un mebioctet (o 1.048.576 byte) e G per un gibioctet (o 1.073.741.824 byte).
Tieni presente che in questo caso “over” significa maggiore di e “under” significa minore di. Ciò significa che se un messaggio ha una dimensione di esattamente 1.000 byte, nessuno dei due
size :under 1000
né
size :over 1000
corrisponderà.
Nota che i filtri Sieve non hanno accesso al contenuto effettivo e mostrano solo la dimensione crittografata.
Eseguire azioni avanzate sui messaggi
In Sieve puoi eseguire diverse reazioni a un messaggio. Abbiamo già presentato le azioni fileinto, addflag, discard e reject nelle sezioni precedenti. Qui presenteremo azioni più avanzate.
Messaggi di assenza e test della data
Puoi replicare la funzionalità di risposta automatica in Sieve usando il comando vacation. In effetti, la funzionalità di risposta automatica nelle tue Impostazioni si basa su Sieve per fare il suo lavoro. Ma usando le opzioni di vacation all’interno di uno script, hai molte più possibilità per personalizzare le tue risposte automatiche. Ad esempio, puoi adattare messaggi specifici a seconda delle condizioni. Nota: come per la funzionalità di risposta automatica nelle Impostazioni, l’azione vacation è disponibile solo nei piani a pagamento.
Il comando vacation invia una risposta di assenza a chiunque cerchi di contattarti. Spesso è associato ai test currentdate o date per inviare risposte in un intervallo di tempo specifico.
Supponiamo che io vada in vacanza dal 14 luglio 2017 al 14 agosto 2017, secondo l’orario del Colorado. Posso usare il seguente codice Sieve per impostare un autorisponditore:
require ["date", "vacation", "relational"];
if allof(currentdate :zone "US/Mountain" :value "ge" "date" "2017-07-14",
currentdate :zone "US/Mountain" :value "le" "date" "2017-08-14")
{
vacation "Queue you guys, I'm going on vacation.";
}Tra gli argomenti facoltativi del comando vacation ci sono gli argomenti :handle e :days. Per impostazione predefinita, Sieve non risponderà più volte allo stesso mittente entro un numero specifico di giorni chiamato timeout. Questo ti impedisce di inviare inavvertitamente numerose email automatiche.
Per controllare il timeout, puoi utilizzare il parametro :days. L’argomento :days viene utilizzato per specificare il periodo in cui gli indirizzi vengono conservati e non ricevono risposta, ed è sempre specificato in giorni. A volte, hai più comandi vacation nel tuo script Sieve e devi assicurarti che ognuno di essi invii una risposta almeno una volta (se la regola corrisponde). In tal caso è possibile utilizzare l’opzione :handle. L’argomento di :handle è una stringa che identifica il tipo di risposta inviata.
Per vedere come funziona, supponiamo che tu sia un insegnante. Gli insegnanti spesso ricevono i compiti via email. È utile organizzarli in una cartella dedicata. Inoltre, puoi rifiutare qualsiasi consegna che arrivi dopo la scadenza.
In un caso simile, potresti voler usare handle per assicurarti che le risposte vengano inviate quando necessario:
require ["date", "vacation", "reject", "fileinto", "relational"];
if header :contains "subject" "Homework assignment 1"
{
# remind people not to forget the attachments
if size :under 5000
{
vacation :handle "Homework assignment 1 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
}
# check if the student made the deadline
if currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
{
fileinto "Homework Assignment 1";
} else {
reject "Too late, you missed the deadline.";
}
}
if header :contains "subject" "Homework assignment 2"
{
# remind people not to forget the attachments
if size :under 5000
{
vacation :handle "Homework assignment 2 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
}
# check if the student made the deadline
if currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
{
fileinto "Homework Assignment 2";
} else {
reject "Too late, you missed the deadline.";
}
}Ecco tutti gli argomenti consentiti per la risposta di assenza, elencati nell’ordine in cui devono essere passati:
- :days è il numero di giorni durante i quali l’autorisponditore deve evitare di inviare una risposta allo stesso mittente dopo aver inviato un messaggio di assenza
- :subject è un prefisso (per impostazione predefinita auto) che l’autorisponditore deve usare per rispondere al mittente. Ad esempio, “Homework Assignment 2” riceverà una risposta con “late: Homework Assignment 2” se viene passato :subject “late”.
- :mime indica che la prima riga della risposta utilizza un formato specifico. Ciò consente al mittente di rispondere con messaggi HTML. Ad esempio, per scrivere una risposta in formato HTML, passa l’argomento :mime e scrivi nella prima riga della risposta Content-Type : text/html.
- :handle è una stringa che identifica il tipo di risposta inviata.
Tieni presente che il parametro :zone in currentdate è facoltativo e utilizzerà l’ora locale del server (Ginevra, Svizzera, nel caso di Proton Mail) se non viene impostato.
Il parametro zone accetta gli sfasamenti di fuso orario, che sono stringhe nel formato “+0100” che significa UTC+1, e i fusi orari effettivi nel database ICANN (vedi https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(nuova finestra)). L’ultima opzione è spesso più utile (pur non essendo uno standard Sieve) in quanto codifica anche l’ora legale di ciascun fuso orario.
Puoi confrontare le date utilizzando il normale parametro :is/ :contains/ :matches. Ad esempio, il seguente comando Sieve corrisponde a qualsiasi data nel mese di luglio 2017:
currentdate :zone "US/Mountain" :matches "date" "2017-07-??"
Ma nella maggior parte dei casi il parametro :value è molto più utile.
L’ultimo parametro che devi passare è il formato. Il formato codifica anche quale parte della data desideri confrontare. Nell’esempio fornito, abbiamo utilizzato il formato data. Tutti i formati supportati sono:
- year, l’anno codificato nel formato da “0000” a “9999”
- month, il mese codificato da “01” a “12”
- day, il giorno codificato da “01” a “31”
- date, codificato come yyyy-mm-dd
- hour, l’ora codificata da “00” a “23”
- minute, il minuto codificato da “00” a “59”
- second, il secondo codificato da “00” a “60” (60 è un secondo intercalare(nuova finestra), che si verifica solo alle 23:59:60 quando gli scienziati lo ritengono necessario)
- time, l’ora come hh:mm:ss
- iso8601, la data e l’ora secondo lo standard ISO8601, ad esempio: 2005-08-15T15:52:01+00:00
- std11, la data e l’ora secondo lo standard RFC2822, ad esempio: Mon, 15 Aug 2005 15:52:01 +0000
- zone, lo sfasamento di fuso orario nel formato +/-zzzz, ad esempio +0000 o -1200
- julian, il numero di giorni dal 17 novembre 1858 UTC
- weekday, il giorno della settimana a partire da domenica come 0 fino a sabato come 6
Infine, è anche possibile recuperare la data da un’intestazione invece di utilizzare currentdate. Questo comando date funziona allo stesso modo di currentdate, con la differenza che richiede una stringa aggiuntiva prima della stringa di formato: il nome dell’intestazione. Ad esempio:
date :zone "US/Mountain" :matches "received" "date" "2017-07-??"
Tieni presente che le intestazioni non sono necessariamente accurate: un mittente può modificarle a piacimento e di conseguenza non sono affidabili.
Considerazioni:
- L’autorisponditore non risponde ai messaggi generati automaticamente come le mailing list, le email inviate da un altro autorisponditore o i messaggi inviati da un indirizzo noreply.
- L’autorisponditore non invierà messaggi più volte allo stesso indirizzo email, tranne quando il comando vacation ha un :handle differente.
Gestione della scadenza
Una funzionalità esclusiva di Proton Mail è la possibilità di impostare un tempo di scadenza sui messaggi inviati, momento in cui il messaggio verrà eliminato dalla casella email del destinatario.
Puoi usare questa funzionalità anche per gestire i tuoi messaggi in arrivo aggiungendo un tempo di scadenza:
require "vnd.proton.expire"; # permanently delete all incoming and outgoing emails after 10 days expire "day" "10";
Lo script sopra eliminerà qualsiasi email ricevuta dopo 10 giorni. Questo esempio è un po’ estremo, poiché si applica a tutte le email. Dovresti invece probabilmente utilizzare una condizione per applicare lo script solo a un insieme specifico di email. Ad esempio, potresti far scadere qualsiasi messaggio proveniente da qualcuno che non è tra i tuoi contatti:
require ["extlists", "vnd.proton.expire"];
# permanently delete after 10 days any email not from me or from someone in my address book.
if not anyof(
header :list "from" ":addrbook:personal",
header :list "from" ":addrbook:myself"
) {
expire "day" "10";
}Nota: se il tempo di scadenza specificato supera i 730 giorni, verrà automaticamente limitato a 730 giorni.
Limitazioni di Sieve
Ci sono diverse limitazioni di Sieve che dovresti notare.
- I messaggi inviati non possono essere spostati manualmente o tramite filtro in Posta in arrivo/Bozze. Rimarranno sempre nella cartella Inviata e nelle cartelle/etichette applicate dall’utente o dal filtro.
- I messaggi ricevuti non possono essere spostati manualmente o tramite filtro in Bozze/Inviata.
- Le bozze non possono essere spostate manualmente o tramite filtro in Posta in arrivo/Inviata.
- Per i messaggi in Spam — o per i messaggi classificati come spam durante l’elaborazione — non inviamo messaggi di risposta automatica/fuori ufficio. Se hai bisogno di una funzionalità simile, considera di aggiungere una cartella personalizzata — ad esempio, mySpam — e di disattivare le relative notifiche.
- Limitazioni dei messaggi di risposta automatica/fuori ufficio
Nota sul supporto per le espressioni regolari
L’implementazione di Sieve da parte di Proton segue lo standard di filtraggio delle email Sieve, che include solo un supporto minimo per le espressioni regolari. Alcune sintassi abbreviate comuni per le espressioni regolari, come \b (limite di parola), \w (carattere alfanumerico), \W (carattere non alfanumerico) e \d (cifra), non sono supportate in Sieve. Di conseguenza, l’uso di queste abbreviazioni nei filtri potrebbe farli fallire silenziosamente. Questa limitazione è dovuta allo standard Sieve stesso, che privilegia la semplicità e la compatibilità tra le piattaforme. Per tutti i dettagli, consulta la bozza RFC sulle espressioni regolari di Sieve.
Lista delle azioni e dei test supportati
Pacchetti
Sieve supporta le seguenti estensioni. Puoi fare riferimento alla documentazione ufficiale per maggiori informazioni.
Data
- Uso: date
- Descrizione: (nuova finestra)Fornisce un modo per verificare le informazioni sulla data.
- Documentazione: https://tools.ietf.org/html/rfc5260(nuova finestra)
- Implementazione: il comparatore predefinito è i;ascii-numeric e non i;ascii-casemap. In effetti, date non è utile con il comparatore casemap.
- Vedi: Messaggi di fuori ufficio e test della data
Envelope
- Uso: envelope
- Descrizione: (nuova finestra)Definisce i test relativi all’envelope SMTP del messaggio.
- Documentazione: https://tools.ietf.org/html/rfc5228#section-5.4(nuova finestra)
- Vedi: Confronto con gli indirizzi in Sieve
FileInto
- Uso: fileinto
- Descrizione: applica un’etichetta a un messaggio o lo sposta in una cartella.
- Documentazione: https://tools.ietf.org/html/rfc5228#section-4.1(nuova finestra)
- Implementazione: le barre indicano il percorso completo delle cartelle e devono essere precedute da un carattere di escape se il nome di un’etichetta contiene una barra. Sono supportate le seguenti opzioni:
- “Lavoro“: questa è l’etichetta o la cartella chiamata ‘Lavoro’
- “Lavoro/Progetto1“: questa è la sottocartella ‘Progetto1’ che si trova nella cartella ‘Lavoro’
- “Lavoro/Progetto1/Documenti“: questa è la sottocartella ‘Documenti’ che si trova nella sottocartella ‘Progetto1’ che si trova nella cartella ‘Lavoro’
- “Lavoro/Varie\\/Altri“: questa è la sottocartella ‘Varie/Altri’ che si trova nella cartella ‘Lavoro’
- Vedi: Guida introduttiva
Imap4flags
- Uso: imap4flags
- Descrizione: applica un flag a un messaggio.
- Documentazione: https://tools.ietf.org/html/rfc5232(nuova finestra)
- Implementazione: i parametri delle liste di variabili non sono supportati. Utilizza invece l’estensione variables.
- Vedi: Guida introduttiva
Rifiuta
- Uso: reject
- Descrizione: rifiuta un messaggio con un messaggio specifico.
- Documentazione: https://tools.ietf.org/html/rfc5429(nuova finestra)
- Vedi: Guida introduttiva
Vacation
- Uso: vacation
- Descrizione: invia un messaggio di risposta automatica.
- Documentazione: https://tools.ietf.org/html/rfc5230(nuova finestra)
- Vedi: Messaggi di fuori ufficio e test di data
Variables
- Uso: variables
- Descrizione: crea e utilizza variabili.
- Documentazione: https://tools.ietf.org/html/rfc5229(nuova finestra)
- Vedi: Creazione di variabili
Relazionale
- Uso: relazionale
- Descrizione: fornisce operatori di confronto relazionali.
- Documentazione: https://tools.ietf.org/html/rfc5231
Regex
- Uso: regex
- Descrizione: fornisce gli operatori di corrispondenza regex.
- Documentazione: https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html
Comparatore numerico ASCII
- Uso: comparator-i;ascii-numeric
- Descrizione: fornisce il confronto tra numeri.
- Documentazione: https://tools.ietf.org/html/rfc5231(nuova finestra)
Liste archiviate esternamente
- Uso: extlists
- Descrizione: fornisce l’accesso alle liste di contatti.
- Documentazione: https://tools.ietf.org/html/rfc6134(nuova finestra)
- Implementation: le seguenti liste sono supportate
- addrbook:personal : Lista di contatti personali. Sono supportate le seguenti query:
- label[.starts-with / .ends-with / .contains]=<gruppo: stringa>: operazione su un gruppo di contatti;
- keypinning=<valore: true / false> definizione della chiave pubblica del contatto;
- encryption=<valore: true / false> crittografia predefinita del contatto;
- signing=<valore: true / false> firma predefinita del contatto.
- :addrbook:myself Indirizzi appartenenti all’utente corrente;
- :addrbook:organization Indirizzi appartenenti ai membri dell’organizzazione corrente;
- :incomingdefaults:inbox Lista degli indirizzi consentiti
- :incomingdefaults:spam Lista Bloccati
- addrbook:personal : Lista di contatti personali. Sono supportate le seguenti query:
- Vedi: Accedere alla tua lista di contatti
Eval
- Uso: vnd.proton.eval
- Descrizione: valuta una semplice funzione aritmetica fornita in una stringa.
- Documentazione: Trasformazione delle variabili
Include
- Uso: include
- Descrizione: gestisce il flusso di lavoro di Sieve.
- Documentazione: https://tools.ietf.org/html/rfc6609(nuova finestra)
- Implementazione: è supportato solo il nodo return.
Scadenza
- Uso: vnd.proton.expire
- Descrizione: gestisce la scadenza dei messaggi.
- Documentazione: Gestione della scadenza
Test
Currentdate
- Uso:
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>
- Descrizione: esegue un test utilizzando la data corrente sul server Proton Mail
- Pacchetto: date
- Vedi: Elenco delle azioni e dei test supportati
Data
- Uso:
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list
- Descrizione: esegue un test utilizzando la data descritta da un’intestazione.
- Pacchetto: date
- Vedi: Elenco delle azioni e dei test supportati
HasFlag
- Uso:
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
- Descrizione: Verifica se un determinato messaggio ha un determinato flag.
- Pacchetto: imap4flags
- Vedi: Guida introduttiva
Envelope
- Uso:
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>
- Descrizione: Verifica se la parte specificata della busta SMTP corrisponde alla chiave specificata.
- Pacchetto: envelope
- Vedi: Confronto con gli indirizzi in Sieve – Avanzate
Indirizzo·
- Uso:
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>
- Descrizione: Verifica se le intestazioni specificate, analizzate come indirizzo, corrispondono alle chiavi specificate.
- Pacchetto: <predefinito>
- Vedi: Confronto con gli indirizzi in Sieve
Intestazione
- Uso:
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>
- Descrizione: Verifica se le intestazioni specificate corrispondono alle chiavi specificate.
- Pacchetto: <predefinito>
- Vedi: Confronto con altri campi in Sieve
HasExpiration
- Uso:
hasexpiration
- Descrizione: Verifica se un messaggio ha un tempo di scadenza impostato.
- Pacchetto: vnd.proton.expire
Exists
- Uso:
exists <header-names: string-list>
- Descrizione: Verifica se (tutte) le intestazioni specificate esistono.
- Pacchetto: <predefinito>
- Vedi: Confronto con altri campi in Sieve
Scadenza
- Uso:
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
- Descrizione: Confronta il tempo di scadenza del messaggio con le chiavi fornite. Il test fallirà se viene eseguito su un messaggio senza scadenza.
- Pacchetto: vnd.proton.expire
Size
- Uso:
size <":over" / ":under"> <limit: number>
- Descrizione: Verifica se la dimensione totale del messaggio (inclusi gli allegati) è superiore o inferiore a un certo limite.
- Pacchetto: <predefinito>
- Vedi: Filtrare in base alla dimensione del messaggio in Sieve
String
- Uso:
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
- Descrizione: Valuta se una qualsiasi delle stringhe sorgente corrisponde a una qualsiasi chiave.
- Pacchetto: variables
Anyof
- Uso:
anyof <tests: test-list>
- Descrizione: Esegue un OR logico sui test forniti.
- Pacchetto: <predefinito>
- Vedi: Guida introduttiva
Allof
- Uso:
allof <tests: test-list>
- Descrizione: Esegue un AND logico sui test forniti.
- Pacchetto: <predefinito>
- Vedi: Guida introduttiva
Not
- Uso:
not <test: test>
- Descrizione: Inverte il risultato del test fornito.
- Pacchetto: <predefinito>
- Vedi: Guida introduttiva
True
- Uso:
true
- Descrizione: Trova sempre una corrispondenza.
- Pacchetto: <predefinito>
False
- Uso:
false
- Descrizione: Non trova mai una corrispondenza.
- Pacchetto: <predefinito>
Azioni
Require
- Uso:
require <packages: string-list>
- Descrizione: Carica un’estensione specificata in modo da poterne utilizzare i metodi o le modifiche.
- Pacchetto: <predefinito>
- Vedi: Guida introduttiva
FileInto
- Uso:
fileinto <folder: string>
- Descrizione: Sposta il messaggio in fase di elaborazione in una determinata cartella.
- Pacchetto: fileinto
- Vedi: Guida introduttiva
Addflag
- Uso:
addflag <list-of-flags: string-list>
- Descrizione: Aggiunge il flag specificato al messaggio in fase di elaborazione.
- Pacchetto: imap4flags
- Vedi: Guida introduttiva
Removeflag
- Uso:
removeflag <list-of-flags: string-list>
- Descrizione: Rimuove i flag specificati dal messaggio in fase di elaborazione.
- Pacchetto: imap4flags
Setflag
- Uso:
setflag <list-of-flags: string-list>
- Descrizione: Rimuove tutti i flag e imposta i flag specificati sul messaggio in corso di elaborazione.
- Pacchetto: imap4flags
Stop
- Uso:
stop
- Descrizione: Interrompe l’elaborazione di tutti i filtri Sieve. I filtri Sieve successivi non verranno eseguiti.
- Pacchetto: <predefinito>
Return
- Utilizzo:
return
- Descrizione: Interrompe l’elaborazione del filtro Sieve corrente. I filtri Sieve successivi verranno comunque eseguiti.
- Pacchetto: include
Set
- Uso:
set [MODIFIER] <name: string> <value: string>
- Descrizione: Crea nuove variabili associando il nome e il valore specificati.
- Pacchetto: variables
- Vedi: Creazione di variabili
Discard
- Uso:
discard
- Descrizione: Scarta il messaggio al termine di questo filtro Sieve. Dopo lo scarto, non verrà eseguito alcun altro filtro Sieve.
- Pacchetto: <predefinito>
Keep
- Uso:
keep
- Descrizione: Annulla l’ultimo comando discard. Avrà effetto solo se si trova nello stesso filtro Sieve. Se non è stato eseguito alcuno scarto, non farà nulla.
- Pacchetto: <predefinito>
Rifiuta
- Uso:
reject <reason: string>
- Descrizione: Invia un’email all’indirizzo SMTP del mittente con il motivo indicato e scarta immediatamente questo messaggio. Il comando keep non annullerà questa azione.
- Pacchetto: <predefinito>
- Vedi: Primi passi, Messaggi di risposta automatica e test sulle date
Expire
- Utilizzo:
expire <unit: "day" / "minute" / "second"> <value: string>
- Descrizione: Fa scadere un messaggio dopo il tempo specificato.
- Pacchetto: vnd.proton.expire
- Vedi: Gestione della scadenza
Unexpire
- Uso:
unexpire
- Descrizione: Rimuove il tempo di scadenza di un messaggio.
- Pacchetto: vnd.proton.expire
Vacation
- Uso:
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
- Descrizione: Invia una risposta automatica all’indirizzo SMTP del mittente con il motivo specificato nel corpo del messaggio.
- Pacchetto: vacation (richiede un account a pagamento)
- Vedi: Messaggi di risposta automatica e test sulle date
Lista esterna valida
- Utilizzo:
valid_ext_list <ext-list-names: string-list>
- Descrizione: Verifica se tutte le liste esterne fornite sono supportate e valide.
- Pacchetto: extlists



