在 Exchange 伺服器上使用 Telnet 測試 SMTP 通訊

您可以使用 Telnet 來測試簡易郵件傳輸通訊協定 (SMTP) 訊息伺服器之間的通訊。 SMTP 是用來將電子郵件訊息從一部傳訊伺服器傳送至另一部的通訊協定。 如果您無法傳送或接收訊息,使用 Telnet 會很有説明,因為您可以手動將 SMTP 命令傳送至訊息伺服器。 作為傳回,伺服器會以在一般連線中傳回的回應來回複。 這些結果有時可協助您找出無法傳送或接收訊息的原因。

您可以使用 Telnet 來測試 SMTP 通訊:

  • 測試從網際網路到 Exchange 組織的郵件流程。

  • 測試從 Exchange 到網際網路上另一部訊息伺服器的郵件流程。

提示

您是否知道,您可以使用 Microsoft 遠端連線分析器,而不是使用 Telnet 來測試 SMTP 連線 https://testconnectivity.microsoft.com/ 能力? 使用遠端連線分析器,您可以選擇想要執行的連線測試,在此案例中為輸入SMTP Email,並遵循顯示的指示。 它會逐步引導您完成輸入所需的資訊、為您執行測試,然後提供結果。 試試看!

開始之前有哪些須知?

  • 預估完成時間:15 分鐘

  • Exchange 權限無法套用於此主題的程序。 這些程式是在 Exchange 伺服器或用戶端電腦的作業系統中執行。

  • 本主題說明如何使用隨附于 Windows 的 Telnet Client。 協力廠商 Telnet 用戶端可能需要與本主題所示不同的語法。

  • 本主題中的步驟說明如何連線到網際網路對向伺服器,以允許使用 TCP 埠 25 進行匿名連線。 如果您嘗試從網際網路連線到此伺服器,則必須確定您的 Exchange 伺服器可從 TCP 埠 25 上的網際網路連線。 同樣地,如果您嘗試從 Exchange 伺服器連線到網際網路上的伺服器,您必須確定 Exchange 伺服器可以在 TCP 埠 25 上開啟網際網路連線。

  • 您可能會注意到一些使用 TCP 埠 2525 的接收連接器。 這些是內部接收連接器,不會用來接受匿名 SMTP 連線。

  • 如果您要在遠端傳訊伺服器上測試連線,您應該在 Exchange 伺服器上執行本主題中的步驟。 遠端傳訊伺服器通常會設定為確定 SMTP 連線來源的 IP 位址符合寄件者電子郵件地址中的網域。

  • 如需適用於此主題中程序的快速鍵相關資訊,請參閱 Exchange 系統管理中心的鍵盤快速鍵

提示

有問題嗎? 在 Exchange 論壇中尋求協助。 此論壇的網址為:Exchange ServerExchange OnlineExchange Online Protection

步驟 1:在您的電腦上安裝 Telnet 用戶端

在大部分的 Windows 版本上,您必須先安裝 Telnet 用戶端,才能使用它。 若要進行安裝,請參閱安裝 Telnet 用戶端

步驟 2:尋找目的地 SMTP 伺服器的 FQDN 或 IP 位址

若要在埠 25 上使用 Telnet 連線到 SMTP 伺服器,您必須使用完整功能變數名稱 (FQDN) (例如,mail.contoso.com) 或 SMTP 伺服器的 IP 位址。 如果您不知道 FQDN 或 IP 位址,可以使用 Nslookup 命令列工具來尋找目的地網域的 MX 記錄。

注意事項

網路原則可能會讓您無法使用 Nslookup 工具來查詢網際網路上的公用 DNS 伺服器。 或者,您可以在網際網路上使用其中一個免費可用的 DNS 查閱或 MX 記錄查閱網站。

  1. 在命令提示字元中輸入 nslookup ,然後按 Enter。 此命令會開啟 Nslookup 工作階段。

  2. 輸入set type=mx,然後按下 Enter。

  3. 輸入要尋找其 MX 記錄的網域名稱。 例如,若要尋找 fabrikam.com 網域的 MX 記錄,請輸入 fabrikam.com. ,然後按 Enter。

    注意事項

    當您使用尾端句點時 ( 。) ,您可以防止在無意中將任何預設 DNS 尾碼新增至功能變數名稱。

    此命令的輸出看起來像這樣:

    fabrikam.com mx preference=10, mail exchanger = mail1.fabrikam.com
    fabrikam.com mx preference=20, mail exchanger = mail2.fabrikam.com
    mail1.fabrikam.com internet address = 192.168.1.10
    mail2 fabrikam.com internet address = 192.168.1.20
    

    您可以使用與 MX 記錄關聯的任何主機名稱或 IP 位址作為目的 SMTP 伺服器。 喜好設定 (喜好設定的較低值 = 10 與 20) 表示慣用的 SMTP 伺服器。 多個 MX 記錄和不同的喜好設定值用於負載平衡和容錯。

  4. 當您準備好結束 Nslookup 會話時,輸入 exit ,然後按 Enter。

步驟 3:在通訊埠 25 上使用 Telnet 測試 SMTP 通訊

在此範例中,我們將使用下列值。 當您在伺服器上執行命令時,請將這些值取代為您組織 SMTP 伺服器、網域等的值。

  • 目的地 SMTP 伺服器:mail1.fabrikam.com
  • 來源網域:contoso.com
  • 寄件者的電子郵件地址: chris@contoso.com
  • 收件者的電子郵件地址: kate@fabrikam.com
  • 訊息主旨:從 Contoso 測試
  • 訊息本文:這是測試訊息

提示

Telnet 用戶端中的命令不區分大小寫。 為了清楚起見,此範例中的 SMTP 命令動詞已大寫。 連線到目的地 SMTP 伺服器之後,就無法在 Telnet 會話中使用後端空間金鑰。 如果您在輸入 SMTP 命令時發生錯誤,則必須按 Enter 鍵,然後再次輸入命令。 無法辨識的 SMTP 命令或語法錯誤會產生如下的錯誤訊息: 500 5.3.3 Unrecognized command

  1. 開啟 [命令提示字元] 視窗,輸入 telnet ,然後按 Enter。

    此命令會開啟 Telnet 工作階段。

  2. 輸入set localecho,然後按下 Enter。

    這個 選擇性 命令可讓您在輸入字元時檢視字元,而且某些 SMTP 伺服器可能需要它。

  3. 輸入set logfile <filename>,然後按下 Enter。

    這個 選擇性 命令會啟用記錄,並指定 Telnet 會話的記錄檔。 如果您只指定檔案名,記錄檔會位於目前的資料夾中。 如果您指定路徑和檔案名,路徑必須位於本機電腦上,而且您可能需要輸入 Windows DOS 8.3 格式的路徑和檔案名, (沒有空格) 的簡短名稱。 路徑必須存在,但記錄檔會自動建立。

  4. 輸入OPEN mail1.fabrikam.com 25,然後按下 Enter。

  5. 輸入EHLO contoso.com,然後按下 Enter。

  6. 輸入MAIL FROM:<chris@contoso.com>,然後按下 Enter。

  7. 輸入RCPT TO:<kate@fabrikam.com> NOTIFY=success,failure,然後按下 Enter。

    選擇性的 NOTIFY 命令會指定特定傳遞狀態通知 (DSN) 訊息, (也稱為 SMTP 必須提供的退回訊息、非交付報告或 DDR) 。 在此範例中,您要求 DSN 訊息以成功或失敗的訊息傳遞。

  8. 輸入DATA,然後按下 Enter。

  9. 輸入Subject: Test from Contoso,然後按下 Enter。

  10. 再按一次 Enter。

    [ 主旨: ] 欄位與訊息本文之間需要空白行。

  11. 輸入This is a test message,然後按下 Enter。

  12. 輸入句號 ( . ) ,然後按 Enter。

  13. 若要中斷 SMTP 伺服器的連線,請輸入 QUIT ,然後按 Enter。

  14. 若要關閉 Telnet 會話,請輸入 quit ,然後按 Enter。

使用上述步驟的成功會話如下所示:

C:\Windows\System32> telnet
Microsoft Telnet> set localecho
Microsoft Telnet> set logfile c:\TelnetTest.txt
Microsoft Telnet> OPEN mail1.fabrikam.com 25
220 mail1.fabrikam.com Microsoft ESMTP MAIL Service ready at Fri, 5 Aug 2016 16:24:41 -0700
EHLO contoso.com
250-mail1.fabrikam.com Hello [172.16.0.5]
250-SIZE 37748736
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS
250-AUTH NTLM
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 XRDST
MAIL FROM: <chris@contoso.com>
250 2.1.0 Sender OK
RCPT TO: <kate@fabrikam.com> NOTIFY=success,failure
250 2.1.5 Recipient OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
Subject: test

This is a test message.
.
250 2.6.0 <c89b4fcc-3ad1-4758-a1ab-1e820065d622@mail1.fabrikam.com> [InternalId=5111011082268, Hostname=mail1.fabrikam.com] Queued mail for delivery
QUIT
221 2.0.0 Service closing transmission channel

步驟 4:Telnet 會話中的成功和錯誤訊息

本節提供上一個範例中所使用命令的成功和失敗回應相關資訊。

注意事項

RFC 5321 中定義的三位數 SMTP 回應碼與所有 SMTP 訊息伺服器相同,但回應中的文字描述可能稍有不同。

SMTP 回復碼

SMTP 伺服器會以 x.y.z 格式回應具有各種數值回復碼的命令,其中:

  • X 指出命令是良好、錯誤或不完整。
  • Y 表示已傳送的回應類型。
  • Z 提供命令的其他相關資訊

當開啟連線的伺服器收到回應時,它可以判斷遠端伺服器是否已接受命令並準備好進行下一個命令,或是否發生錯誤。

X) 的第一個數位 (特別重要,因為它表示已傳送的命令成功或失敗。 以下是其可能的值及其意義。

回復碼 意義
2.y.z 已在遠端伺服器上成功完成傳送的命令。 遠端伺服器已準備好進行下一個命令。
3.y.z 已接受命令,但遠端伺服器需要更多資訊,才能完成作業。 傳送伺服器必須傳送具有所需資訊的新命令。
4.y.z 遠端伺服器不接受命令,原因可能是暫時性的。 傳送伺服器稍後應該嘗試再次連線,以查看遠端伺服器是否可以成功接受命令。 傳送伺服器會繼續重試連線,直到成功連線完成 (由 2.y.z 程式碼) 表示,或是 (5.y.z 程式碼) 指出的永久失敗。
暫時性錯誤的範例是遠端伺服器上的儲存空間不足。 一旦有更多空間可供使用,遠端伺服器應該能夠成功接受命令。
5.y.z 遠端伺服器因無法復原的原因而無法接受命令。 傳送伺服器不會重試連線,而且會將未傳遞的報表傳回給傳送訊息的使用者。
無法復原錯誤的範例是傳送至不存在電子郵件地址的訊息。

上表是以 RFC 5321 (簡易郵件傳輸通訊協定) 4.2.1 節所提供的資訊為基礎。 本節和第 4.2.2 和 4.2.3 節包含其他資訊,包括第二個 (Y) 和第三個 (Z) SMTP 回復碼數位 描述。

OPEN 命令

成功的回應220 mail1.fabrikam.com Microsoft ESMTP MAIL Service ready at <day-date-time>

失敗回應Connecting to mail1.fabrikam.com...Could not open connection to the host, on port 25: Connect failed

失敗的可能原因

  • 目的 SMTP 服務無法使用。
  • 目的地防火牆的限制。
  • 來源防火牆的限制。
  • 目的地 SMTP 伺服器的 FQDN 或 IP 位址不正確。
  • 埠號碼不正確。

EHLO 命令

成功的回應250 mail1.fabrikam.com Hello [<sourceIPaddress>]

失敗回應501 5.5.4 Invalid domain name

失敗的可能原因

  • 功能變數名稱中的字元無效。
  • 目的地 SMTP 伺服器上的連線限制。

注意事項

EHLO 是 RFC 5321 中定義 (ESMTP) 動詞動詞的擴充簡單訊息傳輸通訊協定。 ESMTP 伺服器會在初始連線期間通告其功能。 這些功能包括可接受的訊息大小上限和支援的驗證方法。 HELO 是 RFC 821 中定義的舊 SMTP 動詞。 大部分 SMTP 郵件伺服器都支援 ESMTP 及 EHLO。 如果您嘗試連線的非 Exchange 伺服器不支援 EHLO,您可以改用 HELO。

MAIL FROM 命令

成功的回應250 2.1.0 Sender OK

失敗回應550 5.1.7 Invalid address

失敗的可能原因:寄件者電子郵件地址中的語法錯誤。

失敗回應530 5.7.1 Client was not authenticated

失敗的可能原因:目的地伺服器不接受匿名訊息提交。 如果您嘗試使用 Telnet 將郵件直接提交至信箱伺服器,但該信箱伺服器沒有設定為接受匿名連線的接收連接器,就會收到此錯誤。

RCPT TO 命令

成功的回應250 2.1.5 Recipient OK

失敗回應550 5.1.1 User unknown

失敗的可能原因:指定的收件者不存在。