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 保持不变。但是,如果我愿意,我可以添加它。
有一种方法可以做到这一点,但不能使用 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。
由于其结构方式,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)
| 归档时间: |
|
| 查看次数: |
23785 次 |
| 最近记录: |