SMTP“发件人”标头的使用是否正确?

SMTP“发件人”标头的使用是否正确?

当有人发布新内容时,我们的 Web 应用程序会向人们发送电子邮件。发件人和收件人都选择接收来自我们应用程序的电子邮件。在准备此类消息时,我们设置以下 SMTP 标头:

从:[电子邮件保护]
到:[电子邮件保护]
发件人:[电子邮件保护]

我们选择在 FROM 标头中使用作者的电子邮件地址,以便为收件人提供最佳体验;当他们在邮件客户端中看到邮件时,作者就一目了然了。为了避免出现欺骗现象,我们添加了 SENDER 标头(使用我们自己公司的电子邮件地址),以明确我们代表作者发送了该邮件。阅读 RFC 822 和 2822 后,这似乎是发件人标头的预期用途。

大多数接收邮件服务器似乎都能很好地处理这种情况;电子邮件消息可以正常传递(假设收件人邮箱存在、未超出配额等)。但是,当从域中的地址向同一域中的地址发送消息时,某些接收域会拒绝该消息,并做出如下响应:

571 不正确的 IP - psmtp(回复 RCPT TO 命令)

我认为这意味着接收服务器只看到 FROM 标头地址位于其自己的域中,并且该消息来自它认为无权向该域发送消息的服务器。换句话说,接收服务器忽略了 SENDER 标头。

我们有一个解决方法:Web 应用程序保存一个似乎忽略 SENDER 标头的域列表,当 FROM 和 TO 标头都位于此类域中时,它会将 FROM 标头设置为我们自己的电子邮件地址。但此列表需要维护。

有没有更好的方法来实现理想的体验?我们希望成为网络的“好公民”,所有相关方(发送者和接收者)都希望参与并接收这些消息。一种替代方法是始终在发件人标题中使用我们公司的电子邮件地址,并将作者的姓名/地址添加到主题前面,但这似乎有点笨拙。

答案1

你看错了。这些都是信息标题. 您应该查看 SMTP信封(如何指定信封取决于您的应用程序如何向邮件系统提交邮件。在许多系统上,信封由邮件提交实用程序的命令行参数指定。)根据协议事务中它决定发出 571 响应的确切时间,SMTP 中继服务器可能根本没有看到邮件头。

响应文本表示,您正在与之通信的特定 SMTP 中继服务器的管理员限制了您可以放入 SMTP 信封的内容。它似乎在抱怨信封的收件人部分。但它可能会推迟对信封发件人的验证,直到指定第一个收件人,因此它可能在抱怨发件人。

请注意,信封发件人是发送递送状态消息的地方,您将不是希望将这些邮件发送给世界各地的随机人员。(除了很多人不喜欢这一点之外,将递送状态消息发送给你的邮件返回给除了您之外的任何人。)指定您自己为信封发件人。

MX顺便说一句,要求资源记录是错误的。在没有任何资源记录的情况下,可以通过A和资源记录来定位 SMTP 中继服务器。请参阅 RFC 5321 § 5.1。AAAAMX

答案2

我可能错了,但导致上述错误的原因(尤其是在 Postini 的情况下)最有可能是被拒绝的域具有严格的 SPF 策略。大多数具有 SPF 检查的邮件服务器只会检查 From: 标头,而不会关心 Sender 标头。

要检查是否是这种情况,请运行“dig +short TXT domain.com”,其中 domain.com 是显示错误消息的源。您应该会收到类似以下信息:

“v=spf1 mx-全部”

重点是“-all”。这意味着域名所有者已声明他们只会从充当其邮件服务器的服务器发送电子邮件,所有其他邮件都将被拒绝。

幸运的是,如果是这种情况,您可以在发送电子邮件之前主动检查!当用户输入电子邮件地址时,让 WebApp 进行 SPF 检查。如果有严格的政策,请将域添加到您的列表中。所有语言都可以进行 SPF 检查的库都不缺。

相关内容