Sieve: Różnice pomiędzy wersjami

(Przykłady)
 
(Nie pokazano 22 wersji utworzonych przez 4 użytkowników)
Linia 1: Linia 1:
{{Stub}}
+
''Sieve'' to skryptowy język służący do automatyzacji wielu zadań związanych z [[poczta|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.  
 
 
''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:
 
Zarządzenie skryptem Sieve jest możliwe z:
* programu pocztowego (np. w Thunderbird wymagany dodatkowy add-on)
+
* programu pocztowego (np. w Thunderbird wymagany dodatkowy [https://github.com/thsmi/sieve add-on]),
* skryptu perl <code>sieve-connect</code>
+
* skryptu perl <code>sieve-connect</code> - zainstalowany na serwerach ''MyDevil'',
* webmaila roundcube (Ustawienia → Filtry) - nie jest wymagana znajomość składni.
+
* webmaila [https://poczta.mydevil.net 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.
 
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.
Linia 19: Linia 17:
 
<code>require["..."];</code> - 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).
 
<code>require["..."];</code> - 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).
  
<code>if size :over 1024K {</code> - Ta linia sprawdza czy rozmiar wiadomości jest większy niż 1024KB
+
<code>if size :over 1024K {</code> - Ta linia sprawdza czy rozmiar wiadomości jest większy niż 1024KB.
  
<code>reject "(...)";</code> - W tej linii wiadomość jest odrzucana
+
<code>reject "(...)";</code> - W tej linii wiadomość jest odrzucana.
  
 
<code>stop;</code> - W tej linii Steve przestaje analizować dalszą część skryptu.
 
<code>stop;</code> - W tej linii Steve przestaje analizować dalszą część skryptu.
Linia 32: Linia 30:
 
<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>''. Zdanie <code>header "From" :is "jnowak@example.com"</code> jest fałszywe, natomiast <code>address :is "jnowak@example.com"</code> jest prawdziwe.
+
<code>address</code> Sprawdzanie tylko adresu z nagłówka. Na przykład mail wysłano jako ''Jan Nowak <jnowak@domena>''. Zdanie <code>header "From" :is "jnowak@domena"</code> jest fałszywe, natomiast <code>address :is "jnowak@domena"</code> jest prawdziwe.
  
 
<code>allof (lista testów)</code> Zwraca prawdę tylko wtedy, gdy każdy z testów z listy jest prawdziwy.
 
<code>allof (lista testów)</code> Zwraca prawdę tylko wtedy, gdy każdy z testów z listy jest prawdziwy.
Linia 46: Linia 44:
 
=== Porównania ===
 
=== Porównania ===
  
<code>:is</code> wartość testowanego pola musi być identyczna z podanym parametrem.
+
<code>:is</code> Wartość testowanego pola musi być identyczna z podanym parametrem.
  
<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>: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> wartość testowanego pola musi zawierać podany parametr.
+
<code>:contains</code> Wartość testowanego pola musi zawierać podany parametr.
  
<code>:over</code> działa tylko dla liczb. Jeżeli podana wartość jest większa niż sprawdzana wartość zwraca pradę.  
+
<code>:over</code> Działa tylko dla liczb. Jeżeli podana wartość jest większa niż sprawdzana wartość zwraca prawdę.  
  
<code>:under</code> działa tylko dla liczb. Jeżeli podana wartość jest mniejsza niż sprawdzana wartość zwraca pradę.
+
<code>:under</code> Działa tylko dla liczb. Jeżeli podana wartość jest mniejsza niż sprawdzana wartość zwraca prawdę.
  
<code>:count</code> pozwala przeliczać ile jest pozycji w danym polu.  
+
<code>:count</code> Pozwala przeliczać ile jest pozycji w danym polu.  
  
 
=== Konstrukcja ===
 
=== Konstrukcja ===
  
<code>[...]</code> nawiasy kwadratowe służą do wskazywania grup. Na przykład <code>["Jan","Adam","Michał"]</code> wskazuje grupę trzech osób,
+
<code>[...]</code> Nawiasy kwadratowe służą do wskazywania grup. Na przykład <code>["Jan","Adam","Michał"]</code> wskazuje grupę trzech osób.
  
<code>{...}</code> nawiasy klamrowe służą do wskazywania bloku instrukcji, które muszą zostać wykonane jeżeli wynik testu będzie prawdą.
+
<code>{...}</code> Nawiasy klamrowe służą do wskazywania bloku instrukcji, które muszą zostać wykonane jeżeli wynik testu będzie prawdą.
  
<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>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>else</code> w przypadku gdy wyrażenie w if jest fałszywe to wykonywane jest blok instrukcji podany po else.
+
<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>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>stop</code> kończy działanie skryptu.
+
<code>stop</code> Kończy działanie skryptu.
  
 
=== Akcje ===
 
=== Akcje ===
  
<code>keep</code> zatrzymuje wiadomość w obecnym folderze.
+
<code>keep</code> Zatrzymuje wiadomość w obecnym folderze.
  
<code>fileinto "nazwafolderu"</code> przenosi wiadomość do wskazanego folderu. Jeżeli ten nie istnieje, to wiadomość trafi do skrzynki odbiorczej.
+
<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>discard</code> Usuwa wiadomość bez powiadamiania o tym nadawcy.  
  
<code>reject "powód"</code> zwraca wiadomość z błędem do nadawcy z opcjonalnym powodem.
+
<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.
 
<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.
Linia 91: Linia 89:
 
=== Przykłady ===
 
=== Przykłady ===
  
Wiadomości od ''newsletter@example.com'' będą trzymane w folderze ''INBOX.Newslatters'':
+
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]]):
  if address :is "From" "newsletter@mypals.org" {
+
require ["vacation"];
   fileinto "INBOX.Newslatters";
+
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;
 
   stop;
 
  }
 
  }
  
Wiadomości z domeny ''example.com'' będą trzymane w folderze ''INBOX.Example'':
+
Wiadomości z domeny ''domena'' będą trzymane w folderze ''INBOX.Example'':
 
  if address :is "From" "newsletter@mypals.org" {
 
  if address :is "From" "newsletter@mypals.org" {
 
   fileinto "INBOX.Example";
 
   fileinto "INBOX.Example";
Linia 122: Linia 132:
 
   fileinto "INBOX.Adam";
 
   fileinto "INBOX.Adam";
 
  }
 
  }
 +
 +
{{Warning|W przypadku gdy nie utworzy się dowiązanie symboliczne Twojego skryptu, należy utworzyć je ręcznie. Przejdź do katalogu skrzynki <code>cd ~/mail/adres@email</code> (gdzie "adres@email" to adres utworzonej skrzynki) i wykonaj polecenie: <code>ln -s sieve/managesieve.sieve .dovecot.sieve </code>(managesieve.sieve - domyślna nazwa skryptu).
 +
 +
}}
 +
 +
=== Spam ===
 +
 +
Opcje konfiguracji dotyczące zachowania wobec maili wykrytych jako spam są dostępne poprzez Devil jak i  [[Poczta#Spam| Devil jak i DevilWEB]]. Przez Sieve (w tym poprzez edytor wizualny dostępny w webmail) natomiast można dodać m.in. dodatkowe akcje wobec maili wykrytych jako spam, otrzymujących daną wartość punktową.
 +
Do wiadomości email dodawane są nagłówki:
 +
* X-Spam-Status informujący o prawdopodobieństwie spamu (0-normalna wiadomość, 5 - prawdopodobny spam, >10 automatyczne odrzucane przez mydevil) 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]]
 +
  
 
[[Category:Poczta]]
 
[[Category:Poczta]]

Aktualna wersja na dzień 15:40, 18 sie 2021

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 MyDevil,
  • 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 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@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 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 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";
}

Spam

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

Do wiadomości email dodawane są nagłówki:
  • X-Spam-Status informujący o prawdopodobieństwie spamu (0-normalna wiadomość, 5 - prawdopodobny spam, >10 automatyczne odrzucane przez mydevil) 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ż