postfix邮件队列中的DNS解析错误

Mis*_*eev 1 ubuntu postfix smf

mailq 给了我这个错误:

F2E7B32820F3     3549 Wed Feb 17 12:15:50  "www-data@info"@hivemind.ru
(host mxs.mail.ru[94.100.180.150] said: 421 Problem resolving DNS for domain info"@hivemind.ru (Domain name is syntactically invalid) (in reply to MAIL FROM command))
Run Code Online (Sandbox Code Playgroud)

我看到由同一软件(旧 SMF 论坛)生成的此类消息,但我找不到确切的消息。在互联网上搜索没有结果。

论坛软件似乎正确生成消息:

postcat -vq 0492D3282068
postcat: name_mask: all
postcat: inet_addr_local: configured 2 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS maildrop/0492D3282068 ***
message_arrival_time: Sun Feb 21 15:01:55 2016
named_attribute: rewrite_context=local
sender_fullname: www-data
sender: www-data
*** MESSAGE CONTENTS maildrop/0492D3282068 ***
regular_text: To: test@example.com
regular_text: Subject: =?UTF-8?B?0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCDQvdCwINGE0L7RgNGD0LwgUFNZVFJJQkU=?=
regular_text: X-PHP-Originating-Script: 0:Subs-Post.php
regular_text: From: "PSYTRIBE" <info@psytribe.ru>
regular_text: Return-Path: info@psytribe.ru
regular_text: Date: Sun, 21 Feb 2016 12:01:54 -0000
regular_text: X-Mailer: SMF
regular_text: Mime-Version: 1.0
regular_text: Content-Type: multipart/alternative; boundary="SMF-e8a857e57a7c03288f525582f6bdb280"
regular_text: Content-Transfer-Encoding: 7bit
Run Code Online (Sandbox Code Playgroud)

我怎么知道我应该在哪里寻找错误?

kas*_*erd 5

您的设置中可能存在三种不同的问题。这是我对发生的事情的最佳猜测。

  1. 服务器从未配置过 FQDN,只有名称info.
  2. 电子邮件由用户生成www-data
  3. 由于没有指定其他电子邮件地址,它是通过结合用户名和主机名自动构造的。
  4. 此时构造的电子邮件地址是www-data@info,这是不正确的(除非您控制infoTLD 并直接在 TLD 上配置了 MX 记录,否则情况并非如此)。
  5. 该电子邮件地址被传递到另一个软件,该软件将接受完整的电子邮件地址或仅接受用户名。
  6. 解析电子邮件地址以决定它只是一个用户名而不是完整的电子邮件地址。
  7. 用户名与域名结合在一起,与之前软件使用的主机名不同。因为www-data@info假定是用户名并且它包含一个@字符,所以它是按照相关的 RFC 引用的。这意味着通过电汇发送的电子邮件地址将类似于<"www-data@info"@hivemind.ru>. 这在语法上是有效的,但可能不是您想要的。
  8. 下一个解析这个地址的软件有问题,没有根据 RFC 解析它。它错误地认为第一个@将本地部分与域分开,即使第一个@在引号内。

这里出错的三件事是:

  1. 起初info使用的是域名而不是预期的域。
  2. 后来一些软件使用启发式方法来决定它是否已被提供完整地址或仅本地部分,它得出的结论与产生该输入的软件所预期的不同。
  3. 解析器中不理解引用字符串的错误导致它错误地拒绝域无效。

RFC 2821 建议不要使用需要引用的地址。你的场景说明了为什么建议反对这种做法是合理的。

虽然上面对本地部分的定义相对宽松,但为了最大的互操作性,希望接收邮件的主机应该避免定义本地部分需要(或使用)引号形式的邮箱或本地部分是 case - 敏感的。

您实际上并不打算首先使用引用。它只是由于在此过程中早期配置错误的软件而发生的。您需要在数据流中向后工作,以查找info首先错误地用作域名的位置并进行更正。