我的问题是关于我的入站 Postfix 邮件服务器实例的传递状态通知 (DSN) 处理。然而,这个问题的解决方案可能完全超出了 DSN 的范围。
假设这是到达我的域的邮件流程。D
、E
和F
在我的控制之下,而A
、B
和C
属于发件人。
A
+----------+
| |
| MUA |
| (sender) |
| |
+----+-----+
|
|
B | C D E
+-----v-------+ +-----------+ +------------+ +------------+
| | | Outbound |INTERNET Inbound | LAN | Local mail |
| Submission +-----> gateway +-------> gateway +---->+ storage |
| (MTA) | | (MTA) | | (MTA) | | delivery |
| | | sender | | recipient | | (MTA) |
+-------------+ +-----------+ +------------+ +-----+------+
| LMTP
LAN | (final
| delivery)
F |
+-----v------+
| |
| Mailbox |
| devlivery |
| (MDA) |
+------------+
D
(边缘、面向互联网、高可用性)和E
(内部、预算 SLA)是独立的机器,因为我想将可扩展性、安全性和可用性分开。这样,如果D
廉价E
网络/集群在灾难情况下发生故障,邮件可以排队数天。
发件人可以在其邮件客户端应用程序中请求 DSN(例如在 Thunderbird 中,在撰写视图菜单中启用 DSN),并且使用 Postfix 的默认设置,它会在将邮件E
发送到 后立即通知发件人邮件已成功发送F
。在此 DSN 消息中,发件人会了解很多有关我的内部网络的信息,而这正是我想要避免的。
从 的角度来看D
, 本身并不是邮件的最终目的地(因为E
被配置为域的中继)。此外,当它中继到 时E
,它在中继邮件后仍然不是最终目的地。这使得它只能在E
通知发件人。
C
我发现 Gmail 有一个非常优雅的方法。它在提交时以某种方式触发 DSN D
(D
Gmail 的边缘 MTA 在哪里)。我想知道如何配置我的 Postfix 实例,就像 Gmail 面向互联网的 MTA 一样。这将使发件人的出站 MTA 负责将传递状态通知远程 MTA。
由于我没有设置条件投递,因此沿此路径的退回被关闭,所有在 接受的邮件D
都将以某种方式投递到邮箱。因此,我想在此时告诉远程 MTA 投递成功,并且我想禁用我自己的服务器上的任何进一步 DSN 处理。这应该可以让C
发件人知道投递成功。
smtpd_discard_ehlo_keywords = silent-discard, dsn
我已经尝试D
按照Postfix 的 DSN 自述文件,但正如预期的那样,发件人根本就得不到任何通知,这实在是难以关闭。
简而言之;我怎样才能让 Postfix 告诉(欺骗)远程 MTAC
这D
是该消息的最终传送?
...试图模仿 Gmail 的处理方式。