Pagina principală Proton

Filtru Sieve (filtre personalizate avansate)

Lectură
40 (de) min
Categorie
Primire și citire mesaje

Proton Mail oferă utilizatorilor diverse moduri de a filtra automat e-mailurile prin atribuirea de etichete sau prin sortarea acestora în foldere. În general, există trei metode:

  1. Adăugarea expeditorilor în Lista de adrese blocate și Listele de adrese permise astfel încât e-mailurile acestora să fie întotdeauna sau niciodată trimise în folderul de spam;
  2. Crearea unui filtru personalizat utilizând interfața interactivă a Proton Mail;
  3. [Cel mai avansat] Crearea unui filtru personalizat în Sieve.

Dintre aceste metode, crearea unui filtru personalizat în Sieve oferă cea mai mare versatilitate, dar este și mai complicat de utilizat. Din acest motiv, considerăm Sieve o caracteristică avansată pentru utilizatorii cu o anumită experiență tehnică. Pentru majoritatea utilizatorilor, interfața interactivă este potrivită pentru a crea filtrele personalizate de care aveți nevoie.

Cuprins

Ce este Sieve?

Sieve este un limbaj de programare utilizat pentru filtrarea e-mailurilor. Puteți crea filtre în Sieve prin scrierea unor reguli simple. De exemplu, „Atribuie tuturor mesajelor de la Kyle eticheta verde”. Combinarea acestor reguli poate crea un sistem de filtrare sofisticat.

Puteți scrie reguli Sieve de la zero, le puteți prelua din exemple precum cele din acest articol sau puteți utiliza un software care să vă ușureze sarcina.

De fapt, vă oferim deja o modalitate de a crea filtre Sieve utilizând interfața interactivă, care folosește datele introduse de dvs. pentru a genera filtre Sieve. O altă modalitate excelentă de a învăța Sieve este să creați filtre folosind interfața interactivă și apoi să le editați în Sieve, deoarece interfața interactivă în sine utilizează un subset de Sieve.

De exemplu, comparați următorul filtru creat utilizând interfața interactivă…


… cu codul pentru același filtru vizualizat în editorul Sieve:

Acest articol vă va introduce în Sieve și vă va explica cum să vă scrieți propriile filtre Sieve. Dacă aveți nevoie de mai multe informații despre utilizarea Sieve, există numeroase alte tutoriale online care vă pot ajuta. Dacă aveți întrebări despre Sieve în Proton Mail care nu își găsesc răspunsul pe această pagină, vă puteți adresa oricând echipei de asistență aici.

Primii pași

Pentru a începe să creați filtre Sieve, conectați-vă la mail.proton.me(fereastră nouă), accesați Setări → Toate setările → Proton Mail → Filtre → Adăugare filtru Sieve.

Un script Sieve este format dintr-o listă de comenzi. În majoritatea scripturilor, acesta începe cu o comandă require. Comanda require încarcă o extensie care oferă o anumită funcționalitate. De exemplu, pentru a atribui o etichetă sau pentru a plasa un mesaj într-un folder, avem nevoie de comanda fileinto.

Pentru a încărca această comandă, scriem pur și simplu:

require "fileinto";

Pentru a încărca mai multe extensii, puteți utiliza o listă:

require ["fileinto", "imap4flags"];

În acest caz, imap4flags încarcă o extensie care vă permite să marcați e-mailurile ca fiind citite. După comanda require, veți efectua adesea unele teste asupra mesajului primit. Acest lucru se realizează prin combinarea comenzii if cu o altă comandă, cum ar fi address sau header.

În cele din urmă, dacă testele reușesc, puteți aplica o acțiune asupra unui mesaj. De exemplu, să presupunem că dorim să plasăm toate e-mailurile de la un anumit expeditor în același folder și să marcăm e-mailul primit ca fiind citit. Acest lucru ar putea fi scris astfel:

require ["fileinto", "imap4flags"];
# I don't really like Spott
if address :is "from" "Spott.Tenerman@northpark.example.com"
{ 
    addflag "\\Seen";
    fileinto "enemies";
}

Rețineți că simbolul # indică un comentariu și nu este interpretat ca parte a scriptului Sieve. De asemenea, folderul sau eticheta pe care o setați (aici, enemies ) trebuie să existe în mediul dvs.: puteți afla cum să creați foldere și etichete aici. După introducerea acestui filtru, apăsați pe butonul SALVARE. Filtrul dvs. va rula acum pentru fiecare e-mail primit.

Desigur, este posibil să doriți să plasați e-mailurile de la mai mulți expeditori în același folder. În acest caz, puteți transmite o listă de șiruri de caractere către comanda address (un șir de caractere(fereastră nouă) este o serie de caractere, în acest caz o adresă de e-mail):

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";
}

Rețineți că, de fiecare dată când puteți transmite un șir de caractere unei condiții de testare, de obicei este posibil să transmiteți și o listă. Sistemul va încerca apoi să găsească o potrivire prin testarea oricăruia dintre șirurile din listă. Acest lucru nu se aplică în cazul unor comenzi precum fileinto, addflag, etc.

Dar Sieve este mai puternic decât simpla reordonare a căsuței dvs. poștale. Acesta vă permite, de asemenea, să respingeți e-mailurile cu un mesaj de răspuns:

require "reject";
# Reject mails that spell my name wrong
if header :contains "subject" "Kyhel"
{
    reject "My name is not Kyhel";
}

Utilizarea testelor

Combinarea testelor în Sieve

Așa cum v-am arătat în secțiunea Primii pași, puteți efectua teste utilizând comanda if pe mesajele primite pentru a determina dacă un e-mail ar trebui să fie afectat de o comandă require.

Pe lângă comanda if, există și alte comenzi de testare care vă permit să vă structurați scriptul într-un mod simplu.

Else

Comanda else vă permite să faceți ceva atunci când comanda if nu și-a executat acțiunile. Un exemplu în acest sens este:

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";
}

Aici, e-mailul va fi mutat în folderul Kenny dacă subiectul este exact mmph mmph. În celălalt caz (deci atunci când subiectul nu este exact mmph mmph), e-mailul va fi mutat în folderul Understandable.

Elsif

Comanda elsif este contracția de la else if. Asemenea comenzii else, aceasta va fi executată dacă condiția if este falsă, dar numai dacă condiția elsif este corectă. Dacă condiția elsif nu este corectă, atunci va fi executat următorul bloc elsif sau else.

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";
}

Rețineți că într-o singură rulare va fi executat doar unul dintre blocurile if, elsif sau else.

Anyof

Uneori, trebuie să executați o comandă atunci când unul dintre mai multe teste reușește. Pentru aceasta, puteți utiliza comanda anyof. Acest lucru se realizează scriind anyof urmat de o paranteză „(”, instrucțiunile pe care doriți să le testați separate prin virgule și o paranteză de închidere „)”.

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";
}

Acest script va plasa mesajele care provin de la kenny@northpark.example.com sau care conțin mmph mmph în linia de subiect în folderul Kenny.

Allof

Există, de asemenea, și echivalentul lui anyof: allof. Acest lucru vă permite să executați o comandă numai atunci când sunt îndeplinite toate condițiile date:

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";
}


Acest script va pune mesajele care provin de la kenny@northpark.example.com și conțin mmph mmph în linia de subiect în folderul Kenny.

Not

În cele din urmă, uneori trebuie să aplicați o comandă dacă ceva nu se potrivește. Adăugarea not în fața instrucunii va asigura că acest lucru se întâmplă:

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";
}

Ceea ce este echivalent cu:

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";
}

Acest lucru pune toate e-mailurile care nu conțin „real guitar” în linia de subiect în folderul Young people.

Desigur, este posibil să combinați toate aceste teste împreună. De exemplu, s-ar putea să doriți să marcați cu stea un e-mail dacă acesta nu provine de la Kenny și, de asemenea, nu conține mmph mmph în subiect:

require ["fileinto", "imap4flags"];
if not anyof (    header :contains "subject" "mmph mmph", 
    address :is "from" "Kyhel.Broski@northpark.example.com" ) { 
    addflag "\\Flagged";
}

Efectuarea de teste pe antete

Utilizând comanda address, puteți efectua teste pe antetele de adresă, cum ar fi antetul from, to și sender. Puteți extrage diferite părți ale adresei de e-mail utilizând unul dintre următorii indicatori:

  • :localpart — partea dinaintea simbolului „at” (@)
  • :domain — partea de după simbolul „at” (@)
  • :all — întreaga adresă

Următorul fragment de cod explică utilizarea acestei comenzi:

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";
}

Pe scurt, acest script va pune tot ceea ce este trimis de pe domeniul northpark.example.com în PaperPeople și de pe springfield.example.com în YellowPeople.

Mai mult, indiferent de pe ce domeniu este trimis un e-mail, dacă partea dinaintea @ este egală cu chef (de exemplu, chef@example.com), atunci mesajul va fi marcat. O altă utilizare interesantă este stocarea automată a tot ceea ce este trimis către o adresă într-un folder:

require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :localpart "to" "support"
{
    fileinto "Support";
}

Avansat

Comanda envelope vă permite să efectuați mai multe teste. În general, testul address preia doar valoarea din antet. Cu toate acestea, în sesiunea SMTP se poate specifica o altă adresă from decât cea din antet.

În interfața de antet Proton Mail, envelope-from este echivalent cu antetul return-path, iar envelope-to este echivalent cu antetul x-original-to.

Utilizând comanda envelope, puteți prelua adresele reale to: și from: din envelope. Rețineți că nu există alte câmpuri în afară de acestea două, prin urmare sender nu există în această comandă. De asemenea, rețineți că envelope se află într-o extensie și, prin urmare, este necesar să solicitați (require) mai întâi această extensie.

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";
}

Utilizarea comparatoarelor pentru a evalua două valori

Atunci când un test evaluează două valori, este posibil să specificați cum se realizează această comparație utilizând diferiți indicatori numiți comparators. În prealabil, am utilizat deja două comparatoare: :is și :contains, care verifică dacă șirul dat este exact egal cu valoarea specifică și dacă valoarea specifică conține șirul dat, ca în următorul 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";
}

Comparatorul :matches poate fi, de asemenea, utilizat pentru a defini un format mai specific. Acesta va compara ambele valori de la început până la sfârșit, la fel ca comparatorul :is. Cu toate acestea, în cazul lui :matches, valoarea pe care ați definit-o poate conține valorile ? și *. Semnul de întrebare se va potrivi cu un singur caracter, iar steaua (numită asterisc) se va potrivi cu zero sau mai multe caractere.

Cu acest format, puteți crea acest test:

require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph*" { 
    addflag "\\Flagged";
}

În acest exemplu, testul va reuși dacă subiectul mesajului începe cu mmph și apoi conține orice caracter sau caractere după acesta. Cu alte cuvinte, e-mailul va fi marcat atunci când subiectul începe cu „mmph”. „mmph mmph” și „mmph mmph Hello” se vor potrivi ambele; „Hello mmph” și „Springfield sales” nu se vor potrivi.

Steaua poate fi folosită, de asemenea, în mijlocul valorii și de mai multe ori, după cum urmează:

require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph *mmph *mmph" { 
    addflag "\\Flagged";
}

Acest test se va potrivi dacă subiectul începe cu „mmph ” (cu un spațiu), conține un alt „mmph ” (cu un spațiu) și se termină cu „mmph” (fără spațiu). Subiectele care se potrivesc sunt „mmph mmph mmph”, „mmph mmph mmphmmph” sau „mmph is mmph and mmph”.

Acest comparator :matches poate fi foarte util la compararea adreselor. După cum probabil știți, Proton Mail are mai multe domenii: protonmail.com și proton.me. Dacă doriți să verificați dacă un mesaj provine de la un utilizator Proton Mail, puteți utiliza acest script:

require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :domain :matches "from" "protonmail.*"
{
    fileinto "Internal";
}

Dacă, din anumite motive, trebuie să potriviți exact caracterul * sau ?, atunci le puteți pune sub formă de citat (quote) adăugând \\ înainte: \\* se va potrivi cu o stea, iar \\? se va potrivi cu un semn de întrebare.

Rețineți că acceptăm, de asemenea, extensia regex, care definește și comparatorul :regex. Acest comparator este o versiune mai precisă a lui :matches, dar este foarte complex. Pentru mai multe informații, vă rugăm să citiți documentația oficială(fereastră nouă).

În unele cazuri (după cum veți vedea în continuarea acestui articol), s-ar putea să doriți să comparați valori numerice. Pachetul relational este creat pentru această utilizare. Acest pachet definește comparatorul :value, care este urmat de tipul de comparație.

Acesta vă permite să verificați dacă o valoare este mai mare decât (tipul de comparație fiind “gt”), mai mare sau egală cu (“ge”), egală cu (“eq”), mai mică sau egală cu (“le”) sau mai mică decât (“lt”) valoarea dată.

Atunci când se compară valori numerice, pachetul comparator-i;ascii-numeric este, de asemenea, foarte util. Acesta îi transmite interpretorului de script faptul că conținutul șirului este un număr și nu un șir obișnuit. Poate fi utilizat prin adăugarea la test a :comparator “i;ascii-numeric”.

Cu toate aceste informații, putem construi următorul script:

require ["fileinto", "relational", "comparator-i;ascii-numeric"];  
if header :value "ge" :comparator "i;ascii-numeric" "subject" "2"   
{    
 fileinto "Dummy example";
}

Acest test va muta mesajul în folderul Dummy example dacă subiectul este mai mare sau egal cu 2. Dacă subiectul nu este un număr, ci un text, atunci testul va eșua. Ca atare, acest exemplu pare foarte stupid, dar este destinat să fie utilizat în combinație cu alte extensii, cum ar fi date, pe care le vom defini mai târziu în acest articol.

Comparația utilizând contextul în Sieve

De asemenea, puteți accesa informații legate de contul dvs. și de contextul Proton Mail în general, utilizând extensii. De exemplu, puteți verifica dacă adresa expeditorului se află în lista dvs. de contacte.

Accesarea listei dvs. de contacte

Puteți accesa lista dvs. de contacte utilizând extensia extlists. Combinat cu testele de antet, puteți verifica apoi dacă un contact se află în lista dvs. de contacte.

require ["fileinto", "extlists"];  
# Checks that the sender is in your personal address book
if header :list "from" ":addrbook:personal?label=Family"   
{    
 fileinto "Known"; 
}

Acest test va marca un mesaj cu eticheta Known dacă expeditorul este conținut în lista :addrbook:personal?label=Family. Lista poate fi împărțită în două părți. În primul rând, :addrbook:personal înseamnă că adresa se află în agenda dvs. personală. În al doilea rând, label=Family restrânge și mai mult lista, specificând că, pe lângă faptul că se află în agenda de adrese, contactul trebuie să aparțină și grupului de contacte Family. Dacă aveți nevoie, puteți schimba această etichetă cu un alt grup de contacte. Ați putea folosi :addrbook:personal?label=Work dacă doriți, caz în care testul ar reuși numai dacă expeditorul se află în agenda dvs. de adrese și în grupul de contacte Work.

Mai general, o listă respectă Tag URI Scheme(fereastră nouă) și puteți adăuga parametri suplimentari pentru a vă restrânge filtrele. Apoi puteți utiliza această listă după cum urmează:

require ["fileinto", "extlists"];  
# replace :your:list:here by the list you want to use
if header :list "from" ":your:list:here"
{    
 # some actions... 
}

Am furnizat patru liste diferite:

  • :addrbook:personal¹ verifică dacă o adresă se află în lista dvs. de contacte. Lista acceptă parametrul label care se potrivește cu un anumit grup de contacte. Acest parametru poate fi declinat în patru subversiuni:
    • :addrbook:personal?label=something se va potrivi cu un contact care se află în grupul de contacte „something”;
    • :addrbook:personal?label.starts-with=something se va potrivi cu un contact care aparține de cel puțin un grup care începe cu „something”;
    • :addrbook:personal?label.ends-with=something se va potrivi cu un contact care aparține de cel puțin un grup care se termină cu „something”;
    • :addrbook:personal?label.contains=something se va potrivi cu un contact care aparține de cel puțin un grup care conține „something”.

De asemenea, puteți accesa informații criptografice referitoare la e-mailul corespunzător:

  • :addrbook:personal?keypinning=true se va potrivi cu un contact care are o cheie de încredere. Schimbarea din true în false se va potrivi cu un contact care nu are o cheie de încredere;
  • :addrbook:personal?encryption=true se va potrivi cu un contact pentru care criptarea este activată. Schimbarea din true în false se va potrivi cu un contact pentru care criptarea nu este configurată sau este dezactivată;
  • :addrbook:personal?signing=true va corespunde unui contact pentru care semnarea este activată. Schimbarea true în false va corespunde unui contact pentru care semnarea este dezactivată.
  • :addrbook:myself¹ corespunde fiecărei adrese care vă aparține;
  • :addrbook:organization corespunde fiecărei adrese care aparține unui membru din organizația din care faceți parte;
  • :incomingdefaults:inbox verifică dacă adresa se află în Lista dvs. de adrese permise;
  • :incomingdefaults:spam verifică dacă adresa se află în Lista dvs. de adrese blocate.

Combinat cu extensia de variabile (descrisă în paragraful următor), variabilele de potrivire vor fi modificate. Variabila de potrivire ${0} va conține întotdeauna ultima adresă de e-mail din lista specificată. Dacă lista a fost marcată cu nota 1, variabila de potrivire ${1} va conține numele afișat.

De exemplu, cu listele de mai jos, puteți crea un filtru care va șterge toate e-mailurile primite de la oricine altcineva în afară de familia dvs. sau de cineva din lista dvs. de adrese permise:

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
}

Dacă această condiție este îndeplinită, acțiunea discard va fi executată. Această acțiune șterge e-mailul imediat și permanent. De asemenea, ați putea pur și simplu să îl mutați în folderul de gunoi folosind o acțiune fileinto în loc de discard: fileinto “trash”;.

Crearea variabilelor

Un alt instrument util la gestionarea contextului este definirea unei variabile. O variabilă este o locație temporară de stocare în care puteți pune text și pe care o puteți eticheta cu un nume. Ulterior, veți putea reutiliza acest conținut apelându-l după nume. De exemplu, ați putea avea următorul 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}";

Scopul acestui script este de a respinge un e-mail cu un mesaj personalizat. Dacă e-mailul inițial este de la kenny și subiectul său este „mmph mmph”, variabila „message” este creată, conținând mmph mmph. În caz contrar, mesajul va fi completat cu „Ne pare rău, nu doresc e-mailuri astăzi!”. Apoi, la ultimul pas, reutilizăm această variabilă în comanda reject.

Sieve nu definește nativ variabilele, așa că acestea sunt definite în extensia variables, care trebuie să fie solicitată la începutul scriptului dvs. Există două moduri de a defini o variabilă.

  • Crearea explicită a unei variabile:

Acțiunea set este furnizată pentru a crea o variabilă.

require "variables";
# Create a variable called "labelname" and containing the string "Work".
set "labelname" "Work";

Primul șir este numele variabilei dvs., iar al doilea este valoarea variabilei dvs. Astfel, exemplul anterior creează o variabilă numită labelname care conține Work.

Odată ce o variabilă este definită, o puteți apela adăugând următorul format într-un șir: ${name}, unde name este numele variabilei dvs. Când este executat, acesta va fi înlocuit cu valoarea variabilei. (Dacă nu ați definit variabila, aceasta va fi înlocuită cu un șir gol.) Astfel, în următorul 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}";

E-mailul dvs. va fi etichetat cu eticheta /Work. Deoarece am definit deja variabila labelname, aceasta este înlocuită cu Work. Cu toate acestea, foldername nu este definită, așa că este pur și simplu eliminată.

  • Atribuirea implicită a unei variabile:

Cel mai interesant caz de utilizare a variabilelor este atunci când se utilizează un test :matches. Să luăm următorul exemplu, în care expeditorul e-mailului este 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}";
}

Când este utilizat cu extensia de variabile, rezultatul unei operații match va fi stocat în variabile. Mai multe variabile vor fi setate cu un nume numeric. Mai întâi, variabila 0 va conține potrivirea completă (în exemplul nostru, aceasta va fi adresa completă: test@proton.me). Apoi, primul grup de potrivire va fi atribuit variabilei 1 (în exemplul nostru, acesta va fi test), al doilea grup de potrivire va fi atribuit celei de-a doua variabile (proton.me) și așa mai departe, până la ultimul grup de potrivire.

În exemplul nostru, comanda fileinto este executată. Locația este definită ca ${1}, care este recunoscută ca o variabilă și, prin urmare, înlocuită cu valoarea sa, calculată mai sus: test.

Rețineți că este posibil, de asemenea, să atribuiți variabile într-un test :regex, utilizând grupuri de potrivire a expresiilor regulate.

Transformarea variabilelor

O posibilitate interesantă este transformarea variabilelor. Pentru aceasta, cuvântul-cheie set poate fi utilizat cu o combinație de indicatori care pot fi folosiți pentru a schimba valoarea înainte de a o atribui variabilei.

  • :lower va schimba valoarea unei variabile în litere mici;
  • :upper va schimba valoarea unei variabile în litere mari;
  • :lowerfirst va schimba prima literă a valorii variabilei în literă mică;
  • :upperfirst va schimba prima literă a valorii variabilei în literă mare;
  • :quotewildcard va pune între ghilimele orice asterisc conținut în șir, astfel încât să poată fi utilizat literal într-o instrucțiune de potrivire;
  • :length va returna lungimea valorii.

Rețineți că puteți reutiliza, de asemenea, o variabilă definită într-o altă acțiune set. Să ne îmbunătățim exemplele anterioare:

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}";

Pas cu pas, filtrul va crea trei variabile. Prima comandă set va crea variabila labelname. Conținutul variabilei este Work. Într-adevăr, valoarea inițială WORK este transformată utilizând atât indicatorul :lower, cât și :upperfirst, schimbând forma în work și apoi în Work.

A doua comandă set va crea o a doua variabilă numită foldername, care va conține șirul Geneva. Într-adevăr, au fost utilizați indicatorii :lower și :upperfirst.

În cele din urmă, este creată variabila location. Valoarea „${foldername}/${labelname}” conține două variabile: foldername și labelname. Astfel, interpretul Sieve va înlocui aceste variabile cu valorile lor: Work și Geneva.

În cele din urmă, variabila location este utilizată ca argument pentru comanda fileinto. Astfel, e-mailul va fi mutat în folderul al cărui nume este valoarea variabilei location: Work/Geneva.

Comparatoarele pot fi aplicate, de asemenea, variabilelor de potrivire:

require "variables";
require "fileinto";
if address :all :matches "from" "*@*" {
    set :lower :upperfirst "fileintovar" "${1}";
    fileinto "${fileintovar}";
}

Aici, dacă expeditorul e-mailului este test@proton.me, acesta va fi marcat cu eticheta Test.

O altă modalitate de a schimba valoarea unei variabile este utilizarea extensiei vnd.proton.eval. Această extensie definește noul indicator :eval, care vă va permite să efectuați câteva calcule simple:

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}";
}

În acest exemplu, considerând în continuare că e-mailul provine de la test@proton.me, e-mailul va fi marcat cu valoarea 478. Într-adevăr, lungimea primei variabile de potrivire este de 19, iar rezultatul calculului 19 * 25 – 1 / 8 + 3 este rotunjit prin adaos la 478.

Acest lucru poate părea inutil la început, dar această extensie are mai mult sens combinată cu alte operații.

Compararea cu alte câmpuri în Sieve

Potrivirea pe antete specifice este de asemenea posibilă. De exemplu, pentru a pune toate mesajele trimise către liste (adesea acestea sunt mesaje de marketing sau buletine informative), puteți proceda astfel:

require "fileinto";
# Filter all lists into the same folder
if exists "list-unsubscribe"
{
    fileinto "advertisements";
}

Pentru a sorta e-mailurile de pe rețelele de socializare în propriul lor folder, ați putea scrie:

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";
}

Rețineți că folosim:

anyof(exists "x-facebook", exists "x-linkedin-id")

în loc de:

exists ["x-facebook", "x-linkedin-id"]

Deoarece cea din urmă verifică dacă au fost setate atât x-facebook, cât și x-linkedin-id.

Pentru a vedea efectiv ce valoare conține un antet, puteți utiliza testul 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";
}

Pe lângă operația :is, care realizează o potrivire exactă, comanda header acceptă și :matches, care realizează potriviri utilizând asteriscuri (de exemplu, “*@*.com” va corespunde oricărei adrese de e-mail care se termină în dot com) și comanda :contains, care verifică dacă antetul conține un anumit șir.

Pentru a crea filtre Sieve, poate fi util să preluați antetele unui e-mail. Pentru a face acest lucru în interfața web Proton Mail, mergeți la Detalii () → Afișare antete. Se va deschide o fereastră nouă care va conține toate antetele e-mailului.

Filtrarea în funcție de mărimea mesajului în Sieve

Este posibil să tratați e-mailurile mari diferit de cele mici. De exemplu, este posibil să doriți să marcați mesajele mari, astfel încât să le puteți șterge pentru a economisi spațiu în căsuța poștală. Acest lucru se poate realiza în următorul mod:

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";
}

După cum puteți vedea, sunt disponibile unități de măsură dacă doriți să specificați mărimi mari, prin adăugarea literei corespunzătoare unității dorite imediat după număr. Sunt disponibile trei unități: K pentru un kibioctet (sau 1024 de octeți), M pentru un mebioctet (sau 1 048 576 de octeți) și G pentru un gibioctet (sau 1 073 741 824 de octeți).

Rețineți că „over” în acest caz înseamnă mai mare decât, iar „under” înseamnă mai mic decât. Aceasta înseamnă că dacă un mesaj are o mărime de exact 1000 de octeți, atunci nici

size :under 1000

și nici

size :over 1000

nu se va potrivi.

Rețineți că filtrele Sieve nu au acces la conținutul real și afișează doar mărimea criptată.

Efectuarea de acțiuni avansate asupra mesajelor

Puteți executa diferite reacții la un mesaj în Sieve. Am prezentat deja acțiunile fileinto, addflag, discard și reject în secțiunile anterioare. Aici vom prezenta acțiuni mai avansate.

Mesaje de vacanță și teste de dată

Puteți replica caracteristica de răspuns automat în Sieve utilizând comanda vacation. De fapt, caracteristica de răspuns automat din setările dvs. se bazează pe Sieve pentru a-și face treaba. Dar, prin utilizarea opțiunilor de vacanță dintr-un script, aveți mult mai multe posibilități de a vă personaliza răspunsurile automate. De exemplu, puteți adapta mesaje specifice în funcție de condiții. Notă: La fel ca și caracteristica de răspuns automat din setări, acțiunea vacation este disponibilă doar în planurile cu plată.

Comanda vacation trimite un răspuns de vacanță oricărei persoane care încearcă să vă contacteze. Aceasta este adesea asociată cu testele currentdate sau date pentru a trimite răspunsuri într-un anumit interval de timp.

Să presupunem că plec în vacanță din 14 iulie 2017 până pe 14 august 2017, conform orei din Colorado. Pot folosi următorul cod Sieve pentru a seta un răspuns automat:

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.";
}

Unul dintre argumentele opționale pentru o comandă vacation sunt argumentele :handle și :days. În mod implicit, Sieve nu va răspunde de mai multe ori aceluiași expeditor într-un anumit număr de zile numit timeout. Acest lucru vă împiedică să trimiteți din greșeală numeroase mesaje automate.

Pentru a controla timeoutul, puteți utiliza parametrul :days. Argumentul :days este utilizat pentru a specifica perioada în care adresele sunt păstrate și nu primesc răspuns, fiind întotdeauna specificat în zile. Uneori, aveți mai multe comenzi vacation în scriptul dvs. Sieve și trebuie să vă asigurați că fiecare dintre acestea trimite un răspuns cel puțin o dată (dacă regula se potrivește). În acest caz, poate fi utilizată opțiunea :handle. Argumentul pentru :handle este un șir de caractere care identifică tipul de răspuns trimis.

Pentru a vedea cum funcționează acest lucru, să presupunem că sunteți profesor. Profesorii primesc adesea temele prin e-mail. Este util să le sortați în propriul folder. În plus, puteți respinge orice temă trimisă după termenul-limită.

Într-un astfel de caz, este posibil să doriți să utilizați handle pentru a vă asigura că răspunsurile sunt trimise atunci când este necesar:

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.";
    }
}

Iată toate argumentele permise pentru răspunsul de vacanță, listate în ordinea în care ar trebui transmise:

  • :days este numărul de zile în care răspunsul automat ar trebui să se abțină de la a trimite un răspuns aceluiași expeditor după trimiterea unui mesaj de vacanță
  • :subject este un prefix (implicit auto) pe care răspunsul automat ar trebui să îl folosească pentru a răspunde expeditorului. De exemplu, „Homework Assignment 2” va primi un răspuns cu „late: Homework Assignment 2” dacă este transmis :subject “late”.
  • :mime indică faptul că prima linie a răspunsului folosește un format specific. Acest lucru îi permite expeditorului să răspundă cu mesaje HTML. De exemplu, pentru a scrie un răspuns HTML, transmiteți argumentul :mime și scrieți pe prima linie a răspunsului Content-Type : text/html.
  • :handle este un șir de caractere care identifică tipul de răspuns trimis.

Vă rugăm să rețineți că parametrul :zone din currentdate este un parametru opțional și va utiliza ora locală a serverului (Geneva, Elveția, în cazul Proton Mail) dacă nu este setat.

Parametrul zone acceptă decalaje de fus orar, care sunt șiruri de caractere sub forma „+0100” ce înseamnă UTC+1, și fusuri orare reale din baza de date ICANN (consultați https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(fereastră nouă)). Ultima opțiune este adesea mai utilă (deși este non-standard pentru Sieve), deoarece codifică și ora de vară a fiecărui fus orar.

Puteți compara datele folosind parametrul normal :is/ :contains/ :matches. De exemplu, următoarea comandă Sieve se potrivește cu orice dată din iulie 2017:

currentdate :zone "US/Mountain" :matches "date" "2017-07-??"

Însă, în majoritatea cazurilor, parametrul :value este mult mai util.

Ultimul parametru pe care trebuie să îl transmiteți este formatul. De asemenea, formatul codifică ce parte a datei doriți să comparați. În exemplul dat, am folosit formatul datei. Toate formatele acceptate sunt:

  • year, anul codificat în formatul de la „0000” la „9999”
  • month, luna codificată ca „01” până la „12”
  • day, ziua codificată ca „01” până la „31”
  • date, codificată ca yyyy-mm-dd
  • hour, ora codificată ca „00” până la „23”
  • minute, minutul codificat ca „00” până la „59”
  • second, secunda codificată ca „00” până la „60” (60 este o secundă bisectă(fereastră nouă), care apare doar la 23:59:60 atunci când oamenii de știință consideră necesar)
  • time, ora ca hh:mm:ss
  • iso8601, data și ora conform standardului ISO8601, de exemplu: 2005-08-15T15:52:01+00:00
  • std11, data și ora conform standardului RFC2822, de exemplu: Mon, 15 Aug 2005 15:52:01 +0000
  • zone, decalajul de fus orar în formatul +/-zzzz, de exemplu +0000 sau -1200
  • julian, numărul de zile de la 17 noiembrie 1858 UTC
  • weekday, ziua săptămânii începând cu duminică ca fiind 0 până sâmbătă ca fiind 6

În cele din urmă, este posibilă și preluarea datei dintr-un antet, în loc să utilizați currentdate. Această comandă date funcționează la fel ca currentdate, cu excepția faptului că necesită un șir suplimentar înainte de șirul de format: numele antetului. De exemplu:

date :zone "US/Mountain" :matches "received" "date" "2017-07-??"

Vă rugăm să rețineți că antetele nu sunt neapărat exacte: un expeditor le poate modifica după bunul plac și, prin urmare, nu sunt de încredere.

Considerații:

  1. Răspunsul automat nu răspunde la mesajele generate automat, cum ar fi listele de adrese, e-mailurile trimise de un alt răspuns automat sau mesajele trimise de pe o adresă noreply.
  2. Răspunsul automat nu va trimite mesaje de mai multe ori către aceeași adresă de e-mail, cu excepția cazului în care comanda vacation are un :handle diferit.

Gestionarea expirării

O caracteristică unică a Proton Mail este posibilitatea de a seta un timp de expirare pentru mesajele trimise, moment în care mesajul va fi șters din căsuța poștală a destinatarului.

De asemenea, puteți utiliza această caracteristică pentru a vă gestiona mesajele primite prin adăugarea unui timp de expirare:

require "vnd.proton.expire"; 
# permanently delete all incoming and outgoing emails after 10 days
expire "day" "10";

Scriptul de mai sus va șterge orice e-mail primit după 10 zile. Acesta este puțin extrem, deoarece se aplică tuturor e-mailurilor. În schimb, ar trebui probabil să utilizați o condiție pentru a aplica scriptul doar unui anumit set de e-mailuri. De exemplu, ați putea seta să expire orice mesaj de la cineva care nu se află în contactele dvs.:

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";
}

Notă: Dacă timpul de expirare specificat depășește 730 de zile, acesta va fi limitat automat la 730 de zile.

Limitările Sieve

Există câteva limitări ale Sieve pe care ar trebui să le rețineți.

  • Mesajele trimise nu pot fi mutate manual sau prin filtru în Primite/Ciorne. Acestea vor rămâne întotdeauna în folderul Trimise și în folderele/etichetele aplicate de utilizator sau de filtru.
  • Mesajele primite nu pot fi mutate manual sau prin filtru în Ciorne/Trimise.
  • Ciornele nu pot fi mutate manual sau prin filtru în Primite/Trimise.
  • Pentru mesajele din Spam — sau mesajele clasificate ca spam în timpul procesării — nu trimitem mesaje de răspuns automat/de vacanță. Dacă aveți nevoie de o astfel de caracteristică, luați în considerare adăugarea unui folder personalizat — de exemplu, mySpam — și dezactivarea notificărilor pentru acesta.
  • Limitările mesajelor de răspuns automat/de vacanță

Notă privind asistența pentru expresii regulate

Implementarea Sieve de la Proton respectă standardul de filtrare a e-mailurilor Sieve, care include doar o asistență minimă pentru expresiile regulate. Unele sintaxe prescurtate comune pentru expresiile regulate, cum ar fi \b (limită de cuvânt), \w (caracter alfanumeric), \W (caracter non-alfanumeric) și \d (cifră), nu sunt acceptate în Sieve. Prin urmare, utilizarea acestor caractere prescurtate în filtre poate duce la eșecul acestora în mod silențios. Această limitare se datorează standardului Sieve în sine, care acordă prioritate simplității și compatibilității pe diverse platforme. Pentru detalii complete, consultați Ciorna RFC pentru Expresiile Regulate Sieve.

Lista acțiunilor și testelor acceptate

Pachete

Sieve acceptă următoarele extensii. Puteți consulta documentația oficială pentru mai multe informații.

Data

  • Utilizare: date
  • Descriere: (fereastră nouă)Oferă o modalitate de a verifica informațiile despre dată.
  • Documentație: https://tools.ietf.org/html/rfc5260(fereastră nouă)
  • Implementare: Comparatorul implicit este i;ascii-numeric, nu i;ascii-casemap. Într-adevăr, date nu este util cu comparatorul casemap.
  • Consultați: Mesaje de vacanță și teste de dată

Envelope

FileInto

  • Utilizare: fileinto
  • Descriere: Aplică o etichetă unui mesaj sau îl mută într-un folder.
  • Documentație: https://tools.ietf.org/html/rfc5228#section-4.1(fereastră nouă)
  • Implementare: Barele oblice indică calea completă a folderelor și trebuie să fie însoțite de un caracter de escapare dacă numele unei etichete conține o bară oblică. Sunt acceptate următoarele opțiuni:
    • Work”: aceasta este eticheta sau folderul denumit „Work”
    • Work/Project1”: acesta este subfolderul „Project1” aflat în folderul „Work”
    • Work/Project1/Docs”: acesta este subfolderul „Docs” aflat în subfolderul „Project1”, care se află în folderul „Work”
    • Work/Misc\\/Others”: acesta este subfolderul „Misc/Others” aflat în folderul „Work”
  • Consultați: Ghidul de pornire

Imap4flags

Reject

Vacation

Variables

Relațional

  • Utilizare: relațional
  • Descriere: Furnizează operatori relaționali de potrivire.
  • Documentație: https://tools.ietf.org/html/rfc5231

Regex

  • Utilizare: regex
  • Descriere: Furnizează operatorii de potrivire regex.
  • Documentație: https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html

Comparator numeric ASCII

Liste stocate extern

  • Utilizare: extlists
  • Descriere: Oferă acces la listele de contacte.
  • Documentație: https://tools.ietf.org/html/rfc6134(fereastră nouă)
  • Implementare: Sunt acceptate următoarele liste
    • addrbook:personal : Listă personală de contacte. Sunt acceptate următoarele interogări:
      • label[.starts-with / .ends-with / .contains]=<group: string>: operațiune asupra unui grup de contacte;
      • keypinning=<value: true / false> definirea cheii publice a contactului;
      • encryption=<value: true / false> criptarea implicită a contactului;
      • signing=<value: true / false>  semnătura implicită a contactului.
    • :addrbook:myself Adrese care aparțin utilizatorului curent;
    • :addrbook:organization Adrese care aparțin membrilor organizației curente;
    • :incomingdefaults:inbox Listă adrese permise
    • :incomingdefaults:spam Listă adrese blocate
  • Consultați: Accesarea listei dvs. de contacte

Eval

  • Utilizare: vnd.proton.eval
  • Descriere: Evaluează o funcție aritmetică simplă dată într-un șir de caractere.
  • Documentație: Transformarea variabilelor

Include

Expirare

  • Utilizare: vnd.proton.expire
  • Descriere: Gestionează expirarea mesajelor.
  • Documentație: Gestionarea expirării

Teste

Currentdate

  • Utilizare:
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>

Data

  • Utilizare:
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list

HasFlag

  • Utilizare:
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
  • Descriere: Testează dacă un anumit mesaj are un anumit indicator.
  • Pachet: imap4flags
  • Consultați: Primii pași

Envelope

  • Utilizare:
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>

Adresă·

  • Utilizare:
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>
  • Descriere: Testează dacă antetul specificat (sau antetele specificate), analizat ca adresă, se potrivește cu cheia specificată (sau cheile specificate).
  • Pachet: <implicit>
  • Consultați: Compararea cu adresele în Sieve

Antet

  • Utilizare:
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>
  • Descriere: Testează dacă antetul specificat (sau antetele specificate) se potrivește cu cheia specificată (sau cheile specificate).
  • Pachet: <implicit>
  • Consultați: Compararea cu alte câmpuri în Sieve

HasExpiration

  • Utilizare:
hasexpiration
  • Descriere: Testează dacă un mesaj are setată o dată de expirare.
  • Pachet: vnd.proton.expire

Există

  • Utilizare:
exists <header-names: string-list>

Expirare

  • Utilizare:
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
  • Descriere: Compară data expirării mesajului cu cheia (sau cheile) furnizată (furnizate). Testul va eșua dacă este rulat pentru un mesaj care nu expiră.
  • Pachet: vnd.proton.expire

Mărime

  • Utilizare:
size <":over" / ":under"> <limit: number>

Șir

  • Utilizare:
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
  • Descriere: Evaluează dacă oricare dintre șirurile sursă se potrivește cu vreo cheie.
  • Pachet: variables

Anyof

  • Utilizare:
anyof <tests: test-list>
  • Descriere: Efectuează o operație logică SAU asupra testelor furnizate.
  • Pachet: <implicit>
  • Consultați: Ghidul de pornire

Allof

  • Utilizare:
allof <tests: test-list>
  • Descriere: Efectuează o operație logică ȘI asupra testelor furnizate.
  • Pachet: <implicit>
  • Consultați: Primii pași

Not

  • Utilizare:
not <test: test>
  • Descriere: Inversează rezultatul testului furnizat.
  • Pachet: <implicit>
  • Consultați: Primii pași

True

  • Utilizare:
true
  • Descriere: Se potrivește întotdeauna.
  • Pachet: <implicit>

False

  • Utilizare:
false
  • Descriere: Nu se potrivește niciodată.
  • Pachet: <implicit>

Acțiuni

Require

  • Utilizare:
require <packages: string-list>
  • Descriere: Încarcă o extensie specificată, astfel încât metodele sau modificările acesteia să poată fi utilizate.
  • Pachet: <implicit>
  • Consultați: Ghidul de pornire

FileInto

  • Utilizare:
fileinto <folder: string>
  • Descriere: Mută mesajul aflat în curs de procesare într-un anumit folder.
  • Pachet: fileinto
  • Consultați: Primii pași

Addflag

  • Utilizare:
addflag <list-of-flags: string-list>
  • Descriere: Adaugă indicatorul specificat la mesajul aflat în curs de procesare.
  • Pachet: imap4flags
  • Consultați: Primii pași

Removeflag

  • Utilizare:
removeflag <list-of-flags: string-list>
  • Descriere: Elimină indicatoarele specificate din mesajul aflat în curs de procesare.
  • Pachet: imap4flags

Setflag

  • Utilizare:
setflag <list-of-flags: string-list>
  • Descriere: Elimină toate marcajele și setează marcajele specificate pentru mesajul în curs de procesare.
  • Pachet: imap4flags

Stop

  • Utilizare:
stop
  • Descriere: Oprește procesarea tuturor filtrelor Sieve. Filtrele Sieve următoare nu vor rula.
  • Pachet: <implicit>

Return

  • Utilizare:
return
  • Descriere: Oprește procesarea filtrului Sieve curent. Filtrele Sieve următoare vor rula în continuare.
  • Pachet: include

Set

  • Utilizare:
set [MODIFIER] <name: string> <value: string>
  • Descriere: Creează variabile noi, asociind numele dat și valoarea dată.
  • Pachet: variables
  • Consultați: Crearea de variabile

Discard

  • Utilizare:
discard
  • Descriere: Renunță la mesaj la sfârșitul acestui filtru Sieve. După renunțare, nu se vor mai rula alte filtre Sieve.
  • Pachet: <implicit>

Keep

  • Utilizare:
keep
  • Descriere: Anulează ultima comandă de renunțare. Va avea efect doar dacă se află în același filtru Sieve. Dacă nu a fost executată nicio renunțare, atunci nu va face nimic.
  • Pachet: <implicit>

Reject

  • Utilizare:
reject <reason: string>

Expire

  • Utilizare:
expire <unit: "day" / "minute" / "second"> <value: string>
  • Descriere: Expiră un mesaj după timpul specificat.
  • Pachet: vnd.proton.expire
  • Consultați: Gestionarea expirării

Unexpire

  • Utilizare:
unexpire
  • Descriere: Elimină data expirării unui mesaj.
  • Pachet: vnd.proton.expire

Vacation

  • Utilizare:
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
  • Descriere: Trimite un răspuns automat către adresa SMTP a expeditorului, având motivul specificat în corpul mesajului.
  • Pachet: vacation (necesită un cont cu plată)
  • Consultați: Mesaje de vacanță și teste de dată

Listă externă validă

  • Utilizare:
valid_ext_list <ext-list-names: string-list>
  • Descriere: Testează dacă toate listele externe furnizate sunt acceptate și valide.
  • Pachet: extlists