如何打开 Postfix 以便始终向经过身份验证的发件人发送 DSN?

如何打开 Postfix 以便始终向经过身份验证的发件人发送 DSN?

MacOS 上的 Mail 程序存在问题。它没有请求发送通知的选项(例如,通知收件人的电子邮件服务器已接受电子邮件),并且 DSN 消息永远不会作为 Mail 电子邮件的回复(在 MacOS 上)。非常无用!

当邮件客户端要求时,我的 postfix 会发送 DSN。例如,使用 Thunderbird 时,它可以正常工作。

现在选项已关闭:

smtpd_discard_ehlo_keywords = etrn, silent-discard

是否可以始终向发件人(通过此后缀发送电子邮件的人)发送 DSN?

答案1

这与配送通知(DSN)定义在RFC 3464。仅当客户端明确请求时,才会发送成功时的 DSN。

由于 DSN 需要在协议级别MAIL FROMRCPT TO命令上进行修改,因此服务器必须报告支持 DSN。首先宣布服务器支持扩展 SMTP,然后作为对EHLO命令的回复,列出支持的功能250 DSN,例如最后一行:

<--  220 mail.example.com ESMTP Postfix (Debian/GNU)
-->  EHLO client-198.51.100.123.example.com
<--  250-mail.example.com
<--  250-PIPELINING
<--  250-SIZE 10240000
<--  250-VRFY
<--  250-ETRN
<--  250-STARTTLS
<--  250-ENHANCEDSTATUSCODES
<--  250-8BITMIME
<--  250-DSN

Postfix 有支持DSN以及选项限制谁可以请求它。来自简介:

具体来说,DSN 支持使电子邮件发件人能够指定:

  • 发送哪些通知:成功、失败、延迟或无。通常,Postfix 仅在邮件传递延迟或传递失败时通知发件人。

  • 失败时返回什么内容:仅消息头,或者完整消息。

  • 作为传递状态通知的一部分返回的信封 ID。它标识消息提交事务,并且不得与标识消息内容的消息 ID 混淆。

DSN 支持的实现涉及 SMTP MAIL FROM 和 RCPT TO 命令的额外参数,以及两个 Postfix sendmail 命令行选项,它们提供额外 SMTP 命令参数功能的子集。

让我们稍微解释一下。正常的简单 SMTP 连接将继续:

-->  MAIL FROM: [email protected]
<--  250 2.1.0 Ok
-->  RCPT TO: [email protected]
<--  250 2.1.5 Ok

但如果支持并请求 DSN,则可能是(取决于请求的内容)例如

-->  MAIL FROM: [email protected] RET=HDRS
<--  250 2.1.0 Ok
-->  RCPT TO: [email protected] NOTIFY=FAILURE,DELAY ORCPT=rfc822;[email protected]
<--  250 2.1.5 Ok

此处,RET=HDRS表示只应将标题添加到自动回复中, 并NOTIFY=指定只应报告失败和延迟。如果还有NOTIFY=SUCCESS,则将发送任何结果的报告,即这会改变 Postfix 的正常行为。(ORCPT只是添加原始收件人。)

因此,如果没有明确请求,服务器根本就不应该擅自发送成功传送通知。

遗憾的是 Mac OS X Mail 不支持此功能。这并不奇怪,因为此客户端甚至没有 GUI 支持已读回执。幸运的是,已读回执是一种不同的标准,不涉及对 SMTP 命令的修改:它通过Disposition-Notification-To在电子邮件内容中添加标题来实现。这可以通过 Mac OS X 终端(添加、删除和检查)来实现:

defaults write com.apple.mail UserHeaders '{"Disposition-Notification-To" = "u@example"; }'
defaults delete com.apple.mail UserHeaders
defaults read com.apple.mail UserHeaders

相关内容