Przejdź do treści

Sieve

Sieve to skryptowy język służący do automatyzacji wielu zadań związanych z kontami pocztowymi (na przykład automatycznemu odpowiadaniu, kopiowaniu wiadomości na inny adres, czy odrzucaniem niektórych wiadomości). Skrypt Sieve działa po stronie serwera.

Zarządzenie skryptem Sieve jest możliwe z:

  • programu pocztowego (np. w Thunderbird wymagany dodatkowy add-on)
  • skryptu perl sieve-connect - zainstalowany na serwerach SMALL.PL
  • webmaila Roundcube (UstawieniaFiltry) - nie jest wymagana znajomość składni.

Struktura skryptu Sieve nie jest skomplikowana i do napisania najprostszej reguły nie potrzeba znać żadnego języka programowania. Skrypt składa się z listy prostych poleceń, takich jak: fileinto (przenieś do folderu), if (jeśli jakiś warunek jest spełniony), discard (odrzuć), etc.

Składnia

require ["fileinto", "reject", "vacation", "regex", "relational", "comparator-i;ascii-numeric"];

if size :over 1024K {
  reject "Wiadomość niedostarczona. Zbyt duży rozmiar.";
  stop;
}

require["..."]; - ta linia informuje z jakich modułów będziemy korzystać (fileinto do umieszczenia wiadomości w folderze, reject do odrzucania wiadomości, vacation do wysyłania automatycznej wiadomości, regex do wykorzystania wyrażeń regularnych oraz relational wraz z comparator-i;ascii-numeric do porównań numerycznych).

if size :over 1024K { - Ta linia sprawdza czy rozmiar wiadomości jest większy niż 1024 KB.

reject "(...)"; - w tej linii wiadomość jest odrzucana.

stop; - w tej linii Steve przestaje analizować dalszą część skryptu.

} - nawias zamykający to, co się dzieje po spełnieniu warunku w if.

Test

size - sprawdza czy rozmiar wiadomości jest większy :over, bądź mniejszy :under od podanej wartości w M (megabajtach), K (kilobajtach) bądź domyślnie w bajtach (na przykład 10M, 20K, 1024).

header - sprawdzanie pól nagłówka.

address - sprawdzanie tylko adresu z nagłówka. Na przykład wiadomość wysłano jako Jan Nowak <jnowak@domena>. Zdanie header "From" :is "jnowak@domena" jest fałszywe, natomiast address :is "jnowak@domena" jest prawdziwe.

allof (lista testów) - zwraca prawdę tylko wtedy, gdy każdy z testów z listy jest prawdziwy.

anyof (lista testów) - zwraca prawdę, gdy dowolny z testów z listy jest prawdziwy.

true - zawsze zwraca prawdę.

false - zawsze zwraca fałsz.

not <test> - zwraca fałsz gdy test zwrócił prawdę i vice-versa.

Porównania

:is - wartość testowanego pola musi być identyczna z podanym parametrem.

:matches - wartość testowanego pola musi pasować do podanego wzorca. We wzorcu poza znakami można używać * - zero lub więcej dowolnych znaków oraz ? - dokładanie jeden dowolny znak.

:contains - wartość testowanego pola musi zawierać podany parametr.

:over - działa tylko dla liczb. Jeżeli podana wartość jest większa niż sprawdzana wartość zwraca prawdę.

:under - działa tylko dla liczb. Jeżeli podana wartość jest mniejsza niż sprawdzana wartość zwraca prawdę.

:count - pozwala przeliczać ile jest pozycji w danym polu.

Konstrukcja

[...] - nawiasy kwadratowe służą do wskazywania grup. Na przykład ["Jan","Adam","Michał"] wskazuje grupę trzech osób.

{...} - nawiasy klamrowe służą do wskazywania bloku instrukcji, które muszą zostać wykonane jeżeli wynik testu będzie prawdą.

if - służy do sprawdzania czy podane wyrażenie jest prawdziwe. Jeżeli jest to wykonywany jest blok instrukcji podany po if.

else - w przypadku gdy wyrażenie w if jest fałszywe to wykonywane jest blok instrukcji podany po else.

elseif - połączenie else i if. Gdy wyrażenie w if jest fałszywe to wykonywany jest kolejny if.

stop - kończy działanie skryptu.

Akcje

keep - zatrzymuje wiadomość w obecnym folderze.

fileinto "NAZWAFOLDERU" - przenosi wiadomość do wskazanego folderu. Jeżeli ten nie istnieje, to wiadomość trafi do skrzynki odbiorczej.

discard - usuwa wiadomość bez powiadamiania o tym nadawcy.

reject "POWÓD" - zwraca wiadomość z błędem do nadawcy z opcjonalnym powodem.

redirect "ADRES_EMAIL" - wysyła dalej wiadomość bez zatrzymania jej kopii o ile keep bądź fileinto nie zostanie wykonane.

Komentarz

# Komentarz jednoliniowy od znaku '#' do końca linii. Treść jest ignorowana przez parser Sieve.
/* Komentarz blokowy
 * Wszystkie linijki  ignorowane od momentu rozpoczęcia komentarza ciągiem znaków '/*',
 *  do momentu zakończenia komentarza ciągiem znaków */

Przykłady

  • Na wiadomości kierowane do jan.nowak@domena i j.nowak@domena będzie wysyłana automatyczna odpowiedź (przykład konfiguracji z poziomu Webmail Roundcube - Autoresponder):
require ["vacation"];
vacation
  # Wyślij maksymalnie raz dziennie do tego samego adresata
  :days 1
  :subject "Poza biurem - odpowiedź automatyczna"
  :addresses ["jan.nowak@domena", "j.nowak@domena"]
"Dzień dobry,
jestem poza biurem, proszę się kontaktować z Adamem Nowakiem - adam.nowak@domena.
Pozdrawiam,
Jan Nowak";
  • Wiadomości od newsletter@domena będą trzymane w folderze INBOX.Newsletters:
if address :is "From" "newsletter@domena" {
  fileinto "INBOX.Newsletters";
  stop;
}
  • Wiadomości z domeny domena będą trzymane w folderze INBOX.Example:
if address :is "From" "newsletter@mypals.org" {
  fileinto "INBOX.Example";
  stop;
}
  • Usuwa wiadomości z podanymi typami załączników:
if header :contains "x-attached"
  [".exe",".bat",".js",".com",".cmd",".ini",".dll",".bas",".cpl",".drv",".inf",".sys",".pif"] {
  discard;
  stop;
}
  • Odrzuca wiadomości większe niż 5MB powiadamiając o tym nadawcę.
if size :over 5M {
   reject "Wielkość wiadomości maksymalnie 5MB.";
}
  • Wiadomości od Adam Adamski, które nie zostały nikomu innemu przesłane będą trzymane w folderze INBOX.Adam:
if allof(
  header :contains ["From"] "Adam Adamski",
  header :is ["Bcc:","Cc:"] ""
){
  fileinto "INBOX.Adam";
}

Uwaga

W przypadku gdy nie utworzy się dowiązanie symboliczne do skryptu, należy utworzyć je ręcznie. Przejdź do katalogu skrzynki poleceniem: cd ~/mail/ADRES@EMAIL (gdzie ADRES@EMAIL to adres utworzonej skrzynki) i wykonaj polecenie: ln -s sieve/managesieve.sieve .dovecot.sieve (managesieve.sieve - domyślna nazwa skryptu).

Spam

Opcje konfiguracji dotyczące zachowania wobec wiadomości wykrytych jako spam są dostępne poprzez Devil jak i DevilWEB. Przez Sieve (w tym poprzez edytor wizualny dostępny w webmail) można dodać m.in. dodatkowe akcje wobec wiadomości wykrytych jako spam, otrzymujących daną wartość punktową.

Do wiadomości e-mail dodawane są nagłówki:

  • X-Spam-Status - informujący o prawdopodobieństwie spamu (0 - normalna wiadomość, 5 - prawdopodobny spam, >10 - automatyczne odrzucanie wiadomości przez serwer) wraz ze wskazaniem punktacji powodu przyznania punktów.
  • X-Spam-Level - oznaczenie punktacji w formie gwiazdek z zaokrągleniem (przykładowo przyznany 1 punkt w zaokrągleniu widoczny jest jako jedna gwiazdka, dwa punkty w zaokrągleniu jako dwie gwiazdki).
  • X-Spam-Flag - informujący o tym, że wiadomość została zidentyfikowana jako spam.

Zobacz też

Autoresponder
Przekierowanie e-mail
SpamAssassin