Pigeonhole Sieve: Duplicate Extension

The duplicate extension RFC 7352 adds a new test command called duplicate to the Sieve language. This test adds the ability to detect duplications. The main application for this new test is handling duplicate deliveries commonly caused by mailing list subscriptions or redirected mail addresses. The detection is normally performed by matching the message ID to an internal list of message IDs from previously delivered messages. For more complex applications, the duplicate test can also use the content of a specific header field or other parts of the message.

Previously, this extension was Dovecot-specific and available under the name vnd.dovecot.duplicate. Specification for old version available here. That implementation differs significantly from what is now published as RFC 7352, but the original extension is still supported for backwards compatibility.


The duplicate extension is available by default. The duplicate extension has its own specific settings. The following settings are available (default values are indicated):

sieve_duplicate_default_period = 14d

sieve_duplicate_max_period = 7d

These options respectively specify the default and the maximum value for the period after which tracked values are purged from the duplicate tracking database. The period is specified in s(econds), unless followed by a d(ay), h(our) or m(inute) specifier character.


plugin {
  sieve = ~/.dovecot.sieve

  sieve_duplicate_default_period = 1h
  sieve_duplicate_max_period = 1d