本文介紹如何 telnet 到運行簡單郵件傳輸協議 (SMTP) 服務的計算機上的端口 25,以解決 SMTP 通信問題。默認情況下,SMTP 偵聽端口 25。
您可以根據您遇到的問題類型選用以下適當的疑難解答步驟。例如,如果您在兩台 Microsoft Exchange 2000 Server 服務器之間通過 SMTP 發送郵件時遇到問題,則可以通過在發送服務器上使用 Telnet 連接到目標服務器上的端口 25 來測試 SMTP 連接。或者,如果您在接收來自 Internet 的 SMTP 郵件時遇到問題,則可以按照本文中列出的步驟,測試駐留在 Internet 上但不在您的網絡上的主機與您的 SMTP 服務器的連接。
更多信息
Microsoft 產品線中有 SMTP 的多個不同變體。Microsoft Windows 產品線的 SMTP 服務包含在 Internet 信息服務 (IIS) 中,而在 Microsoft Windows NT Server 4.0 中,SMTP 服務包含在 Option Pack 中。在較新版本的 Windows 中,IIS 已被集成到操作系統中,並且您可以使用“控制面板”中的“添加或刪除程序”添加 IIS。此外,Exchange 2000 和 Microsoft Exchange Server 2003 都使用 IIS 中的現有 SMTP 服務及其他功能。Microsoft Exchange Server 版本 4.0、5.0 和 5.5 均包含它們自己的 SMTP 版本,所采用的形式為 Internet Mail Connector (IMC) 或 Internet Mail Service (IMS)。
注意:在 Exchange 5.0 及更高版本中,Internet Mail Connector (IMC) 被重命名為 Internet Mail Service。
在啟動 Telnet 會話之前,必須具有要將此測試郵件發送到的目標用戶的完整 SMTP 電子郵件地址。該電子郵件地址必須采用以下格式:
[email protected]
您也可以具有運行 SMTP 服務的服務器計算機的完全限定域名 (FQDN) 或 IP 地址(例如,10.120.159.1)。如果服務器在您的組織中,您可能已經擁有這些信息。如果服務器是外部服務器,查找這些信息最簡單的方法是使用 Nslookup.exe 以找到包含這些信息的 DNS 記錄。 有關 NSlookup 的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
200525 使用 NSlookup.exe
有關如何獲取 Internet 郵件交換器記錄的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
203204 XFOR:如何獲取 Internet 郵件交換器記錄
確保運行 SMTP 服務的服務器上已啟動 SMTP。要測試 SMTP 是否已啟動,您可以運行本文中列出的基本測試,並驗證您是否會收到來自遠程服務器的 220 消息。這還將驗證 SMTP 是否正在運行。
注意:
- 有些 Telnet 應用程序要求您打開本地回顯功能,以查看鍵入的命令。要在 Microsoft Telnet 會話中執行此操作,請在命令提示符處鍵入 set local_echo。
- 在 Microsoft Windows XP 中,應鍵入 set localecho 而不是 set local_echo。
基本測試
按照下列步驟操作,以確保主機和遠程 SMTP 服務器能夠通信。 如果在您鍵入以下任一命令之後,收到以下錯誤信息,則說明 SMTP 服務器因為語法錯誤或命令錯誤而無法識別您所鍵入的內容:
500 Command not recognized檢查該命令並再次鍵入它,或者驗證您是否正在與 Microsoft SMTP 服務器直接通信。
注意:Microsoft Telnet 不允許您使用 Backspace 鍵。如果在鍵入時出錯,必須按 Enter 鍵,然後開始鍵入新的命令。
在以下步驟中,您要從命令行中運行 Telnet。要打開命令行,請單擊“開始”,單擊“運行”,在“打開”框中鍵入 cmd,然後單擊“確定”。
- 您可以通過使用以下格式的 Telnet 命令來啟動 Telnet 會話:
注意:在鍵入每行內容之後按 Enter 鍵。
telnet 服務器名端口號
例如,鍵入:
telnet mail.contoso.com 25
注意:您可以將服務器名 替換為您要連接到的 SMTP 服務器的 IP 地址或 FQDN。 記住在鍵入每個命令之後按 Enter 鍵。
如果該命令起作用,您將會收到來自 SMTP 服務器的類似以下內容的消息:
220 site.contoso.com Microsoft Exchange Internet Mail Connector <IMC 的版本號>
注意:由於有許多不同版本的 Microsoft SMTP 或第三方 SMTP 服務器,因此您可能會收到來自接收服務器的不同的消息。不過,您肯定會收到包含服務器的 FQDN 和 SMTP 的版本的 220 消息。此外,所有版本的 Microsoft SMTP 在 220 消息中都包含“Microsoft”一詞。
- 通過鍵入以下命令開始通信:
EHLO test.com
注意:您可以使用 HELO 命令,但是 EHLO 是擴展 SMTP 動詞集中的一個動詞,SMTP 的所有當前 Microsoft 實現都支持該動詞集。除非您認為擴展 SMTP 動詞有問題,否則最好使用 EHLO。
如果該命令成功,您會收到以下消息:
250 OK
- 鍵入以下命令向接收 SMTP 服務器通知郵件發件人:
MAIL FROM:[email protected]
注意:該地址可以是您想使用的任何 SMTP 地址,但是最好考慮以下問題:
- 有些 SMTP 郵件系統會基於 MAIL FROM:地址篩選郵件,並且會禁止某些 IP 地址連接到 SMTP 郵件系統,或者如果連接 IP 地址與 SMTP 郵件系統所在的域不匹配,它還會禁止該地址向 SMTP 郵件系統發送電子郵件。在本例中,該域是 test.com。
- 如果您在發送郵件時沒有使用有效的電子郵件地址,您將無法確定在發送郵件時是否有問題,因為未送達報告 (NDR) 無法到達無效的 IP 地址。如果您使用有效的電子郵件地址,您將會收到來自 SMTP 服務器的以下消息:
250 OK - MAIL FROM [email protected]
- 鍵入以下命令向接收 SMTP 服務器通知郵件的收件人。
注意:最好始終使用要發送到的域中的有效收件人 SMTP 地址。例如,如果您要發送到 [email protected],必須確保域中存在 [email protected]。否則,您會收到 NDR。
使用您要發送到的人員的 SMTP 地址鍵入以下命令:
RCPT TO:[email protected]
您會收到以下消息:
250 OK - Recipient User@ Domain.Com
- 鍵入以下命令通知 SMTP 服務器您已准備好發送數據:
DATA
您會收到以下消息: 354 Send data. End with CRLF.CRLF
- 您現在已可以開始鍵入郵件的 822/2822 部分。用戶將會在他們的收件箱中看到郵件的這一部分。鍵入以下命令以添加主題行:
Subject:test message
按兩次 Enter 鍵。此命令不會顯示任何信息。
注意:按兩次 Enter 鍵為了與 Request for Comments (RFC) 822 和 2822 保持一致。它規定 822 命令後面必須跟一個空行。
- 鍵入以下命令以添加郵件正文:
This is a test message you will not see a response from this command.
- 在下一個空行中鍵入英文句點 (.),然後按 Enter 鍵。 您會收到以下消息:
250 OK
- 鍵入以下命令關閉連接:
QUIT
您會收到以下消息:
221 closing connection
- 驗證收件人是否收到您發送的消息。如果在應用程序事件日志中出現任何錯誤事件消息,或者接收郵件時出現問題,請檢查主機的配置或通信。
高級測試
除本文前面列出的基本測試步驟外,您還可以使用送達回執對郵件進行雙向測試。您可以使用此方法驗證 SMTP 服務器是否可以接受入站連接,並且為發件人生成一個送達回執以測試 SMTP 服務器的出站連接。
要為測試郵件請求送達回執,請參見本文“基本測試”一節的第 4 步,以確保提供的信息是可以接收送達回執的有效電子郵件地址。然後在本文“基本測試”一節的第 5 步中,在 Telnet 會話中鍵入以下命令:
RCPT TO:[email protected] notify=success,failure
,