exim 配置:未公佈時使用的 503 AUTH 命令
我正在通過遠端 SMTP 伺服器發送電子郵件通知的 Windows 伺服器上執行一個軟體。它的配置選項很少,只支持沒有 SSL/TLS 的基本 SMTP 身份驗證。我在 Debian 伺服器上執行 exim4,它將成為這個 Windows 程序的 SMTP 伺服器。它設置為預設配置,並允許 AUTH PLAIN 和 AUTH LOGIN 未加密連接。我已通過 telnet 成功發送了一封電子郵件:
telnet servername 25 ehlo test 250-AUTH PLAIN LOGIN ... auth plain XXX 235 Authentication succeeded mail from: ... ...
但是,我要連接到此伺服器的程序無法連接。為了了解原因,我在連接期間執行了一個數據包嗅探器,並查看了以下會話:
C: HELO hostname S: 250 Hello hostname C: AUTH LOGIN XXX | XXX S: 503 AUTH command used when not advertised | 500 unrecognized command C: QUIT S: 221 closing connection
我對 SMTP 協議不夠熟悉,無法理解這裡發生了什麼。我需要在我的 exim4 SMTP 伺服器上進行哪些更改以允許建立此連接?
本質上
503 AUTH command used when not advertised
解釋了自己,它沒有為客戶提供使用該AUTH
命令的選項。這很可能是因為客戶端使用了HELO
而不是EHLO
(我會注意到您在進行 telnet 測試時使用過)。SMTP Authentication 是 Extended SMTP 的一部分,由
EHLO
命令發起;“plain old” SMTP 不支持身份驗證,因此從技術上講,它是一個非法命令,儘管某些 SMTP 伺服器可能仍然允許它。最好的解決方案是告訴您的程序盡可能使用擴展 SMTP (
EHLO
),否則可能會有一個 exim 命令強制它在HELO
類型連接上允許 AUTH。** 更新 **
根據這裡的這篇文章:http ://www.exim.org/lurker/message/20040901.063858.126f66ac.en.html
EHLO(不是 HELO)必須由客戶在 AUTH 之前給出。
也就是說,除非廣告(通過 EHLO,根據 auth_advertise 等),否則無法使用 AUTH 命令。這種行為在 Exim 4.20 中得到了強化,不是一種選擇。
如果你不能讓你的應用程序去做,看起來你需要一個不同的 MTA
EHLO
。或者,您是否需要身份驗證,您可以使用基於 IP 的 ACL 完成同樣的事情嗎?最終解決方案
Exim 確實有一個解決方法,使用這裡
allow_auth_unadvertised
描述的,你可以做這樣的事情:hosts = * control = allow_auth_unadvertised