Postfix 别名和重复电子邮件,如何修复?

Postfix 别名和重复电子邮件,如何修复?

我在 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(严格)重复收件人过滤策略:严格或务实。

相关内容