使用 telnet 測試 SMTP 通信
本主題說明如何使用 Telnet 測試郵件服務器之間的簡單郵件傳輸協議 (SMTP) 通信。默認情況下,SMTP 在端口 25 上進行偵聽。如果在端口 25 上使用 Telnet,則可以輸入 SMTP 命令用來連接到 SMTP 服務器,且可以將 Telnet 會話當做 SMTP 郵件服務器來發送郵件。您還可以查看連接過程和郵件提交過程中每個步驟是成功還是失敗。
在以下方案中,您可能需要使用 Telnet 測試發往或來自 MicrosoftExchangeServer 組織中存在的傳輸服務器的 SMTP 通信:
- 從位于外圍網絡之外的主機連接到組織的邊緣傳輸服務器,并發送一封測試郵件。
- 從組織的邊緣傳輸服務器連接到遠程郵件服務器,并發送一封測試郵件。
本主題中的步驟表明如何使用 Microsoft Windows 中包含的組件 Telnet 客戶端。第三方 Telnet 客戶端可能需要不同于 WindowsTelnet 組件的語法。
先決條件
- 配置接受連接器以允許匿名訪問或基本身份驗證由于集線器傳輸服務器之間正常進行的郵件傳輸經過加密和身份驗證,因此在端口 25 上使用 Telnet 測試通信時,內部集線器傳輸服務器應將接受連接器配置為允許匿名訪問或基本身份驗證來接收郵件。面向 Internet 的服務器需要使用匿名訪問。
注意:
將郵件發送到接受基本身份驗證的接收連接器時,您必須有可將用于用戶名和密碼的文本字符串轉換為 Base64 格式的實用程序。由于使用基本身份驗證時,用戶名和密碼非常容易辨別,因此不建議使用無加密的基本身份驗證。 - 連接到遠程郵件服務器您可能還需要從組織的邊緣傳輸服務器連接到遠程郵件服務器。對于面向 Internet 的 SMTP 服務器,如果配置為驗證源 IP 地址、相應域名系統 (DNS) 域名以及所有嘗試向服務器發送郵件的 Internet 主機的反向查找 IP 地址,則這有助于避免其拒絕測試郵件。
- 安裝和/或啟用 Telnet 客戶端在使用 Telnet 對郵件服務器之間的 SMTP 通信進行測試之前,您可能還需要執行下列一項或多項任務:
- 安裝 Telnet 客戶端(如果尚未安裝)。有關如何在 Windows Vista 或 Windows Server 2008 上安裝 Telnet 客戶端的詳細信息,請參閱安裝 Telnet 客戶端。
- 在 Windows Server 2008 上啟用 Telnet 客戶端。請參閱本主題后面的步驟。
- 查找 SMTP 服務器的 FQDN 或 IP 地址。如果不知道 FQDN 或 IP 地址,可以使用 Nslookup 查找 SMTP 服務器的 FQDN 或 IP 地址。請參閱本主題后面的步驟。
在 Windows Server 2008 中啟用 Telnet 客戶端
完成此步驟的***要求為 WindowsServer2008本地 Administrators 組的成員或等效身份。
在 WindowsServer2008 中,默認情況下禁用 Telnet 客戶端。若要啟用,請執行下列步驟:
- 打開“服務器管理器”。
- 單擊“操作”,然后選擇“添加功能”。
- 選擇“Telnet 客戶端”并單擊“下一步”。
- 單擊“安裝”,然后單擊“關閉”以完成 Telnet 客戶端的安裝。
使用 Nslookup 查找 SMTP 服務器的 FQDN 或 IP 地址
若要使用 Telnet 端口 25 連接到目標 SMTP 服務器,必須使用 SMTP 服務器的完全限定域名 (FQDN) 或 IP 地址。如果 FQDN 或 IP 地址未知,查找此信息的最簡便方法是使用 Nslookup 命令行工具查找目標域的 MX 記錄。
- 在命令提示符處,鍵入 nslookup,然后按 Enter 鍵。此命令將打開 Nslookup 會話。
- 鍵入 set type=mx 并按 Enter 鍵。
- 鍵入 set timeout=20 并按 Enter 鍵。默認情況下,Windows DNS 服務器具有 15 秒的遞歸 DNS 查詢超時限制。
- 請鍵入想要查找 MX 記錄的域名。例如,若要查找 fabrikam.com 域的 MX 記錄,請鍵入 fabrikam.com. 并按 Enter 鍵。
注意:
尾隨句點 (.) 表示 FQDN。使用尾隨句點可防止無意中將為網絡配置的默認 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 服務器。較低的***項值表示*** SMTP 服務器。您可以使用多個 MX 記錄和不同的***項值,以實現負載平衡和容錯。 - 準備結束 Nslookup 會話時,請鍵入 exit 并按 Enter 鍵。
![]() |
---|
組織的內部網絡規定的防火墻或 Internet 代理限制可能會阻止您使用 Nslookup 工具查詢 Internet 上的公用 DNS 服務器。 MX 記錄不是 Exchange 組織內的內部郵件流絕對必需的。如果要在組織中查找任何集線器傳輸服務器或已訂閱邊緣傳輸服務器的 FQDN,則可以使用 Exchange 命令行管理程序中的下列命令:Get-ExchangeServer | where {$_.isHubTransportServer -eq $true -or $_.isEdgeServer -eq $true} | Format-List Fqdn,ServerRole 有關詳細信息,請參閱 Get-ExchangeServer 和 管道傳輸。 |
在端口 25 上使用 Telnet 測試 SMTP 通信
為了提供示例,下列步驟將使用下表中描述的值:
- 目標 SMTP 服務器mail1.fabrikam.com
- 源域contoso.com
- 發件人的電子郵件地址chris@contoso.com
- 收件人的電子郵件地址kate@fabrikam.com
- 郵件主題來自 Contoso 的測試
- 郵件正文這是一封測試郵件
注意:
應始終使用有效的發件人電子郵件地址,以便將目標 SMTP 服務器生成的未送達報告 (NDR) 郵件傳遞給郵件發件人。
Telnet 客戶端中的命令不區分大小寫。為清晰起見,SMTP 命令動詞均使用大寫。
- 在命令提示符處,鍵入 telnet,然后按 Enter 鍵。此命令將打開 Telnet 會話。
- 鍵入 set localecho 并按 Enter 鍵。此可選命令可使您在鍵入字符時查看這些字符。某些 SMTP 服務器可能需要此設置。
- 鍵入 set logfile <文件名>。此可選命令可以將 Telnet 會話記錄到指定的日志文件中。如果您僅指定了文件名,則日志文件的位置將是當前工作目錄。如果您指定了路徑和文件名,該路徑必須位于計算機本地。指定的路徑和文件名都必須以 Microsoft DOS 8.3 格式輸入。您指定的路徑必須已存在。如果您指定了一個不存在的日志文件,系統將為您創建一個日志文件。
- 鍵入 open mail1.fabrikam.com 25 并按 Enter 鍵。
注意:
在 Telnet 會話中連接到目標 SMTP 服務器后,無法使用 Backspace 鍵。如果您在鍵入 SMTP 命令時出現錯誤,則必須按下 ENTER 鍵,然后再鍵入該命令。無法識別的 SMTP 命令或語法錯誤會導致類似下面的錯誤消息: 500 5.3.3 Unrecognized command
- 鍵入 MAIL FROM:chris@contoso.com 并按 Enter 鍵。
- 鍵入 RCPT TO:kate@fabrikam.com NOTIFY=success,failure 并按 Enter 鍵。可選的 NOTIFY 命令可定義目標 SMTP 服務器必須向發件人提供的特定傳遞狀態通知 (DSN) 郵件。DSN 郵件是在 RFC 1891 中定義的。在本例中,您要查詢有關郵件傳遞成功或失敗的 DSN 郵件。
- 鍵入 DATA 并按 Enter 鍵。您將收到與以下類似的響應:
354 Start mail input; end with <CLRF>.<CLRF>
- 按 Enter 鍵。RFC 2822 需要在
Subject:
頭字段和郵件正文間留一個空行。 - 鍵入 這是一封測試郵件,再按 ENTER 鍵。
- 按 Enter 鍵,鍵入句點 ( . ),再按 Enter 鍵。您將收到與以下類似的響應:
250 2.6.0 <GUID> Queued mail for delivery
-
221 2.0.0 Service closing transmission channel
評估 Telnet 會話的結果
針對以上示例中所使用的以下命令,本節提供有關這些命令響應的信息:
- 打開 mail1.fabrikam.com 25
- EHLO contoso.com
- MAIL FROM:chris@contoso.com
- RCPT TO:kate@fabrikam.com NOTIFY=success,failure
注意:
在 RFC 2821 中定義的三位數 SMTP 響應代碼對于所有 SMTP 郵件服務器都相同。對于某些 SMTP 郵件服務器,文本說明可能稍有不同。在上一個示例中,目標計算機運行 ExchangeServer2010。
打開 mail1.fabrikam.com 25
成功響應: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 contoso.com
成功響應:250 mail1.fabrikam.com Hello [<sourceIPaddress>]
失敗響應:501 5.5.4 Invalid domain name
失敗的可能原因:域名中存在無效字符。或者,存在有關目標 SMTP 服務器的連接限制。
![]() |
---|
EHLO 是 RFC 2821 中定義的擴展的簡單郵件傳輸協議 (ESMTP) 命令動詞。ESMTP 服務器可在初始連接時公布其功能。這些功能包括其***的可接受郵件大小以及其支持的身份驗證方法。HELO 是 RFC 821 中定義的舊版 SMTP 命令動詞。多數 SMTP 郵件服務器都支持 ESMTP 和 EHLO。 |
MAIL FROM:chris@contoso.com
成功響應:250 2.1.0 Sender OK
失敗響應:550 5.1.7 Invalid address
可能的失敗原因:發件人的電子郵件地址中存在語法錯誤。
失敗響應:530 5.7.1 Client was not authenticated
可能的失敗原因:目標服務器不接受匿名郵件提交。如果您試圖使用 Telnet 直接向集線器傳輸服務器提交郵件,則將收到此錯誤消息。
RCPT TO:kate@fabrikam.com NOTIFY=success,failure
成功響應:250 2.1.5 Recipient OK
失敗響應:550 5.1.1 User unknown
可能的失敗原因:指定的收件人在組織中不存在。