使用 telnet 檢查 SMTP 是否正常提供服務

近期手上的重要專案到了要上線的最終階段,在正式對外服務前,Server 間的相關設定都需要一一確認與驗證,其中關於 mail server (SMTP) 這塊,因為是全新的 server,沒有額外安裝可以用來測試的工具也沒有其他 application 可以用來測試,這時 Windows 內建的基本工具 telnet 就成為最佳幫手了

而我因為好一陣子沒用生疏不少,趁著這次機會再複習一下,順手紀錄一下用法

檢查步驟

  1. 使用 telnet 連線至 mail server

    • 方法一:

      • 開啟 cmd 並執行 telnet

        1cmd

        2telnet

      • 連線至 mail server

        • 指令

          o {mail server} 25
          
        • 範例

          o mail.yowko.com 25
          

          3connect

        • 已連線

          4connected

    • 方法二:

      • 開啟 cmd 並使用 telnet 連線 mail server

        • 指令

          telnet {mail server} 25
          
        • 範例

          telnet mail.yowko.com 25
          

          5telnetsmtp

      • 已連線

        4connected

  2. 檢查 mail server 是否能正確回應

    讓 mail server 向發出指令的電腦說 Hello

    6helointro

    • 使用 EHLO (推薦)

      這是 HELO 的擴充指令,因為 HELO 原始設計並沒有提供支援 protocal (e.g. TLS)的資料,詳細說明可以參考 What is the difference between the HELO/EHLO commands?

      • 可以只用 EHLO

        EHLO
        

        7-0ehlo

      • 也可以加上 mail server

        EHLO {mail server}
        

        7ehlo

    • 使用 HELO

      • 可以只用 HELO

        HELO
        

        8-0helo

      • 也可以加上 mail server

        HELO {mail server}
        

        8helo

  3. 指定寄件人

    部份 mail server 不支援指定寄件人,像是 gmail

  4. 指定收件人

  5. 填寫信件內容

    • 輸入 Data

      會提示可以開始輸入信件內容,輸入完畢以 <CRLF>.<CRLF> 結尾( 按 Enter 加上 . 再加上一次 Enter )

      11data

    • 信件標題

      輸入信件標題後,需按 兩次 Enter 與內文以一行空白隔開(沒有任何回應訊息)

    • 指令

      Subject:{標題}
      
    • 範例

      Subject:test subject
      

      12subject

    • 內文

      輸入完成後,需要 按 Enter 加上 . 再加上一次 Enter 當做結尾,成功會收到 mail server 列入處理 queue 的 250 訊息

      13done

  6. 實際效果

    14result

心得

個人經驗:在 telnet 互動模式中如果有打錯字,使用 Backspace 並無法真正刪除,據我的操作,只要打錯字重新輸入當次指令一定都失敗

透過 telnet 想要發送精美的 mail 可能有些不切實際,但在用來測試 SMTP 有效性上就非常好用,除了 Windows 內建的 telnet client 之外不需要額外安裝其他軟體,尤其在資安防護較高的機房環境特別好用

參考資訊

  1. What is the difference between the HELO/EHLO commands?
  2. 如何使用 Telnet 來測試 SMTP 通訊
  3. 如何使用Telnet指令來測試SMTP是否正常運作?