Hi list,

I have Sieve scripts that unintentionally duplicate e-mails. My dovecot version 
is 2.3.4.1 (f79e8e7e4), Pigeonhole version 0.5.4 on Linux 5.4.189-2-pve x86_64 
Debian 10.13.

My scripts get called on an imap COPY action (imapsieve extension). The mail is 
fed to an external script (spam/ham training) via a pipe :copy action 
(vnd.dovecot.pipe extension). An header is added to keep track of what happened 
(editheader extension). 

I use "if header :contains” for my (simple) logic. If contains header X, do 
this, add header Y. If contains header Y, do that, add header X. I end each 
"if” part with keep; and stop; commands.

Simple versions of this script, without the if-then construct, seem to work ok. 
As soon as I try to use if-then-else I find a duplicate of the processed 
e-mail; one that seems to be untouched, one that appears to have been 
processed. I hope I’m making myself clear…


# without if-then
require …
pipe :copy …
addheader …
keep;


# with if-then
require …

if header :contains
   pipe :copy …
   addheader …
   keep;
   stop;

if not exists
   pipe :copy …
   addheader …
   keep;
   stop;

keep;


The scripts get called from for instance imapsieve_mailbox1_before.

Cheers,
Ferenc

Reply via email to