Sieve: Różnice pomiędzy wersjami
(Utworzono nową stronę "{{Stub}} ''Sieve'' to skryptowy język służący do automatyzacji wielu zadań związanych z kontami pocztowymi (na przykład automatycznemu odpowiadaniu, kopiowaniu w...") |
|||
Linia 26: | Linia 26: | ||
<code>}</code> - Nawias zamykający to, co się dzieje po spełnieniu warunku w if. | <code>}</code> - Nawias zamykający to, co się dzieje po spełnieniu warunku w if. | ||
− | + | === Test === | |
<code>size</code> Sprawdza czy rozmiar wiadomości jest większy <code>:over</code>, bądź mniejszy <code>:under</code> od podanej wartości w M(megabajtach), K(kilobajtach) bądź domyślnie w bajtach (na przykład 10M, 20K, 1024). | <code>size</code> Sprawdza czy rozmiar wiadomości jest większy <code>:over</code>, bądź mniejszy <code>:under</code> od podanej wartości w M(megabajtach), K(kilobajtach) bądź domyślnie w bajtach (na przykład 10M, 20K, 1024). | ||
Linia 32: | Linia 32: | ||
<code>header</code> Sprawdzanie pól nagłówka. | <code>header</code> Sprawdzanie pól nagłówka. | ||
− | <code>address</code> Sprawdzanie tylko adresu z nagłówka. Na przykład mail wysłano jako ''Jan Nowak <jnowak@example.com>''. | + | <code>address</code> Sprawdzanie tylko adresu z nagłówka. Na przykład mail wysłano jako ''Jan Nowak <jnowak@example.com>''. Zdanie <code>header "From" :is "jnowak@example.com"</code> jest fałszywe, natomiast <code>address :is "jnowak@example.com"</code> jest prawdziwe. |
− | <code>allof</code> | + | <code>allof (lista testów)</code> Zwraca prawdę tylko wtedy, gdy każdy z testów z listy jest prawdziwy. |
− | <code>anyof</code> | + | <code>anyof (lista testów)</code> Zwraca prawdę, gdy dowolny z testów z listy jest prawdziwy. |
− | <code>true</code> | + | <code>true</code> Zawsze zwraca prawdę. |
− | <code>false</code> | + | <code>false</code> Zawsze zwraca fałsz. |
− | <code>not</code> | + | <code>not <test></code> Zwraca fałsz gdy test zwrócił prawdę i vice-versa. |
− | + | === Porównania === | |
− | <code>:is</code> | + | <code>:is</code> wartość testowanego pola musi być identyczna z podanym parametrem. |
− | <code>:matches</code> | + | <code>:matches</code> wartość testowanego pola musi pasować do podanego wzorca. We wzorcu poza znakami można używać <code>*</code> - zero lub więcej dowolnych znaków oraz <code>?</code> - dokładanie jeden dowolny znak. |
− | <code>:contains</code> | + | <code>:contains</code> wartość testowanego pola musi zawierać podany parametr. |
− | <code>:over</code> | + | <code>:over</code> działa tylko dla liczb. Jeżeli podana wartość jest większa niż sprawdzana wartość zwraca pradę. |
− | <code>:under</code> | + | <code>:under</code> działa tylko dla liczb. Jeżeli podana wartość jest mniejsza niż sprawdzana wartość zwraca pradę. |
− | <code>:count</code> | + | <code>:count</code> pozwala przeliczać ile jest pozycji w danym polu. |
+ | === Konstrukcja === | ||
− | <code> | + | <code>[...]</code> nawiasy kwadratowe służą do wskazywania grup. Na przykład <code>["Jan","Adam","Michał"]</code> wskazuje grupę trzech osób, |
− | <code> | + | <code>{...}</code> nawiasy klamrowe służą do wskazywania bloku instrukcji, które muszą zostać wykonane jeżeli wynik testu będzie prawdą. |
− | <code> | + | <code>if</code> służy do sprawdzania czy podane wyrażenie jest prawdziwe. Jeżeli jest to wykonywany jest blok instrukcji podany po if. |
− | <code> | + | <code>else</code> w przypadku gdy wyrażenie w if jest fałszywe to wykonywane jest blok instrukcji podany po else. |
+ | <code>elseif</code> połączenie <code>else</code> i <code>if</code>. Gdy wyrażenie w if jest fałszywe to wykonywany jest kolejny if. | ||
− | <code> | + | <code>stop</code> kończy działanie skryptu. |
− | + | === Akcje === | |
− | <code> | + | <code>keep</code> zatrzymuje wiadomość w obecnym folderze. |
− | <code> | + | <code>fileinto "nazwafolderu"</code> przenosi wiadomość do wskazanego folderu. Jeżeli ten nie istnieje, to wiadomość trafi do skrzynki odbiorczej. |
+ | <code>discard</code> usuwa wiadomość bez powiadamiania o tym nadawcy. | ||
− | <code> | + | <code>reject "powód"</code> zwraca wiadomość z błędem do nadawcy z opcjonalnym powodem. |
− | + | <code>redirect "adres_email"</code> Wysyła dalej wiadomość bez zatrzymania jej kopii o ile <code>keep</code> bądź <code>fileinto</code> nie zostanie wykonane. | |
+ | |||
+ | === Komentarz === | ||
# Komentarz jednoliniowy od znaku '#' do końca linii. Treść jest ignorowana przez parser Sieve. | # Komentarz jednoliniowy od znaku '#' do końca linii. Treść jest ignorowana przez parser Sieve. | ||
/* Komentarz blokowy | /* Komentarz blokowy | ||
Linia 84: | Linia 89: | ||
* aż do momentu zakończenia komentarza ciągiem znaków */ | * aż do momentu zakończenia komentarza ciągiem znaków */ | ||
+ | === Przykłady === | ||
+ | |||
+ | Wiadomości od ''newsletter@example.com'' będą trzymane w folderze ''INBOX.Newslatters'': | ||
+ | if address :is "From" "newsletter@mypals.org" { | ||
+ | fileinto "INBOX.Newslatters"; | ||
+ | stop; | ||
+ | } | ||
+ | |||
+ | Wiadomości z domeny ''example.com'' będą trzymane w folderze ''INBOX.Example'': | ||
+ | if address :is "From" "newsletter@mypals.org" { | ||
+ | fileinto "INBOX.Example"; | ||
+ | stop; | ||
+ | } | ||
+ | |||
+ | Usuwa maile 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"; | ||
+ | } | ||
[[Category:Poczta]] | [[Category:Poczta]] |
Wersja z 14:09, 2 mar 2015
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
- 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.
Spis treści
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 maila 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ż 1024KB
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 mail wysłano jako Jan Nowak <jnowak@example.com>. Zdanie header "From" :is "jnowak@example.com"
jest fałszywe, natomiast address :is "jnowak@example.com"
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 pradę.
:under
działa tylko dla liczb. Jeżeli podana wartość jest mniejsza niż sprawdzana wartość zwraca pradę.
: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
Wiadomości od newsletter@example.com będą trzymane w folderze INBOX.Newslatters:
if address :is "From" "newsletter@mypals.org" { fileinto "INBOX.Newslatters"; stop; }
Wiadomości z domeny example.com będą trzymane w folderze INBOX.Example:
if address :is "From" "newsletter@mypals.org" { fileinto "INBOX.Example"; stop; }
Usuwa maile 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"; }