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 / 问题 / 930199
Accepted
Binarus
Binarus
Asked: 2018-09-11 01:30:14 +0800 CST2018-09-11 01:30:14 +0800 CST 2018-09-11 01:30:14 +0800 CST

如何让 Sendmail 为所有入站电子邮件添加一个 evelope 收件人标头?

  • 772

免责声明:我在这里和其他地方阅读了一些有关 Sendmail 重写标头的问题和文章。我还没有找到下面问题的答案,因为另一个问题主要与重写标头(而不是添加标头)有关,而且几乎所有标头都与出站消息和信封发件人(而不是信封收件人)有关。

说了这么多:

我正在运行一个邮件服务器,在 Debian jessie 下使用 Sendmail 8.14.4。

有一些电子邮件收件人地址映射到同一个 O/S 用户帐户。当相应的 O/S 用户阅读这些消息时,他无法确定这些消息最初是发送到哪个电子邮件地址的。

因此,我想让 Sendmail 将包含信封收件人的自定义标头添加到所有入站电子邮件中。

我想我可以通过例子更好地解释我的问题:

假设我有两个电子邮件地址,[email protected]并且[email protected]. 两者都映射到 O/S 用户帐户offers。到目前为止,这是可行的:O/S 用户offers在获取他的电子邮件时,会获取发送到[email protected]和的所有消息[email protected]。

现在的问题是他无法确定每条消息最初发送到哪个电子邮件地址。这意味着:尽管他看到了所有已发送到两个电子邮件地址的邮件,但他无法判断某条邮件最初是发送到[email protected]还是发送到[email protected]。

因此,我想为每个入站消息添加一个自定义标头,可能是这样的:X-Envelope-Recipient: <Original envelope recipient>.

最简单的方法是什么?

曾几何时,我为 Sendmail 编写了一些简单的自定义规则。但是从那时起已经过去了将近 15 年,所以我想避免这种情况,因此我希望有一个简单的解决方案,或者有人可以为我指明正确的方向。老实说,目前写一个 milter 来解决我的问题对我来说似乎比重新学习 Sendmail 的规则语法更容易......

编辑 1

根据@AnFi 的要求,这里是 sendmail.cf 中的本地邮件程序定义:

Mlocal,         P=/usr/lib/sm.bin/mail.local, F=lsDFMAw5:/|@qPSXnz9, S=EnvFromSMTP/HdrFromL, R=EnvToL/HdrToL,
                T=DNS/RFC822/SMTP,
                A=mail.local -l -h inbox
sendmail
  • 2 2 个回答
  • 1468 Views

2 个回答

  • Voted
  1. Esa Jokinen
    2018-09-11T02:16:18+08:002018-09-11T02:16:18+08:00

    您的建议将反对 SMTP 协议:尽管在or标头RCPT TO中不存在地址,但仍有正当理由将地址添加到命令中,即RFC 5321 7.2。“盲”副本(重点是我的):To:Cc:

    出于多种原因,未出现在邮件标题部分中的地址可能会出现在 SMTP 服务器的 RCPT 命令中。最常见的两个涉及使用邮寄地址作为“列表扩展器”(一个地址解析为多个地址)和“盲副本”的出现。特别是当存在多个 RCPT 命令时,并且为了避免破坏这些机制的某些目的,SMTP 客户端和服务器不应将完整的 RCPT 命令参数集复制到标头部分,或者作为跟踪标头字段的一部分或作为信息或私有扩展头字段. 由于此规则在实践中经常被违反,并且无法强制执行,发送知道“密件抄送”使用的 SMTP 系统可能会发现将每个密件副本作为仅包含单个 RCPT 命令的单独消息事务发送是有帮助的。

    SMTP 事务(“信封”)中的“反向”(来自 MAIL、SAML 等命令)或“转发”(RCPT) 地址与标头部分中的地址之间没有内在关系。接收系统不应尝试推断此类关系并使用它们来更改消息的标题部分以进行传递。 流行的Apparently-to标头字段违反了这一原则,也是意外信息泄露的常见来源,不应使用。

    不推荐的Apparently-to标头由 option 控制NoRecipientAction=action。

    设置消息中没有收件人标头( 或 )时的行为To:以Cc:执行 Bcc:操作:

    • none保持消息不变,
    • add-to添加To:带有信封收件人的标题,
    • add-apparently-to添加Apparently-To:带有信封收件人的标题,
    • add-bcc添加一个空Bcc:标题,并且
    • add-to-undisclosed 添加标题阅读'To: undisclosed-recipients:;'。

    请注意,通常原始收件人地址已经在To:orCc:标头中。它不应该被修改为用户帐户名offers,所以它要么是[email protected],[email protected]要么是隐藏的。重写标头变得更加危险,因为它还可能破坏 DKIM 签名。唯一合理的用例是使用本地来源 ( userto [email protected]) 的邮件的地址重写。


    添加所有RCPT TO地址的列表会违反协议,但实际上您只需要邮件发送到的用户的单个原始RCPT TO地址。我不知道如何使用 Sendmail 来实现这一点,但Postfix(使用默认配置)添加了一个X-Original-To:包含该内容的标头,另外还添加了一个Delivered-To:包含内部目标邮箱 ( [email protected]) 的标头。

    • 1
  2. Best Answer
    AnFi
    2018-09-12T04:45:03+08:002018-09-12T04:45:03+08:00

    您的问题是 Sendmail.org FAQ 3.29 的地址

    3.29 当虚拟域中的多个用户转到一个邮箱时,如何添加一个标头来指定实际收件人?

    短版:使用 virtusertable 和~offers/.procmailrc

    虚拟用户表:

    [email protected]  offers+offer1
    [email protected]  offers+offer2
    

    ~offers/.procmailrc应该在$1.
    或者
    您可以在自定义标题中使用 $h(设置为 +detail)

    警告:您将获取/处理发送给两者的消息的两个副本,[email protected]并且[email protected]

    • 1

相关问题

  • 如何使用远程 SMTP 配置 php.ini?

  • Linux sendmail 垃圾邮件?

  • 使 php mail() 函数在 ubuntu-server 上工作的步骤是什么?

  • 如何配置 sendmail 以拒绝日期标题与实时相差太远的电子邮件?

  • 什么是好的 sendmail 日志分析器?

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