Newsgroup: it.comp.os.linux.sys
Titolo: sieve scripting

Ciao
 
sto cercando di creare uno script per eseguire un azione su messaggi che 
abbiano la seguente caratteristica:
 
tra i destinatari "to" e "cc" sia presente piu' di un indirizzo con 
"@
dominio.it
"
 
in alternativa andrebbe bene anche:
 
tra i destinatari "to" e "cc" sia presente almeno un indirizzo "@
dominio.it
" 
diverso da "
pi...@dominio.it
"
 
inutile dire che non ci sto riuscendo :(
 
Al momento ho messo:
 
if address :is :all "cc" "
pi...@dominio.it
" {
        if address :is :domain "to" "
dominio.it
" {
                fileinto zzzzz;
        }
}
 
if address :is :all "to" "
pi...@dominio.it
" {
        if address :is :domain "cc" "
dominio.it
" {
                fileinto zzzzz;
        }
}
 
Ma questo funziona solo nel caso in cui gli indirizzi @
dominio.it
 siano 
uno in "to" e uno o piu' in "cc"
 
Ho provato, devo dire senza capirci molto, con:
 
if address :count "gt" :domain [ "to", "cc" ] "@
dominio.it
" [1] 
 
ma mi da errore: line 7: expecting string after '[' in string list, but 
found number
 
e non ho idea se potrebbe funzionare o è una strada senza uscita.
 
Ho provato:
 
if address :is :domain [ "to", "cc" ] "@
dominio.it
" {
        if not address :is :all [ "to", "cc" ] "
pi...@dominio.it
" {
                fileinto zzzzz;
        }
}
 
ma non sortisce effetti.
 
 
Qualcuno ha qualche idea ?
 
-- 
Stefano L.
 
3987^12  +  4365^12  =  4472^12

 "@
dominio.it
"
 
Ciao, non ho letto approfonditamente, ma ho visto che stai facendo degli 
if dentro altri if.
 
Sieve supporta anche altri costrutti logici, in particolare *anyof*:
 
Con anyof puoi specificare molteplici condizioni, e un blocco di 
istruzioni che verrà eseguito se si verifica almeno una delle condizioni:
 
if anyof (condizione1 [, condizione2]* ) {
	istruzione ;
}
 
Vedi degli esempi su 
http://wiki2.dovecot.org/Pigeonhole/Sieve/Examples
 
 
Per curiosità, cosa usi per fare Sieve?
 
Io uso il plug-in di Dovecot.
 
Saluti,
-- 
Rzl

 Io uso il plug-in di Dovecot.
 
Sì sto usando anche io Dovecot.


 }
 
Occhio, :domain non della "@" nel dominio.
 
Also, io farei delle prove con delle condizioni prese singolarmente, 
visto che "allof" non funzionerà se anche una sola delle condizioni non 
matcha.
 
-- 
Rzl

Stefano L. wrote:
 
Alla fine ho fatto quello che mi serviva :)
Magari ci sono modi migliori ma non ne ho trovati.
 
Ho usato :count  e  :regex
 
# Sieve Filter of 
pi...@dominio.it
 
require ["fileinto","regex","envelope","variables","mailbox","relational",
"comparator-i;ascii-numeric"];
 
# Messaggio con un solo indirizzo di destinazione, è evidente che
# è 
pi...@dominio.it
, quindi eseguo l'azione che mi serve
#
if address :count "eq" :comparator "i;ascii-numeric" ["to", "cc"] ["1"] {
        fileinto SoloPippo;
        stop;
}
 
# Messaggio che ha almeno un indirizzo di destinazione @
dominio.it
 
# che non è 
pi...@dominio.it
 quindi non devo fare nulla
# questa regex è un po' empirica ma per me funziona
#
if address :regex ["to", "cc"] "[a-zA-Z][^pP][^pP][a-zA-Z][@]
dominio.it
" {
        stop;
}
 
# Se siamo arrivati qui è evidente che il messaggio ha più destinazioni
# ma una sola @
dominio.it
 e quindi eseguo l'azione che mi serve
#
fileinto SoloPippo;
