Strona główna Proton

Filtr Sieve (zaawansowane filtry niestandardowe)

Odczytywanie
39 min
Kategoria
Odbieraj i czytaj wiadomości

Proton Mail oferuje użytkownikom różne sposoby na automatyczne filtrowanie wiadomości poprzez przypisywanie etykiet lub sortowanie ich do folderów. Ogólnie rzecz biorąc, istnieją trzy metody:

  1. Dodawanie nadawców do listy zablokowanych i listy dozwolonych , tak aby zawsze lub nigdy nie były one umieszczane w folderze ze spamem;
  2. Tworzenie filtru niestandardowego przy użyciu interaktywnego interfejsu Proton Mail;
  3. [Najbardziej zaawansowane] Tworzenie filtru niestandardowego w Sieve.

Spośród tych metod tworzenie filtru niestandardowego w Sieve oferuje największą wszechstronność, ale jest to również bardziej skomplikowane. Z tego powodu uważamy Sieve za zaawansowaną funkcję dla użytkowników z pewnym doświadczeniem technicznym. Dla większości użytkowników interaktywny interfejs jest odpowiedni do tworzenia potrzebnych filtrów niestandardowych.

Spis treści

Co to jest Sieve?

Sieve to język programowania służący do filtrowania wiadomości e-mail. Możesz tworzyć filtry w Sieve, pisząc proste reguły. Na przykład: „Przypisz wszystkim wiadomościom od Kyle’a zieloną etykietę”. Połączenie tych reguł pozwala stworzyć zaawansowany system filtrowania.

Możesz pisać reguły Sieve od zera, zapożyczać je z przykładów takich jak te w tym artykule lub korzystać z oprogramowania, które to ułatwia.

W rzeczywistości oferujemy Ci już sposób na tworzenie filtrów Sieve za pomocą interaktywnego interfejsu, który wykorzystuje Twoje dane wejściowe do generowania filtrów Sieve. Innym dobrym sposobem na naukę Sieve jest tworzenie filtrów za pomocą interaktywnego interfejsu i ich edycja w Sieve, ponieważ sam interfejs interaktywny korzysta z podzbioru Sieve.

Dla przykładu porównaj poniższy filtr utworzony za pomocą interaktywnego interfejsu…


… z kodem tego samego filtra wyświetlonym w edytorze Sieve:

Ten artykuł wprowadzi Cię w tematykę Sieve i wyjaśni, jak pisać własne filtry Sieve. Jeśli potrzebujesz więcej informacji na temat korzystania z Sieve, w internecie dostępnych jest wiele innych poradników, które mogą pomóc. Jeśli masz pytania dotyczące Sieve w Proton Mail, na które nie ma odpowiedzi na tej stronie, zawsze możesz skontaktować się z naszym zespołem wsparcia tutaj.

Pierwsze kroki

Aby zacząć tworzyć filtry Sieve, zaloguj się na stronie mail.proton.me(nowe okno), przejdź do sekcji Ustawienia → Wszystkie ustawienia → Proton Mail → Filtry → Dodaj filtr Sieve.

Skrypt Sieve składa się z listy poleceń. W większości skryptów zaczyna się on od polecenia require. Polecenie require ładuje rozszerzenie, które zapewnia określoną funkcjonalność. Na przykład, aby przypisać etykietę lub umieścić wiadomość w folderze, potrzebujemy polecenia fileinto.

Aby załadować to polecenie, po prostu wpisujemy:

require "fileinto";

Aby załadować wiele rozszerzeń, możesz użyć listy:

require ["fileinto", "imap4flags"];

W tym przypadku imap4flags ładuje rozszerzenie, które pozwala Ci oznaczyć wiadomość jako przeczytaną. Po poleceniu require często będziesz przeprowadzać testy na przychodzącej wiadomości. Odbywa się to poprzez połączenie if z innym poleceniem, takim jak address lub header.

Na koniec, jeśli testy zakończą się pomyślnie, możesz zastosować akcję do wiadomości. Na przykład, załóżmy, że chcemy umieścić wszystkie wiadomości e-mail od określonego nadawcy w tym samym folderze i oznaczyć przychodzącą pocztę jako przeczytaną. Można to zapisać w następujący sposób:

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

Zwróć uwagę, że znak # oznacza komentarz i nie jest interpretowany jako część skryptu Sieve. Ponadto folder lub etykieta, którą ustawisz (tutaj enemies), muszą istnieć w Twoim środowisku: możesz dowiedzieć się, jak tworzyć foldery i etykiety tutaj. Po wpisaniu tego filtra kliknij przycisk ZAPISZ. Twój filtr będzie teraz działał dla każdej przychodzącej wiadomości e-mail.

Oczywiście możesz chcieć umieścić wiadomości e-mail od wielu nadawców w tym samym folderze. W takim przypadku możesz przekazać listę ciągów znaków do polecenia address (ciąg znaków(nowe okno) to seria znaków, w tym przypadku adres 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";
}

Pamiętaj, że zawsze, gdy możesz przekazać ciąg znaków do warunku testowego, zazwyczaj możliwe jest również przekazanie listy. System spróbuje wtedy znaleźć dopasowanie, sprawdzając dowolny z ciągów znaków na liście. Nie dotyczy to poleceń takich jak fileinto, addflag, itp.

Sieve to jednak coś więcej niż tylko porządkowanie Twojej skrzynki pocztowej. Pozwala Ci również odrzucać wiadomości e-mail wraz z wiadomością zwrotną:

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

Używanie testów

Łączenie testów w Sieve

Jak pokazaliśmy Ci w sekcji Pierwsze kroki, możesz przeprowadzać testy na przychodzących wiadomościach za pomocą polecenia if, aby określić, czy polecenie require powinno mieć zastosowanie do danej wiadomości e-mail.

Oprócz polecenia if istnieją inne polecenia testowe, które pozwalają Ci w prosty sposób ustrukturyzować Twój skrypt.

Else

Polecenie else pozwala Ci wykonać określone działania, gdy polecenie if nie wykonało swoich akcji. Oto przykład:

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

W tym przypadku wiadomość e-mail zostanie przeniesiona do folderu Kenny, jeśli temat to dokładnie mmph mmph. W przeciwnym razie (czyli gdy temat nie brzmi dokładnie mmph mmph) wiadomość e-mail zostanie przeniesiona do folderu Understandable.

Elsif

Słowo elsif to połączenie else if. Podobnie jak polecenie else, zostanie ono wykonane, jeśli warunek if jest nieprawdziwy, ale tylko wtedy, gdy warunek elsif jest prawdziwy. Jeśli warunek elsif nie jest prawdziwy, wówczas zostanie wykonany kolejny blok elsif lub 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";
}

Zwróć uwagę, że podczas jednego uruchomienia zostanie wykonany tylko jeden z bloków if, elsif lub else.

Anyof

Czasami musisz wykonać polecenie, gdy powiedzie się jeden z kilku testów. W tym celu możesz użyć polecenia anyof. Robi się to, pisząc anyof, a następnie nawias otwierający „(”, instrukcje, które chcesz przetestować, oddzielone przecinkami, oraz nawias zamykający „)”.

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

Ten skrypt umieści wiadomości pochodzące od kenny@northpark.example.com lub zawierające mmph mmph w temacie w folderze Kenny.

Allof

Istnieje również odpowiednik anyof: allof. Pozwala to na wykonanie polecenia tylko wtedy, gdy spełnione są wszystkie podane warunki:

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


Ten skrypt umieści wiadomości pochodzące od kenny@northpark.example.com i zawierające mmph mmph w temacie w folderze Kenny.

Not

I na koniec, czasami musisz zastosować polecenie, jeśli coś się nie zgadza. Dodanie not przed instrukcją zapewni, że tak się stanie:

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

Co jest równe:

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

To umieszcza wszystkie wiadomości e-mail, które nie zawierają „real guitar” w temacie, w folderze Young people.

Oczywiście można połączyć wszystkie te testy. Na przykład możesz chcieć oznaczyć wiadomość gwiazdką, jeśli nie pochodzi ona od Kenny’ego i jednocześnie nie zawiera mmph mmph w temacie:

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

Wykonywanie testów na nagłówkach

Za pomocą polecenia address możesz przeprowadzać testy na nagłówkach adresowych, takich jak nagłówek from, to i sender. Możesz wyodrębnić różne części adresu e-mail za pomocą jednej z następujących flag:

  • :localpart — część przed znakiem małpy (@)
  • :domain — część po znaku małpy (@)
  • :all — cały adres

Poniższy fragment kodu wyjaśnia użycie tego polecenia:

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

Podsumowując, ten skrypt umieści wszystko, co zostało wysłane z domeny northpark.example.com w folderze PaperPeople, a z domeny springfield.example.com w folderze YellowPeople.

Co więcej, niezależnie od tego, z jakiej domeny wysłano wiadomość e-mail, jeśli część przed znakiem @ to chef (np. chef@example.com), wiadomość zostanie oznaczona flagą. Innym ciekawym zastosowaniem jest automatyczne zapisywanie w folderze wszystkiego, co zostało wysłane na jeden adres:

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

Zaawansowane

Polecenie envelope pozwala na wykonanie większej liczby testów. Ogólnie rzecz biorąc, test address pobiera tylko wartość z nagłówka. Jednak w sesji SMTP można określić inny adres nadawcy (from) niż ten w nagłówku.

W interfejsie nagłówków Proton Mail parametr envelope-from jest równy nagłówkowi return-path, a envelope-to jest równy nagłówkowi x-original-to.

Używając polecenia envelope, możesz pobrać rzeczywiste adresy to: i from: z koperty. Pamiętaj, że nie istnieją żadne inne pola oprócz tych dwóch, więc sender nie występuje w tym poleceniu. Zwróć uwagę, że envelope znajduje się w rozszerzeniu, co wymaga od Ciebie uprzedniego zadeklarowania tego rozszerzenia za pomocą polecenia require.

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

Używanie komparatorów do porównywania dwóch wartości

Gdy test porównuje dwie wartości, można określić sposób tego porównania, używając różnych flag zwanych komparatorami. Wcześniej użyliśmy już dwóch komparatorów: :is oraz :contains, które sprawdzają odpowiednio, czy dany ciąg znaków jest dokładnie równy określonej wartości oraz czy określona wartość zawiera dany ciąg, jak w poniższym teście.

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

Komparator :matches może być również użyty do zdefiniowania bardziej szczegółowego formatu. Porówna on obie wartości od początku do końca, tak jak komparator :is. Jednak w przypadku :matches zdefiniowana przez Ciebie wartość może zawierać znaki ? i *. Znak zapytania zastępuje jeden znak, a gwiazdka (zwana znakiem wieloznacznym) zastępuje zero lub więcej znaków.

Dzięki temu formatowi możesz utworzyć następujący test:

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

W tym przykładzie test zakończy się powodzeniem, jeśli temat wiadomości zaczyna się od mmph, a po nim następuje dowolny znak lub znaki. Innymi słowy, wiadomość zostanie oznaczona flagą, gdy temat zaczyna się od „mmph”. Zarówno „mmph mmph”, jak i „mmph mmph Hello” zostaną dopasowane; „Hello mmph” i „Springfield sales” – nie.

Gwiazdka może być również użyta w środku wartości oraz wielokrotnie, w następujący sposób:

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

Ten test zostanie dopasowany, jeśli temat zaczyna się od „mmph ” (ze spacją), zawiera kolejny ciąg „mmph ” (ze spacją) i kończy się na „mmph” (bez spacji). Pasujące tematy to „mmph mmph mmph”, „mmph mmph mmphmmph” lub „mmph is mmph and mmph”.

Komparator :matches może być bardzo przydatny przy porównywaniu adresów. Jak pewnie wiesz, Proton Mail ma kilka domen: protonmail.com i proton.me. Jeśli chcesz sprawdzić, czy wiadomość pochodzi od użytkownika Proton Mail, możesz użyć tego skryptu:

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

Jeśli z jakiegoś powodu musisz dopasować dokładnie znak * lub ?, możesz je wówczas zacytować, dodając przed nimi \\: \\* dopasuje gwiazdkę, a \\? dopasuje znak zapytania.

Pamiętaj, że obsługujemy również rozszerzenie regex, które definiuje komparator :regex. Ten komparator jest bardziej precyzyjną wersją :matches, ale jest bardzo skomplikowany. Aby uzyskać więcej informacji, przeczytaj oficjalną dokumentację(nowe okno).

W niektórych przypadkach (jak zobaczysz w dalszej części tego artykułu) możesz chcieć porównać wartości liczbowe. Do tego celu służy pakiet relational. Pakiet ten definiuje komparator :value, po którym następuje typ porównania.

Pozwala sprawdzić, czy wartość jest większa niż (typ porównania to „gt”), większa lub równa („ge”), równa („eq”), mniejsza lub równa („le”) lub mniejsza niż („lt”) podana wartość.

Podczas porównywania wartości liczbowych bardzo przydatny jest również pakiet comparator-i;ascii-numeric. Informuje on interpreter skryptu, że zawartość ciągu znaków jest liczbą, a nie zwykłym tekstem. Można go użyć, dodając do testu parametr :comparator “i;ascii-numeric”.

Mając te wszystkie informacje, możemy zbudować następujący skrypt:

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

Ten test przeniesie wiadomość do folderu Dummy example, jeśli temat jest większy lub równy 2. Jeśli temat nie jest liczbą, lecz tekstem, test zakończy się niepowodzeniem. Jako taki, ten przykład wygląda na bardzo prosty, ale ma być używany w połączeniu z innymi rozszerzeniami, takimi jak date, które zdefiniujemy w dalszej części tego artykułu.

Porównywanie przy użyciu kontekstu w języku Sieve

Możesz również uzyskać dostęp do informacji związanych ze swoim kontem i ogólnym kontekstem Proton Mail za pomocą rozszerzeń. Na Example, możesz sprawdzić, czy adres nadawcy znajduje się na Twojej liście kontaktów.

Dostęp do Twojej listy kontaktów

Możesz uzyskać dostęp do swojej listy kontaktów za pomocą rozszerzenia extlists. W połączeniu z testami nagłówków pozwala to sprawdzić, czy kontakt znajduje się na Twojej liście kontaktów.

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

Ten test oznaczy wiadomość etykietą Known, jeśli nadawca znajduje się na liście :addrbook:personal?label=Family. Listę można podzielić na dwie części. Po pierwsze, :addrbook:personal oznacza, że adres znajduje się w Twojej osobistej książce adresowej. Po drugie, parametr label=Family dodatkowo zawęża listę, określając, że oprócz obecności w książce adresowej kontakt musi również należeć do grupy kontaktów Family. Jeśli chcesz, możesz zmienić tę etykietę na inną grupę kontaktów. Możesz na przykład użyć :addrbook:personal?label=Work, w którym to przypadku test zakończy się powodzeniem tylko wtedy, gdy nadawca znajduje się w Twojej książce adresowej i w grupie kontaktów Work.

Mówiąc ogólniej, lista jest zgodna ze schematem Tag URI Scheme(nowe okno), a Ty możesz dodać dodatkowe parametry, aby zawęzić swoje filtry. Następnie możesz użyć tej listy w następujący sposób:

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

Udostępniliśmy cztery różne listy:

  • :addrbook:personal¹ sprawdza, czy adres znajduje się na Twojej liście kontaktów. Lista akceptuje parametr label, który odpowiada określonej grupie kontaktów. Ten parametr może występować w czterech wariantach:
    • :addrbook:personal?label=something dopasuje kontakt, który znajduje się w grupie kontaktów „something”;
    • :addrbook:personal?label.starts-with=something dopasuje kontakt, który należy do co najmniej jednej grupy zaczynającej się od „something”;
    • :addrbook:personal?label.ends-with=something dopasuje kontakt, który należy do co najmniej jednej grupy kończącej się na „something”;
    • :addrbook:personal?label.contains=something dopasuje kontakt, który należy do co najmniej jednej grupy zawierającej „something”.

Możesz również uzyskać dostęp do informacji kryptograficznych dotyczących pasującej wiadomości e-mail:

  • :addrbook:personal?keypinning=true dopasuje kontakt, który ma zaufany klucz. Zmiana wartości z true na false dopasuje kontakt, który nie ma zaufanego klucza;
  • :addrbook:personal?encryption=true dopasuje kontakt, dla którego włączone jest szyfrowanie. Zmiana wartości z true na false dopasuje kontakt, dla którego szyfrowanie nie zostało skonfigurowane lub jest wyłączone;
  • :addrbook:personal?signing=true dopasuje kontakt, dla którego podpisanie jest włączone. Zmiana true na false dopasuje kontakt, dla którego podpisanie jest wyłączone.
  • :addrbook:myself¹ dopasowuje każdy adres, który należy do Ciebie;
  • :addrbook:organization dopasowuje każdy adres, którego właścicielem jest ktoś z organizacji, której jesteś członkiem;
  • :incomingdefaults:inbox sprawdza, czy adres znajduje się na Twojej Liście dozwolonych;
  • :incomingdefaults:spam sprawdza, czy adres znajduje się na Twojej Liście odrzuconych.

W połączeniu z rozszerzeniem zmiennych (opisanym w następnym akapicie) pasujące zmienne zostaną zmodyfikowane. Dopasowana zmienna ${0} będzie zawsze zawierać ostatni adres e-mail znajdujący się na określonej liście. Jeśli lista została oznaczona przypisem 1, dopasowana zmienna ${1} będzie zawierać nazwę wyświetlaną.

Na przykład dzięki poniższym listom możesz utworzyć filtr, który usunie wszystkie wiadomości otrzymane od kogokolwiek innego niż Twoja rodzina lub ktoś z Twojej białej listy:

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
}

Jeśli ten warunek zostanie spełniony, zostanie wykonana akcja discard. Ta akcja usuwa wiadomość natychmiast i na stałe . Możesz także po prostu przenieść ją do folderu kosza za pomocą akcji fileinto zamiast discard: fileinto “trash”;.

Tworzenie zmiennych

Innym przydatnym narzędziem podczas zarządzania kontekstem jest definicja zmiennej. Zmienna to tymczasowe miejsce przechowywania, w którym możesz umieścić tekst i oznaczyć go nazwą. Później będziesz mieć możliwość ponovnego użycia tej zawartości, wywołując ją po nazwie. Na przykład możesz mieć następujący skrypt:

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

Celem tego skryptu jest odrzucenie wiadomości ze spersonalizowaną treścią. Jeśli oryginalna wiadomość pochodzi od użytkownika kenny, a jej temat to „mmph mmph”, tworzona jest zmienna „message” zawierająca mmph mmph. W innym przypadku wiadomość zostanie uzupełniona tekstem „Sorry, I don’t want emails today!”. Następnie w ostatnim kroku używamy ponownie tej zmiennej w poleceniu reject.

Sieve nie definiuje natywnie zmiennych, dlatego są one zdefiniowane w rozszerzeniu variables, które musi zostać zadeklarowane na początku Twojego skryptu. Istnieją dwa sposoby definiowania zmiennej.

  • Jawne tworzenie zmiennej:

Akcja set służy do tworzenia zmiennej.

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

Pierwszy ciąg znaków to nazwa Twojej zmiennej, a drugi to wartość Twojej zmiennej. Zatem poprzedni przykład tworzy zmienną o nazwie labelname i zawierającą Work.

Po zdefiniowaniu zmiennej możesz ją wywołać, dodając w ciągu znaków następujący format: ${name}, gdzie name to nazwa Twojej zmiennej. Po wykonaniu zostanie ona zastąpiona wartością tej zmiennej. (Jeśli zmienna nie została zdefiniowana, zostanie zastąpiona pustym ciągiem znaków). W ten sposób w następującym skrypcie:

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

Twoja wiadomość zostanie oznaczona etykietą /Work. Ponieważ zdefiniowaliśmy już zmienną labelname, zostanie ona zastąpiona przez Work. Jednak zmienna foldername nie jest zdefiniowana, więc zostanie po prostu usunięta.

  • Niejawne przypisanie zmiennej:

Najciekawszym przypadkiem użycia zmiennych jest użycie testu :matches. Weźmy następujący przykład, w którym nadawcą wiadomości jest 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}";
}

W przypadku korzystania z rozszerzenia variables wynik operacji match zostanie zapisany w zmiennych. Kilka zmiennych zostanie ustawionych z nazwą numeryczną. Po pierwsze, zmienna 0 będzie zawierać pełne dopasowanie (w naszym przykładzie będzie to pełny adres: test@proton.me). Następnie pierwsza pasująca grupa zostanie przypisana do zmiennej 1 (w naszym przykładzie będzie to test), druga pasująca grupa zostanie przypisana do drugiej zmiennej (proton.me) i tak dalej, aż do ostatniej pasującej grupy.

W naszym przykładzie wykonywane jest polecenie fileinto. Lokalizacja jest zdefiniowana jako ${1}, co jest rozpoznawane jako zmienna i w ten sposób zastępowane jej wartością obliczoną powyżej: test.

Pamiętaj, że możliwe jest również przypisywanie zmiennych w teście :regex przy użyciu grup dopasowania wyrażeń regularnych.

Przekształcanie zmiennych

Jedną z ciekawych możliwości jest przekształcanie zmiennych. W tym celu można użyć słowa kluczowego set z kombinacją flag, które pozwalają zmienić wartość przed przypisaniem jej do zmiennej.

  • :lower zmieni wartość zmiennej na małe litery;
  • :upper zmieni wartość zmiennej na wielkie litery;
  • :lowerfirst zmieni pierwszą literę wartości zmiennej na małą;
  • :upperfirst zmieni pierwszą literę wartości zmiennej na wielką;
  • :quotewildcard ujmie w cudzysłów każdy znak wieloznaczny zawarty w ciągu znaków, dzięki czemu będzie można go użyć dosłownie w instrukcji dopasowania;
  • :length zwróci długość wartości.

Pamiętaj, że możesz również użyć ponownie zdefiniowanej zmiennej w innej akcji set. Ulepszmy nasze poprzednie przykłady:

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

Krok po kroku filtr utworzy trzy zmienne. Pierwsze polecenie set utworzy zmienną labelname. Zawartość tej zmiennej to Work. Rzeczywiście, oryginalna wartość WORK zostaje przekształcona przy użyciu flag :lower oraz :upperfirst, zmieniając wielkość liter na work, a następnie na Work.

Drugie polecenie set utworzy drugą zmienną o nazwie foldername i zawierającą ciąg znaków Geneva. Rzeczywiście, użyto flag :lower i :upperfirst.

Na koniec tworzona jest zmienna location. Wartość „${foldername}/${labelname}” zawiera dwie zmienne: foldername i labelname. Interpreter sieve zastąpi więc te zmienne ich wartościami: Work i Geneva.

Na koniec zmienna location jest używana jako argument dla polecenia fileinto. W ten sposób wiadomość zostanie przeniesiona do folderu, którego nazwą jest wartość zmiennej location: Work/Geneva.

Komparatory można również stosować do pasujących zmiennych:

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

Tutaj, jeśli nadawcą wiadomości jest test@proton.me, zostanie ona oznaczona etykietą Test.

Innym sposobem na zmianę wartości zmiennej jest użycie rozszerzenia vnd.proton.eval. Rozszerzenie to definiuje nową flagę :eval, która pozwoli Ci na wykonywanie prostych obliczeń:

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

W tym przykładzie, wciąż zakładając, że wiadomość przychodzi z adresu test@proton.me, wiadomość zostanie oznaczona wartością 478. Rzeczywiście, długość pierwszej pasującej zmiennej wynosi 19, a wynik działania 19 * 25 – 1 / 8 + 3 po zaokrągleniu w górę daje 478.

Na pierwszy rzut oka może się to wydawać bezużyteczne, ale to rozszerzenie nabiera większego sensu w połączeniu z innymi operacjami.

Porównanie z innymi polami w Sieve

Możliwe jest również dopasowanie do określonych nagłówków. Na przykład, aby umieścić wszystkie wiadomości wysyłane na listy (często są to wiadomości marketingowe lub newslettery), możesz wykonać:

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

Aby sortować wiadomości z mediów społecznościowych do ich własnego folderu, możesz napisać:

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

Pamiętaj, że używamy:

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

zamiast:

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

Ponieważ ten drugi sposób sprawdza, czy ustawiono zarówno x-facebook, jak i x-linkedin-id.

Aby faktycznie sprawdzić, jaką wartość zawiera nagłówek, możesz użyć testu 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";
}

Oprócz operacji :is, która wykonuje dokładne dopasowanie, polecenie header obsługuje również :matches, które dopasowuje przy użyciu znaków wieloznacznych (np. „*@*.com” dopasuje każdy adres e-mail kończący się na dot com) oraz polecenie :contains, które sprawdza, czy nagłówek zawiera dany ciąg znaków.

Aby projektować filtry Sieve, przydatne może być pobranie nagłówków wiadomości. Aby to zrobić w interfejsie webowym Proton Mail, przejdź do Więcej () → Wyświetl nagłówki. Otworzy się nowe okno zawierające wszystkie nagłówki wiadomości.

Filtrowanie przy użyciu rozmiaru wiadomości w Sieve

Możliwe jest traktowanie dużych wiadomości e-mail inaczej niż małych. Na przykład możesz chcieć oznaczyć duże wiadomości, aby móc je usunąć w celu zaoszczędzenia miejsca w skrzynce pocztowej. Można to zrobić w następujący sposób:

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

Jak widzisz, dostępne są jednostki, jeśli chcesz określić duże rozmiary, poprzez dodanie litery odpowiadającej oczekiwanej jednostce tuż po liczbie. Dostępne są trzy jednostki: K dla kibiobajta (lub 1024 bajtów), M dla mebiobajta (lub 1 048 576 bajtów) i G dla gibiobajta (lub 1 073 741 824 bajtów).

Pamiętaj, że „over” w tym przypadku oznacza „większy niż”, a „under” oznacza „mniejszy niż”. Oznacza to, że jeśli wiadomość ma rozmiar dokładnie 1000 bajtów, to żadne

size :under 1000

ani

size :over 1000

nie zostanie dopasowane.

Pamiętaj, że filtry Sieve nie mają dostępu do rzeczywistej zawartości i pokazują tylko zaszyfrowany rozmiar.

Wykonywanie zaawansowanych akcji na wiadomościach

W Sieve możesz wykonywać różne reakcje na wiadomość. W poprzednich sekcjach przedstawiliśmy już akcje fileinto, addflag, discard oraz reject. Tutaj przedstawimy bardziej zaawansowane akcje.

Wiadomości urlopowe i testy daty

Możesz zreplikować funkcję autorespondera w Sieve za pomocą polecenia vacation. W rzeczywistości funkcja autorespondera w Twoich Ustawieniach opiera się na Sieve, aby wykonywać swoje zadanie. Jednak korzystając z opcji vacation wewnątrz skryptu, masz znacznie więcej możliwości dostosowania swoich automatycznych odpowiedzi. Na przykład możesz dopasować konkretne wiadomości w zależności od warunków. Uwaga: Podobnie jak w przypadku funkcji autorespondera w Ustawieniach, akcja vacation jest dostępna tylko w płatnych planach.

Polecenie vacation wysyła odpowiedź o nieobecności do każdego, kto próbuje się z Tobą skontaktować. Często jest ono łączone z testami currentdate lub date, aby wysyłać odpowiedzi w określonym przedziale czasowym.

Załóżmy, że wyjeżdżam na urlop od 14 lipca 2017 r. do 14 sierpnia 2017 r. według czasu w Kolorado. Mogę użyć następującego kodu Sieve, aby ustawić autoresponder:

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

Jednymi z opcjonalnych argumentów dla polecenia vacation są argumenty :handle i :days. Domyślnie Sieve nie będzie odpowiadać wielokrotnie temu samemu nadawcy w ciągu określonej liczby dni, zwanej limitem czasu (timeout). Zapobiega to przypadkowemu wysyłaniu wielu automatycznych wiadomości e-mail.

Aby kontrolować limit czasu, możesz użyć parametru :days. Argument :days służy do określenia okresu, w którym adresy są przechowywane i nie otrzymują odpowiedzi, i jest zawsze określany w dniach. Czasami masz wiele poleceń vacation w swoim skrypcie Sieve i musisz upewnić się, że każde z nich wyśle odpowiedź przynajmniej raz (jeśli reguła zostanie dopasowana). W takim przypadku można użyć opcji :handle. Argumentem dla :handle jest ciąg znaków, który identyfikuje typ wysyłanej odpowiedzi.

Aby zobaczyć, jak to działa, załóżmy, że jesteś nauczycielem. Nauczyciele często otrzymują zadania domowe pocztą e-mail. Przydatne jest sortowanie ich do osobnego folderu. Co więcej, możesz odrzucić wszelkie prace oddane po terminie.

W takim przypadku możesz chcieć użyć argumentu handle, aby upewnić się, że odpowiedzi są wysyłane wtedy, gdy to konieczne:

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

Oto wszystkie argumenty dozwolone dla odpowiedzi o nieobecności, wymienione w kolejności, w jakiej powinny być przekazywane:

  • :days to liczba dni, przez które autoresponder powinien powstrzymać się od wysłania odpowiedzi do tego samego nadawcy po wysłaniu wiadomości o nieobecności
  • :subject to przedrostek (domyślnie auto), którego autoresponder powinien użyć do odpowiedzi nadawcy. Na przykład nadawca wiadomości o temacie „Homework Assignment 2” otrzyma odpowiedź „late: Homework Assignment 2”, jeśli zostanie przekazany argument :subject “late”.
  • :mime wskazuje, że pierwsza linia odpowiedzi używa określonego formatu. Pozwala to na odpowiadanie wiadomościami HTML. Na przykład, aby napisać odpowiedź w formacie HTML, przekaż argument :mime i wpisz w pierwszej linii odpowiedzi Content-Type : text/html.
  • :handle to ciąg znaków, który identyfikuje typ wysyłanej odpowiedzi.

Pamiętaj, że parametr :zone w currentdate jest opcjonalny i jeśli nie zostanie ustawiony, użyje czasu lokalnego serwera (w przypadku Proton Mail jest to Genewa w Szwajcarii).

Parametr strefy (zone) akceptuje przesunięcia stref czasowych, które są ciągami znaków w formacie „+0100” oznaczającym UTC+1, oraz rzeczywiste strefy czasowe z bazy danych ICANN (zobacz https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(nowe okno)). Ostatnia opcja jest często bardziej użyteczna (mimo że nie jest standardem Sieve), ponieważ uwzględnia również czas letni dla każdej strefy czasowej.

Możesz porównywać daty za pomocą standardowych parametrów :is/ :contains/ :matches. Na przykład poniższe polecenie Sieve dopasowuje dowolną datę w lipcu 2017 r.:

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

Jednak w większości przypadków parametr :value jest znacznie bardziej przydatny.

Ostatnim parametrem, który musisz przekazać, jest format. Format określa również, którą część daty chcesz porównać. W podanym przykładzie użyliśmy formatu daty. Wszystkie obsługiwane formaty to:

  • year, rok zapisany w formacie od „0000” do „9999”
  • month, miesiąc zapisany jako „01” do „12”
  • day, dzień zapisany jako „01” do „31”
  • date, zapisana jako yyyy-mm-dd
  • hour, godzina zapisana jako „00” do „23”
  • minute, minuta zapisana jako „00” do „59”
  • second, sekunda zapisana jako „00” do „60” (60 to sekunda przestępna(nowe okno), która występuje tylko o 23:59:60, gdy naukowcy uznają to za konieczne)
  • time, czas w formacie hh:mm:ss
  • iso8601, data i czas zgodnie ze standardem ISO8601, na przykład: 2005-08-15T15:52:01+00:00
  • std11, data i czas zgodnie ze standardem RFC2822, na przykład: Mon, 15 Aug 2005 15:52:01 +0000
  • zone, przesunięcie strefy czasowej w formacie +/-zzzz, na przykład +0000 lub -1200
  • julian, liczba dni od 17 listopada 1858 r. UTC
  • weekday, dzień tygodnia zaczynający się od niedzieli jako 0 do soboty jako 6

Na koniec możliwe jest również pobranie daty z nagłówka zamiast korzystania z currentdate. To polecenie daty działa w taki sam sposób jak currentdate, z tą różnicą, że wymaga dodatkowego ciągu znaków przed ciągiem formatu: nazwy nagłówka. Na przykład:

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

Pamiętaj, że nagłówki niekoniecznie muszą być dokładne: nadawca może je dowolnie zmieniać, dlatego nie są one wiarygodne.

Uwagi:

  1. Autoresponder nie odpowiada na automatycznie generowane wiadomości, takie jak listy mailingowe, e-maile wysyłane przez inny autoresponder lub wiadomości wysyłane z adresu noreply.
  2. Autoresponder nie wyśle wiadomości wielokrotnie na ten sam adres e-mail, z wyjątkiem sytuacji, gdy polecenie vacation ma inny parametr :handle.

Zarządzanie wygasaniem

Jedną z unikalnych funkcji Proton Mail jest możliwość ustawienia czasu wygaśnięcia wysłanych wiadomości. Po jego upływie wiadomość zostanie usunięta ze skrzynki pocztowej odbiorcy.

Możesz również użyć tej funkcji do zarządzania wiadomościami przychodzącymi poprzez dodanie czasu wygaśnięcia:

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

Powyższy skrypt usunie każdą odebraną wiadomość e-mail po 10 dniach. To rozwiązanie jest nieco ekstremalne, ponieważ dotyczy wszystkich wiadomości e-mail. Zamiast tego prawdopodobnie warto użyć warunku, aby zastosować skrypt tylko do określonego zestawu wiadomości e-mail. Na przykład możesz ustawić wygasanie każdej wiadomości od osoby, której nie ma w Twoich kontaktach:

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

Uwaga: Jeśli określony czas wygaśnięcia przekracza 730 dni, zostanie on automatycznie ograniczony do 730 dni.

Ograniczenia Sieve

Istnieje kilka ograniczeń Sieve, o których powinieneś pamiętać.

  • Wysłanych wiadomości nie można przenieść ręcznie ani za pomocą filtra do skrzynki odbiorczej / folderu Szkice. Zawsze pozostaną one w folderze Wysłane i w folderach/etykietach zastosowanych przez użytkownika lub filtr.
  • Otrzymanych wiadomości nie można przenieść ręcznie ani za pomocą filtra do folderu Szkice/Wysłane.
  • Szkiców nie można przenieść ręcznie ani za pomocą filtra do skrzynki odbiorczej / folderu Wysłane.
  • W przypadku wiadomości w folderze Spam — lub wiadomości zaklasyfikowanych jako spam podczas przetwarzania — nie wysyłamy automatycznych odpowiedzi / wiadomości o nieobecności. Jeśli potrzebujesz takiej funkcji, rozważ dodanie niestandardowego folderu — na przykład mySpam — i wyłączenie dla niego powiadomień.
  • Ograniczenia automatycznej odpowiedzi / wiadomości o nieobecności

Uwaga dotycząca obsługi wyrażeń regularnych

Implementacja Sieve w Protonie jest zgodna ze standardem filtrowania poczty e-mail Sieve, który zapewnia jedynie minimalną obsługę wyrażeń regularnych. Niektóre popularne skróty składniowe wyrażeń regularnych, takie jak \b (granica słowa), \w (znak słowa), \W (znak niebędący słowem) i \d (cyfra), nie są obsługiwane w Sieve. W rezultacie użycie tych skróconych zapisów w filtrach może sprawić, że nie zadziałają one i nie wyświetlą żadnego błędu. To ograniczenie wynika z samego standardu Sieve, który stawia na prostotę i kompatybilność między platformami. Pełne szczegóły znajdziesz w szkicu RFC dotyczącym wyrażeń regularnych Sieve.

Lista obsługiwanych akcji i testów

Pakiety

Sieve obsługuje następujące rozszerzenia. Więcej informacji znajdziesz w oficjalnej dokumentacji.

Data

  • Użycie: date
  • Opis: (nowe okno)Umożliwia sprawdzanie informacji o dacie.
  • Dokumentacja: https://tools.ietf.org/html/rfc5260(nowe okno)
  • Implementacja: Domyślnym komparatorem jest i;ascii-numeric, a nie i;ascii-casemap. Komparator casemap nie jest bowiem przydatny w przypadku dat.
  • Zobacz: Wiadomości o nieobecności i testy dat

Koperta

FileInto

  • Użycie: fileinto
  • Opis: Nakłada etykietę na wiadomość lub przenosi ją do folderu.
  • Dokumentacja: https://tools.ietf.org/html/rfc5228#section-4.1(nowe okno)
  • Implementacja: Ukośniki wskazują pełną ścieżkę do folderów i muszą zostać poprzedzone znakiem ucieczki, jeśli nazwa etykiety zawiera ukośnik. Obsługiwane są następujące opcje:
    • Work”: to jest etykieta lub folder o nazwie „Work”
    • Work/Project1”: to jest podfolder „Project1” znajdujący się w folderze „Work”
    • Work/Project1/Docs”: to jest podfolder „Docs” znajdujący się w podfolderze „Project1”, który znajduje się w folderze „Work”
    • Work/Misc\\/Others”: to jest podfolder „Misc/Others” znajdujący się w folderze „Work”
  • Zobacz: Wprowadzenie

Imap4flags

Odrzuć

Autoresponder

Zmienne

Relacyjne

  • Sposób użycia: relational
  • Opis: zapewnia relacyjne operatory dopasowania.
  • Dokumentacja: https://tools.ietf.org/html/rfc5231

Regex

  • Sposób użycia: regex
  • Opis: zapewnia operatory dopasowania wyrażeń regularnych.
  • Dokumentacja: https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html

Komparator numeryczny ASCII

Zewnętrznie przechowywane listy

  • Sposób użycia: extlists
  • Opis: zapewnia dostęp do list kontaktów.
  • Dokumentacja: https://tools.ietf.org/html/rfc6134(nowe okno)
  • Implementation: obsługiwane są następujące listy
    • addrbook:personal : osobista lista kontaktów. Obsługiwane są następujące zapytania:
      • label[.starts-with / .ends-with / .contains]=<group: string>: operacja na grupie kontaktów;
      • keypinning=<value: true / false> definicja klucza publicznego kontaktu;
      • encryption=<value: true / false> domyślne szyfrowanie kontaktu;
      • signing=<value: true / false>  domyślny podpis kontaktu.
    • :addrbook:myself adresy należące do bieżącego użytkownika;
    • :addrbook:organization adresy należące do członków bieżącej organizacji;
    • :incomingdefaults:inbox Lista dozwolonych
    • :incomingdefaults:spam Lista odrzuconych
  • See: Uzyskiwanie dostępu do swojej listy kontaktów

Eval

  • Sposób użycia: vnd.proton.eval
  • Opis: oblicza prostą funkcję arytmetyczną podaną w ciągu znaków.
  • Dokumentacja: Przekształcanie zmiennych

Include

Wygaśnięcie

Testy

Currentdate

  • Sposób użycia:
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>

Data

  • Sposób użycia:
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list

HasFlag

  • Sposób użycia:
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
  • Opis: Sprawdza, czy określona wiadomość ma określoną flagę.
  • Pakiet: imap4flags
  • Zobacz: Pierwsze kroki

Koperta

  • Sposób użycia:
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>

Adres·

  • Sposób użycia:
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>
  • Opis: Sprawdza, czy określone nagłówki przetworzone jako adres pasują do określonych kluczy.
  • Pakiet: <domyślny>
  • Zobacz: Porównanie z adresami w Sieve

Nagłówek

  • Sposób użycia:
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>

HasExpiration

  • Użycie:
hasexpiration
  • Opis: Sprawdza, czy wiadomość ma ustawiony czas wygaśnięcia.
  • Pakiet: vnd.proton.expire

Exists

  • Sposób użycia:
exists <header-names: string-list>

Wygaśnięcie

  • Sposób użycia:
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
  • Opis: Porównuje czas wygaśnięcia wiadomości z podanymi kluczami. Test zakończy się niepowodzeniem, jeśli zostanie uruchomiony dla wiadomości, która nie wygasa.
  • Pakiet: vnd.proton.expire

Size

  • Sposób użycia:
size <":over" / ":under"> <limit: number>

String

  • Sposób użycia:
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
  • Opis: Sprawdza, czy którykolwiek z ciągów źródłowych pasuje do któregokolwiek klucza.
  • Pakiet: variables

Anyof

  • Sposób użycia:
anyof <tests: test-list>
  • Opis: Wykonuje logiczną operację OR na przekazanych testach.
  • Pakiet: <domyślny>
  • Zobacz: Wprowadzenie

Allof

  • Sposób użycia:
allof <tests: test-list>
  • Opis: Wykonuje logiczną operację AND na przekazanych testach.
  • Pakiet: <domyślny>
  • Zobacz: Pierwsze kroki

Not

  • Sposób użycia:
not <test: test>
  • Opis: Odwraca wynik podanego testu.
  • Pakiet: <domyślny>
  • Zobacz: Pierwsze kroki

True

  • Sposób użycia:
true
  • Opis: Zawsze pasuje.
  • Pakiet: <domyślny>

False

  • Sposób użycia:
false
  • Opis: Nigdy nie pasuje.
  • Pakiet: <domyślny>

Akcje

Require

  • Sposób użycia:
require <packages: string-list>
  • Opis: Wczytuje określone rozszerzenie, aby można było korzystać z jego metod lub modyfikacji.
  • Pakiet: <domyślny>
  • Zobacz: Wprowadzenie

FileInto

  • Sposób użycia:
fileinto <folder: string>
  • Opis: Przenosi przetwarzaną wiadomość do określonego folderu.
  • Pakiet: fileinto
  • Zobacz: Pierwsze kroki

Addflag

  • Sposób użycia:
addflag <list-of-flags: string-list>
  • Opis: Dodaje określoną flagę do przetwarzanej wiadomości.
  • Pakiet: imap4flags
  • Zobacz: Pierwsze kroki

Removeflag

  • Sposób użycia:
removeflag <list-of-flags: string-list>
  • Opis: Usuwa określone flagi z przetwarzanej wiadomości.
  • Pakiet: imap4flags

Setflag

  • Sposób użycia:
setflag <list-of-flags: string-list>
  • Opis: Usuwa wszystkie flagi i ustawia określone flagi w przetwarzanej wiadomości.
  • Pakiet: imap4flags

Stop

  • Sposób użycia:
stop
  • Opis: Zatrzymuje przetwarzanie wszystkich filtrów Sieve. Kolejne filtry Sieve nie zostaną uruchomione.
  • Pakiet: <domyślny>

Return

  • Użycie:
return
  • Opis: Zatrzymuje przetwarzanie bieżącego filtra Sieve. Kolejne filtry Sieve nadal będą uruchamiane.
  • Pakiet: include

Set

  • Sposób użycia:
set [MODIFIER] <name: string> <value: string>
  • Opis: Tworzy nowe zmienne, powiązując podaną nazwę z podaną wartością.
  • Pakiet: variables
  • Zobacz również: Tworzenie zmiennych

Discard

  • Sposób użycia:
discard
  • Opis: Odrzuca wiadomość na końcu tego filtra Sieve. Po odrzuceniu żadne inne filtry Sieve nie zostaną uruchomione.
  • Pakiet: <domyślny>

Keep

  • Sposób użycia:
keep
  • Opis: Cofa ostatnie polecenie discard. Zadziała tylko wtedy, gdy znajduje się w tym samym filtrze Sieve. Jeśli żadne polecenie discard nie zostało wykonane, to polecenie nic nie zrobi.
  • Pakiet: <domyślny>

Odrzuć

  • Sposób użycia:
reject <reason: string>

Expire

  • Użycie:
expire <unit: "day" / "minute" / "second"> <value: string>
  • Opis: Powoduje wygaśnięcie wiadomości po określonym czasie.
  • Pakiet: vnd.proton.expire
  • Zobacz: Zarządzanie wygasaniem

Unexpire

  • Sposób użycia:
unexpire
  • Opis: Usuwa czas wygaśnięcia wiadomości.
  • Pakiet: vnd.proton.expire

Autoresponder

  • Sposób użycia:
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
  • Opis: Wysyła automatyczną odpowiedź na adres SMTP nadawcy z określonym powodem w treści.
  • Pakiet: vacation (wymaga płatnego konta)
  • Zobacz: Wiadomości urlopowe i testy daty

Prawidłowa lista zewnętrzna

  • Użycie:
valid_ext_list <ext-list-names: string-list>
  • Opis: Sprawdza, czy wszystkie podane listy zewnętrzne są obsługiwane i prawidłowe.
  • Pakiet: extlists