Postfix 给出“发件人地址被拒绝:需要完全合格的地址;”错误,其中的地址看起来有些奇怪

Postfix 给出“发件人地址被拒绝:需要完全合格的地址;”错误,其中的地址看起来有些奇怪

我收到一些类似这样的错误消息:

Jan 28 17:20:47 halk postfix/smtpd[29413]: NOQUEUE:
    reject: RCPT from mail.m2osw.com[138.197.205.139]:
    504 5.5.2 <SRS1=R3xB=m2osw.com==hj4N=ZL=lime.ocn.ne.jp=@com>:
    Sender address rejected: need fully-qualified address;
    from=<SRS1=R3xB=m2osw.com==hj4N=ZL=lime.ocn.ne.jp=@com>
    to=<[email protected]> proto=ESMTP helo=<m2osw.com>

我不太确定我是否理解尖括号之间的“电子邮件”地址:

SRS1=R3xB=m2osw.com==hj4N=ZL=lime.ocn.ne.jp=@com

在我看来这看起来像是垃圾,但也许它是一种信封?

原始发件人如下:

From: western union <"westernunion1."@lime.ocn.ne.jp>

(这显然是垃圾邮件,但非垃圾邮件也会发生这种情况。)

据我所知,我的设置之前运行良好,但我将我的一个邮件服务器升级到了最新的 postfix(Ubuntu 16.04 而不是 14.04)。存档服务器不久前也升级了。

当我从 Gmail 向自己发送电子邮件时,会发生此错误。然后 Gmail 收到退回邮件。

设置如下:

+------------------+    +------------------+
|                  |    |                  |
| Client           |--->| Main Server      |
|                  |    |                  |
+------------------+    +------------------+
                                |
                                v
                        +------------------+
                        |                  |
                        | Archive Server   |
                        |                  |
                        +------------------+

主服务器,电子邮件将按预期工作。当电子邮件到达存档服务器

当从一个 Postfix MTA 转发到另一个 Postfix MTA 时,是否存在某些东西可能发生了改变,从而“破坏”了电子邮件地址?

答案1

我不这么认为,您分享的日志显示一切正常,并且 Postfix 运行良好。如果您需要了解有关正在发生的事情的更多信息,请将以下内容添加到 main.cf:

error_notice_recipient = [email protected]
delay_notice_recipient = $error_notice_recipient
bounce_notice_recipient = $error_notice_recipient
2bounce_notice_recipient = $error_notice_recipient
#The list of error classes that are reported to the postmaster
notify_classes = bounce, delay, policy, protocol, resource, software

拒绝的原因是以下其中一行:

reject_non_fqdn_helo_hostname,
reject_non_fqdn_recipient

我希望这会有所帮助

答案2

好吧,我找到了罪魁祸首。这些“奇怪”的电子邮件地址以 SRS 开头,这指向postfix可以通过 使用的SPIF 支持postsrsdpostsrsd守护程序作者建议在您的postfix/main.cf文件:

sender_canonical_maps = tcp:localhost:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:localhost:10002
recipient_canonical_classes= envelope_recipient,header_recipient

显然,这会生成电子邮件地址的信封。该信封的规格为:

[email protected]

在我的案例中,问题在于后面的域名@是动态生成的。这意味着要获取完整的计算机主机名并删除名字。因此,如果我使用m2osw.com主机名,postsrsd最终会使用com域名。换句话说,我最终会得到如下所示的电子邮件地址:

...@com

显然,@com不是一个有效的域名。

守护进程postsrsd使用在文件中找到的一些定义:

/etc/default/postsrsd

我们在那里找到一个名为的变量SRS_DOMAIN。通过使用正确的域名设置该变量:

SRS_DOMAIN=m2osw.com

电子邮件如预期般收到信封,错误也消失了。(即,我们在旧的“主服务器”上已正确设置。我们在传输时错过了这一点。)

相关内容