Op 23/02/2012 om 02:15:48 +0100, schreef Stephan Bosch: > 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 { > discard; > } > > Read the specification for details ("name" argument is not yet implemented): > > http://hg.rename-it.nl/pigeonhole-0.3-sieve-duplicate/raw-file/4b1dbda4d3fc/doc/rfc/spec-bosch-sieve-duplicate.txt > > 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. >
I did some very basic testing and it seems to work fine. The example in spec-bosch-sieve-duplicate.txt however says: if duplicate { fileinto :create "Trash/Duplicate"; } This assumes the hierarchy separator is '/', but in Maildir this defaults to '.' So this leads to: failed to store into mailbox 'Trash/Duplicate': Invalid mailbox name I am not sure if this a bug or not, I suppose you know the rfc's better than I do, is the sieve language supposed to be agnostic of the internals of the storage-engine (dovecot)? -- Leo Baltus, internetbeheerder /\ NPO ICT Internet Services /NPO/\ Sumatralaan 45, 1217 GP Hilversum, Filmcentrum, west \ /\/ beh...@omroep.nl, 035-6773555 \/