I have aliases set up in postfix, such as the following:
[email protected]: [email protected], [email protected] ...
When an email is sent to [email protected], and any of the recipients in that alias is cc:ed which is quite common (ie: "Reply all"), the e-mail is delivered in duplicates. For instance, if an e-mail is sent to [email protected] and [email protected] is cc:ed, it'll get delivered twice. According to the Postfix FAQ, this is by design as Postfix sends e-mail in parallel without expanding the groups, which makes it faster than sendmail. Now that's all fine and dandy, but is it possible to configure Postfix to actually remove duplicate recipients before sending the e-mail?
I've found a lot of posts from people all over the net that has the same problem, but I have yet to find an answer. If this is not possible to do in Postfix, is it possible to do it somewhere on the way? I've tried educating my users, but it's rather futile I'm afraid...
I'm running postfix on Mac OS X Server 10.6, amavis is set as content_filter and dovecot is set as mailbox_command. I've tried setting up procmail as a content_filter for smtp delivery (as per the suggestion below), but I can't seem to get it right. For various reasons, I can't replace the standard OS X configuration, meaning postfix, amavis and dovecot stay put. I can however add to it if I wish.
There is a way how to do it, but not using Postfix itself.
If you are using a reasonably recent Dovecot with Pigeonhole implementation of Sieve, there is a special extension that can be used for on-delivery deduplication. In Dovecot older than 2.2.18, the name of this extension is "vnd.dovecot.duplicate" and it's disabled by default, in newer releases the extension is called "duplicate" and should be already enabled, but enabling it explicitly won't harm.
/etc/dovecot/conf.d/90-sieve.conf:
Then create the sieve script to handle the deduplication itself (you can adjust the filename as you see fit).
/mnt/mail/users/global_sieve/deduplicate.sieve:
Compile the script using sievec and make sure the script is readable by dovecot user. More in Dovecot docs.
If you are using Cyrus, there is a a duplicate message delivery suppression feature that can be enabled using
suppress_duplicates = yes
.Postfix has no idea about duplicate emails due to the way it's structured. It is possible to do what you're suggesting by using procmail as your delivery agent.
Essentially, each message coming from a client should be delivered with a unique Message-Id. In the case that it's delivered to multiple people, the Message-Id should be the same, so we save any
Message-Id
headers we've seen and discard and future ones that match that list.From http://novosial.org/procmail/
A solution that work for me is add
-o receive_override_options=no_address_mappings
onmaster.cf
Here the doc: http://www.postfix.org/postconf.5.html#receive_override_options
This is from some old postfix faq:
Postfix sends duplicate mail Some people will complain that Postfix sends duplicate messages. This happens whenever one message is mailed to multiple addresses that reach the same user. Examples of such scenarios are:
So by design you are seeing that behavior. Perhaps if you find a content filter that can strip duplicate message IDs, you can eliminate this after the delivery event.
Sendmail does not have this problem because it expands everything first and strips out duplicates.
The oficial solution is here.. http://osdir.com/ml/mail.postfix.devel/2007-05/msg00010.html
duplicate_filter_limit (10000) The maximal number of addresses remembered by the recipient duplicate filters for aliases(5) or virtual(5) alias expansion, or for showq(8) queue displays (with earlier Postfix releases the default limit was 1000).
duplicate_filter_style (strict) The duplicate recipient filter policy: strict or pragmatic.
I put that in my main.cf and it worked fine but only for mail sent from my domain. I still have duplicates if I send email from outside my domain (yahoo to my domain for eg.)
source : http://article.gmane.org/gmane.mail.postfix.user/119783