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
Thunderbirdwymagany dodatkowy add-on) - skryptu perl
sieve-connect- zainstalowany na serwerach mydevil.net - webmaila Roundcube (
Ustawienia→Filtry) - 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 są ignorowane od momentu rozpoczęcia komentarza ciągiem znaków '/*',
* aż do momentu zakończenia komentarza ciągiem znaków */
Przykłady¶
- Na wiadomości kierowane do
jan.nowak@domenaij.nowak@domenabę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@domenabędą trzymane w folderzeINBOX.Newsletters:
if address :is "From" "newsletter@domena" {
fileinto "INBOX.Newsletters";
stop;
}
- Wiadomości z domeny
domenabędą trzymane w folderzeINBOX.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ż
5MBpowiadamiają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 folderzeINBOX.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.