[Dovecot] duplicates with multiple To/CC and sieve redirect copy

Stephan Bosch stephan at rename-it.nl
Thu Feb 23 03:15:48 EET 2012

On 2/22/2012 12:15 AM, Adam Szpakowski wrote:
> On 22.02.2012 00:09, Timo Sirainen wrote:
>> Well, it would be possible to build a doveadm script that deletes the 
>> duplicates after delivery, but currently there's no implementation to 
>> avoid delivering duplicate Message-IDs in the first place.
>> I don't really like such a Message-ID-based deduplication feature 
>> enabled by default, but something like this could be nice:
>> fileinto :copy :x-deduplicate "boss";
>> Anyway, probably not going to be implemented anytime soon.
> Maybe there is a way to use a procmail with something like this:
> :0 Wh: msgid.lock
> | formail -D 8192 .msgid.cache
> But is there a safe way to use it together with sieve? Using 
> Pigeonhole Sieve Pipe Plugin?

There are a few options:

* You can use Procmail as primary delivery agent and invoke 
dovecot-lda/sieve from within Procmail once Procmail has determined that 
it is not a duplicate.

* Invoke procmail from Sieve using the pipe extension (i.e. the other 
way around). This  has the disadvantage that Procmail will have to take 
care of final delivery, meaning the Dovecot indexes are not updated.

* For Pigeonhole v0.3 there is the possibility to "filter" the message 
through Procmail using the sieve_extprograms plugin, but I haven't 
actually tested something like that.

* I've just created an alternative that implements something similar to 
the Procmail code you posted above, but from within Sieve itself. It is 
a custom language extension called vnd.dovecot.duplicate and it adds the 
"duplicate" test. This test keeps track of which Message-IDs it has seen 
before in earlier deliveries and yields a true result if the message was 
seen before, e.g.:

require "vnd.dovecot.duplicate";

if duplicate {

Read the specification for details ("name" argument is not yet implemented):


The repository is at: http://hg.rename-it.nl/pigeonhole-0.3-sieve-duplicate

This plugin is only a few hours old, experimental, and largely untested, 
so test it thoroughly before considering to use this. Read the INSTALL 
file for compile and installation instructions.

Comments are welcome.



More information about the dovecot mailing list