密送[email protected] 用户,我们不希望人们收到该密送列表,除了[email protected]“用户”。
目标
- 我们希望归档所有通过 postfix 发送和接收的邮件。该设置使用:
- 后缀,
- 使用 Pam(从 Ldap 提取)用户进行 dovecot 身份验证,
- 并通过Dovecot 的 LMTP发送到邮箱。
我们希望在邮件存档中包含密件抄送收件人。
除了[email protected]“用户”之外,我们不希望人们收到该密件抄送列表。
审判
使用 always_bcc = [email protected] 有效。但是密件抄送收件人(根据权利在信封中作为 RCPT TO 而不是在标题中)会丢失。
main.cf
smtpd_recipient_restrictions =
check_recipient_access pcre:/etc/postfix/prepend.pcre
而 pcre 表达式是:
prepend.pcre
/(.+)/ PREPEND X-Envelope-To: $1
这就像一个魅力:我存储的消息有标题 To:; 抄送; X 信封至。如果我们需要深入研究它,即使在密件抄送中,我们也可以知道谁收到了该消息。(注意:X-Envelope-To 包括收件人和抄送人员,以及外部域收件人)。
- 消除 X-Envelope-To: 发送:
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks.pcre
与内容:
smtp_header_checks.pcre
/^X-Envelope-To:/ IGNORE
一切都好,直到那里。
问题
消除未离开服务器的电子邮件的 X-Envelope-To。我做了:
lmtp_header_checks = pcre:/etc/postfix/lmtp_header_checks.pcre
lmtp_header_checks.pcre
/^X-Envelope-To:/ IGNORE
但这不是选择性的,甚至 [email protected] 也会丢失“保存”密件抄送列表的标题。
我找不到该标题检查选择性的方法,因为它只评估行本身并且不能使用收件人来制定条件(即使使用 pcre 的“if”)。 ( http://www.postfix.org/pcre_table.5.html )
有没有可以使用的变量?一个想法是:在附加的 X-Envelope-To 标头中包含“[email protected]”,在 lmtp_header_checks.pcre 中包含以下内容:[email protected] 不等于 $LMTP_DELIVERY_RECIPIENT Delivered-To 或 X-Delivered - 保留一个单独的标题,pcre 无法将其评估为变量。
否则有没有办法让 lmtp 触发一些 milter ?我可以使用一个简单的 lmtp_milter 过滤器吗?
在所有可能的文档中追逐了几天,在此先感谢
哦是的 !非常感谢。
筛子语言不允许对多个
X-Envelope-To
标题进行迭代。所以需要将它传递给外部程序。这是我想出的:
如果您使用任何 MUA 打开存档,您可以看到重新构建的密件抄送。注意:脚本稍长一些,但它避免了密件抄送列表中的收件人重复。
使用 Sieve 语言。
由于您的邮件是通过 LMTP 传递到 Dovecot,因此您将在那里拥有所有寻址和标题编辑功能,以及比简单的 Postfix 标题检查提供的更复杂的逻辑功能。
如果您还没有使用 Pigeonhole sieve,您可能需要将其作为 Dovecot 插件启用,在脚本中启用您需要的扩展,并配置合适的脚本。
然后在全局执行的脚本中,或专门针对不应看到信封地址的用户,删除标题 - 除非传递到存档邮箱: