AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1077995
Accepted
user3450564
user3450564
Asked: 2021-09-19 22:48:50 +0800 CST2021-09-19 22:48:50 +0800 CST 2021-09-19 22:48:50 +0800 CST

使用 X-Envelope-To 保留 Bcc 的 Postfix 存档 - 使用 Lmtp 清理机密 X-Envelope-To

  • 772

密送[email protected] 用户,我们不希望人们收到该密送列表,除了[email protected]“用户”。

目标

  1. 我们希望归档所有通过 postfix 发送和接收的邮件。该设置使用:
  • 后缀,
  • 使用 Pam(从 Ldap 提取)用户进行 dovecot 身份验证,
  • 并通过Dovecot 的 LMTP发送到邮箱。
  1. 我们希望在邮件存档中包含密件抄送收件人。

  2. 除了[email protected]“用户”之外,我们不希望人们收到该密件抄送列表。

审判

  1. 使用 always_bcc = [email protected] 有效。但是密件抄送收件人(根据权利在信封中作为 RCPT TO 而不是在标题中)会丢失。

  2. 使用:(根据有哪些选项可以存档 Postfix 电子邮件并在标题中保留任何密件抄送信息)

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 包括收件人和抄送人员,以及外部域收件人)。

  1. 消除 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 过滤器吗?

在所有可能的文档中追逐了几天,在此先感谢

postfix archive
  • 2 2 个回答
  • 183 Views

2 个回答

  • Voted
  1. Best Answer
    user3450564
    2021-09-21T11:20:43+08:002021-09-21T11:20:43+08:00

    哦是的 !非常感谢。

    筛子语言不允许对多个X-Envelope-To标题进行迭代。所以需要将它传递给外部程序。

    这是我想出的:

    require "fileinto";
    require "imap4flags";
    require ["editheader", "envelope"];
    require "vnd.dovecot.filter";
    if header :contains "X-Spam-Flag" "YES"
    {
       fileinto "Junk";
       stop;
    }
    if envelope :is "to" "[email protected]" {
       filter "EnvelopeToBcc.sh";
    } else {
       deleteheader "X-Envelope-To";
    }
    
    #!/bin/bash
    # Store mail in a variable
    # input stream
    mail=`cat /dev/stdin`
    # Extract headers
    envelope=$(echo "$mail" | formail -x X-Envelope-To | tr -d '\015')
    tos=$(echo "$mail" | formail -x To  | tr -d '\015')
    copies=$(echo "$mail" | formail -x Cc  | tr -d '\015')
    
    # Loop excluding the To: fields and concatenate in variable
    bcc=""
    for i in $envelope; do
            if [[ ${tos} != *"${i}"* && ${copies} != *"${i}"* ]];then
                    bcc="${bcc} ${i},"
            fi
    done
    # Eliminate trailing comma
    bcc=$(echo $bcc | sed s/,$//)
    # Add Bcc header to mail 
    echo "${mail}" | formail -a "Bcc: $bcc"
    
    

    如果您使用任何 MUA 打开存档,您可以看到重新构建的密件抄送。注意:脚本稍长一些,但它避免了密件抄送列表中的收件人重复。

    • 1
  2. anx
    2021-09-20T05:54:37+08:002021-09-20T05:54:37+08:00

    使用 Sieve 语言。

    由于您的邮件是通过 LMTP 传递到 Dovecot,因此您将在那里拥有所有寻址和标题编辑功能,以及比简单的 Postfix 标题检查提供的更复杂的逻辑功能。

    如果您还没有使用 Pigeonhole sieve,您可能需要将其作为 Dovecot 插件启用,在脚本中启用您需要的扩展,并配置合适的脚本。

    # step1 enable sieve (append to $mail_plugins to *add*)
    protocol lmtp {
      mail_plugins = $mail_plugins sieve
    }
    # step2 enable sieve extensions, as required (prefix with + to *add*)
    plugin {
        sieve_extensions = +editheader
    }
    # step3 configure the path a of a script to be executed
    

    然后在全局执行的脚本中,或专门针对不应看到信封地址的用户,删除标题 - 除非传递到存档邮箱:

    require ["editheader", "envelope"];
    if not envelope :is "to" "[email protected]" {
        deleteheader "X-Envelope-To";
    }
    
    • 0

相关问题

  • Postfix 在特定端口上接受邮件

  • 让 Postfix 以两种方式处理垃圾邮件

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 后缀电子邮件地址

  • 什么是最好的开源电子邮件解决方案包

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve