我在 postfix 中设置了别名,例如:
[email protected]: [email protected], [email protected] ...
当电子邮件发送到[电子邮件保护],并且该别名中的任何收件人都是抄送的(这很常见)(即:“回复所有人”),则电子邮件会重复发送。例如,如果电子邮件发送到[电子邮件保护]和[电子邮件保护]被抄送,它将被递送两次。根据Postfix 常见问题解答,这是设计使然,因为 Postfix 会并行发送电子邮件而不扩展组,这使得它比 sendmail 更快。现在一切都很好,但是是否可以配置 Postfix 以在发送电子邮件之前实际删除重复的收件人?
我在网上找到了很多有同样问题的人的帖子,但我还没有找到答案。如果在 Postfix 中无法做到这一点,是否有可能在某个地方做到这一点?我尝试教育我的用户,但恐怕这是徒劳的......
我在 Mac OS X Server 10.6 上运行 postfix,amavis 设置为 content_filter,dovecot 设置为 mailbox_command。我尝试将 procmail 设置为用于 smtp 传递的 content_filter(按照下面的建议),但似乎无法正确完成。由于各种原因,我无法替换标准 OS X 配置,这意味着 postfix、amavis 和 dovecot 保持不变。但是,如果愿意,我可以添加它。
答案1
有一种方法可以做到这一点,但不是使用 Postfix 本身。
如果你正在使用较新的 DovecotSieve 的鸽巢式实现,有一个特殊的扩展可用于交付时重复数据删除。在 2.2.18 之前的 Dovecot 中,此扩展的名称扩展名为“vnd.dovecot.duplicate”默认情况下它是禁用的,在较新的版本中扩展名为“重复”并且应该已经启用,但明确启用它不会造成损害。
/etc/dovecot/conf.d/90-sieve.conf:
plugin {
sieve = ~/.dovecot.sieve
sieve_dir = ~/sieve
sieve_before = /mnt/mail/users/global_sieve/deduplicate.sieve
# sieve_before2 = /mnt/mail/users/global_sieve/antispam.sieve
sieve_extensions = +vnd.dovecot.duplicate # for dovecot < 2.2.18
#sieve_extensions = +duplicate # for dovecot >= 2.2.18
}
然后创建筛选脚本来处理重复数据删除本身(您可以根据需要调整文件名)。
/mnt/mail/users/global_sieve/deduplicate.sieve:
require "vnd.dovecot.duplicate"; # for dovecot < 2.2.18
# require "duplicate"; # for dovecot >= 2.2.18
if duplicate {
discard;
stop;
}
使用编译脚本西韦克并确保脚本可读鸽舍用户。更多内容请参阅 Dovecot 文档。
如果你正在使用 Cyrus,那么抑制重复邮件传递可以使用 启用该功能suppress_duplicates = yes
。
答案2
由于 Postfix 的结构,它无法识别重复的电子邮件。您可以使用 procmail 作为您的投递代理来执行您的建议。
本质上,来自客户端的每条消息都应使用唯一的 Message-Id 进行传递。如果要传递给多个人,则 Message-Id 应该相同,因此我们会保存Message-Id
已看到的所有标头,并丢弃与该列表匹配的未来标头。
从http://novosial.org/procmail/
:0 Wh: msgid.lock
| formail -D 8192 ~/.procmail/msgid.cache
答案3
对我有用的解决方案是-o receive_override_options=no_address_mappings
添加master.cf
这里是文档:http://www.postfix.org/postconf.5.html#receive_override_options
答案4
官方解决方案在这里..http://osdir.com/ml/mail.postfix.devel/2007-05/msg00010.html
duplicate_filter_limit(10000)收件人重复过滤器记住的最大地址数,用于别名(5)或虚拟(5)别名扩展,或用于 showq(8)队列显示(早期的 Postfix 版本默认限制为 1000)。
duplicate_filter_style(严格)重复收件人过滤策略:严格或务实。