在 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 Server、Exchange Online 或 Exchange 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 記錄查閱網站。
在命令提示字元中輸入
nslookup
,然後按 Enter。 此命令會開啟 Nslookup 工作階段。輸入
set type=mx
,然後按下 Enter。輸入要尋找其 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 記錄和不同的喜好設定值用於負載平衡和容錯。
當您準備好結束 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
。
開啟 [命令提示字元] 視窗,輸入
telnet
,然後按 Enter。此命令會開啟 Telnet 工作階段。
輸入
set localecho
,然後按下 Enter。這個 選擇性 命令可讓您在輸入字元時檢視字元,而且某些 SMTP 伺服器可能需要它。
輸入
set logfile <filename>
,然後按下 Enter。這個 選擇性 命令會啟用記錄,並指定 Telnet 會話的記錄檔。 如果您只指定檔案名,記錄檔會位於目前的資料夾中。 如果您指定路徑和檔案名,路徑必須位於本機電腦上,而且您可能需要輸入 Windows DOS 8.3 格式的路徑和檔案名, (沒有空格) 的簡短名稱。 路徑必須存在,但記錄檔會自動建立。
輸入
OPEN mail1.fabrikam.com 25
,然後按下 Enter。輸入
EHLO contoso.com
,然後按下 Enter。輸入
MAIL FROM:<chris@contoso.com>
,然後按下 Enter。輸入
RCPT TO:<kate@fabrikam.com> NOTIFY=success,failure
,然後按下 Enter。選擇性的 NOTIFY 命令會指定特定傳遞狀態通知 (DSN) 訊息, (也稱為 SMTP 必須提供的退回訊息、非交付報告或 DDR) 。 在此範例中,您要求 DSN 訊息以成功或失敗的訊息傳遞。
輸入
DATA
,然後按下 Enter。輸入
Subject: Test from Contoso
,然後按下 Enter。再按一次 Enter。
[ 主旨: ] 欄位與訊息本文之間需要空白行。
輸入
This is a test message
,然後按下 Enter。輸入句號 (
.
) ,然後按 Enter。若要中斷 SMTP 伺服器的連線,請輸入
QUIT
,然後按 Enter。若要關閉 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
失敗的可能原因:指定的收件者不存在。