Hi Volker! This is what I wanted to avoid with my question. I reported my script with only three word just to make an example but my list is quite longer than this. Let's suppose a list of 30 or 40 words... 30 or 40 rules? Possible but very unconfortable to manage. A more compact version of the script could be this:
-- the script begins ------------ require ["fileinto", "imap4flags", "editheader", "body", "vnd.dovecot.debug"]; if anyof ( body :text :contains [ "crypto", "sex", "viagra" ]) { setflag "\\Seen"; addheader :last "X-Sieve-Filtered" "blocked words in message body"; fileinto "INBOX.Spam"; debug_log "Body contains blocked word: <the matching word>"; } -- the script ends -------------- This is simpler to maintain if you have a long list of word. And here comes my previous question: it would be great if there is a way to log the matching word in order to know what word in that list was the "culprit". Lukas ----- Messaggio originale ----- Da: "Volker Wysk" <p...@volker-wysk.de> A: "dovecot" <dovecot@dovecot.org> Inviato: Sabato, 30 giugno 2018 12:14:11 Oggetto: Re: How to log a Sieve match in Dovecot debug_log Am Samstag, 30. Juni 2018, 11:28:43 CEST schrieb Lukas: > Hi everybody! > > I manage a mail server running Dovecot 2.2.21 with Pigeonhole 0.4.10. I > successfully configured sieve and use it also to filter some spam messages. > Here is one of the script I use to filter messages on the basis of prohibited > words in message body. > > As you can see, the last command writes to the log the action of this script. > > > -- the script begins ------------ > > require ["fileinto", "imap4flags", "editheader", "body", > "vnd.dovecot.debug"]; > > if anyof ( > > body :text :contains "crypto", > body :text :contains "sex", > body :text :contains "viagra" > ) > { > setflag "\\Seen"; > addheader :last "X-Sieve-Filtered" "blocked words in message body"; > fileinto "INBOX.Spam"; > debug_log "Body contains blocked word: <the matching word>"; > } > > -- the script ends -------------- > > > MY QUESTION: is there a way to have also the result of the match in that log > message? I mean, is it possible to have that "<the matching word>" > substituted with the exact word that matched one of the conditions (more or > less the same way it is possible using Exim's System Filter)? I googled and > searched a lot Dovecot documentation but wasn't able to find a definite YES > or NO to this question. You could make a separate rule for each of the words which should be blocked... Volker