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 (
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@domena
ij.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 folderzeINBOX.Newsletters
:
if address :is "From" "newsletter@domena" {
fileinto "INBOX.Newsletters";
stop;
}
- Wiadomości z domeny
domena
bę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ż
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 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.