Postfix 别名和重复的电子邮件,如何解决?

Mar*_*ade 20 email postfix mac-osx osx-snow-leopard

我在 postfix 中设置了别名,如下所示:

all@mydomain.com:    foo@mydomain.com, bar@mydomain.com ...
Run Code Online (Sandbox Code Playgroud)

当一封电子邮件被发送到 all@mydomain.com,并且该别名中的任何收件人是 cc:ed 时,这是很常见的(即:“回复全部”),电子邮件会重复发送。例如,如果一封电子邮件被发送到 all@mydomain.com 而 foo@mydomain.com 是 cc:ed,它将被发送两次。根据Postfix FAQ,这是设计使然,因为 Postfix 并行发送电子邮件而不扩展组,这使其比 sendmail 更快。现在一切都很好,但是否可以配置 Postfix 以在发送电子邮件之前实际删除重复的收件人?

我在网上发现很多人的帖子都有同样的问题,但我还没有找到答案。如果在 Postfix 中无法做到这一点,是否可以在途中的某个地方做到这一点?我试过教育我的用户,但恐怕是徒劳的......

我在 Mac OS X Server 10.6 上运行 postfix,amavis 设置为 content_filter,dovecot 设置为邮箱命令。我已经尝试将 procmail 设置为用于 smtp 交付的 content_filter(根据下面的建议),但我似乎无法正确设置。出于各种原因,我无法替换标准的 OS X 配置,这意味着 postfix、amavis 和 dovecot 保持不变。但是,如果我愿意,我可以添加它。

Jan*_*ček 6

有一种方法可以做到这一点,但不能使用 Postfix 本身。

如果您使用的是最近的 Dovecot 和Sieve 的 Pigeonhole 实现,则有一个特殊的扩展可用于交付时重复数据删除。在早于 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
}
Run Code Online (Sandbox Code Playgroud)

然后创建筛选脚本来处理重复数据删除本身(您可以根据需要调整文件名)。

/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;
}
Run Code Online (Sandbox Code Playgroud)

使用sieec编译脚本并确保脚本可以被dovecot用户读取。Dovecot 文档中的更多内容。

如果使用的是居鲁士,有AA重复的消息传递抑制可以使用启用功能suppress_duplicates = yes


Phi*_*lds 5

由于其结构方式,Postfix 不知道重复的电子邮件。可以使用 procmail 作为您的投递代理来执行您所建议的操作。

本质上,来自客户端的每条消息都应该使用唯一的 Message-Id 进行传递。如果它被传递给多个人,则 Message-Id 应该相同,因此我们保存Message-Id我们看到的所有标头,并丢弃与该列表匹配的未来标头。

来自http://novosial.org/procmail/

:0 Wh: msgid.lock
| formail -D 8192 ~/.procmail/msgid.cache
Run Code Online (Sandbox Code Playgroud)