什麼是簡易郵件傳輸通訊協定 (SMTP)?

簡易郵件傳輸通訊協定 (SMTP) 是傳送電子郵件的網路標準。

學習目標

閱讀本文後,您將能夠:

  • 說明簡易郵件傳輸通訊協定 (SMTP) 的運作方式
  • 瞭解 SMTP 命令、伺服器和信封
  • 定義擴充 SMTP (ESMTP)

相關內容


想要繼續瞭解嗎?

註冊即可收到 Cloudflare 的網路安全學習文章。

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是簡易郵件傳輸通訊協定 (SMTP)?

簡易郵件傳輸通訊協定 (SMTP) 是透過網路傳輸電子郵件的技術標準。與其他網路通訊協定一樣,SMTP 允許電腦和伺服器交換資料,而無論其底層硬體或軟體是什麼。正如使用標準化的信封地址讓郵政服務能夠運作一樣,SMTP 標準化了電子郵件從寄件人到收件人的傳輸方式,從而使廣泛的電子郵件傳遞成為可能。

SMTP 是郵件傳遞通訊協定,而不是郵件擷取通訊協定。郵政服務將郵件投遞到信箱,但收件人仍必須從信箱中取出郵件。同樣,SMTP 將電子郵件傳送到電子郵件提供者的郵件伺服器,但需要使用不同的通訊協定從郵件伺服器中擷取該電子郵件,收件人才能閱讀它。

SMTP 如何運作?

所有網路通訊協定都遵循預先定義的資料交換程序。SMTP 定義在電子郵件用戶端和郵件伺服器之間交換資料的程序。電子郵件用戶端是使用者與之互動的對象:他們存取和傳送電子郵件的電腦或 Web 應用程式。郵件伺服器是用於傳送、接收和轉寄電子郵件的專用電腦;使用者不直接與郵件伺服器互動。

下面簡單介紹了當開始傳送電子郵件時,電子郵件用戶端和郵件伺服器之間傳遞的內容:

  • SMTP 連線開啟:由於 SMTP 使用傳輸控制通訊協定 (TCP) 作為其傳輸通訊協定,因此第一步從用戶端與伺服器之間的 TCP 連線開始。接下來,電子郵件用戶端使用專門的「Hello」命令(HELO 或 EHLO,如下所述)開始電子郵件傳送程序。
  • 電子郵件資料已傳輸:用戶端向伺服器傳送一系列命令以及電子郵件的實際內容:電子郵件標頭(包括其目的地和主旨行)、電子郵件正文和任何其他元件。
  • 郵件傳輸代理 (MTA):伺服器執行稱為「郵件傳輸代理」(MTA) 的程式。MTA 檢查收件人電子郵件地址的網域,如果它與寄件人的網域不同,則會查詢 Domain Name System (DNS) 以查找收件人的 IP 位址。這就像郵局查找郵件收件人的郵遞區號一樣。
  • 連線關閉:當資料傳輸完成時,用戶端會提示伺服器,然後伺服器會關閉連線。此時,除非用戶端開啟新的 SMTP 連線,否則伺服器將不會從用戶端處接收額外的電子郵件資料。

通常,這第一個電子郵件伺服器並非實際的電子郵件最終目的地。伺服器收到來自用戶端的電子郵件後,會與另一台郵件伺服器重複此 SMTP 連線程序。第二台伺服器執行相同的程序,直到電子郵件最終到達收件人電子郵件提供者控制的郵件伺服器上的收件人收件匣。

可以將此程序看作一封信件從寄件人傳送到收件人的過程。郵遞員無法直接將寄件人的信件交給其收件人,而是將信件帶回郵局。郵局將信件運送到另一個城鎮的另一個郵局,然後再運送到下一個郵局,依此類推,直到信件到達收件人處。與此相似,電子郵件透過 SMTP 從一個伺服器傳送到另一個伺服器,直到它們到達收件人的收件匣。

什麼是 SMTP 信封?

SMTP「信封」是電子郵件用戶端向郵件伺服器傳送的關於電子郵件來自何處以及去往何處的一組資訊。SMTP 信封不同於電子郵件標頭和正文,並且對電子郵件收件人不可見。

什麼是 SMTP 命令?

SMTP 命令是預先定義的文字指令,它告訴用戶端或伺服器要做什麼以及如何處理任何隨附的資料。將它們視為按鈕,用戶端可以按下這些按鈕以便讓伺服器正確接受資料。

  • HELO/EHLO:這些命令發出「Hello」訊息,並開始在用戶端和伺服器之間建立 SMTP 連線。「HELO」是該命令的基本版本;「EHLO」用於特定類型的 SMTP。
  • MAIL FROM:這告訴伺服器是誰在傳送電子郵件。如果 Alice 嘗試向她的朋友 Bob 傳送電子郵件,用戶端可能傳送「MAIL FROM:<alice@example.com>」。
  • RCPT TO:該命令用於列出電子郵件的收件人。如果有多個收件人,用戶端可以傳送此命令多次。在上述範例中,Alice 的電子郵件用戶端將傳送「RCPT TO:<bob@example.com>」。
  • DATA:這位於電子郵件內容前方,例如:

DATA
Date: Mon, 4 April 2022
From: Alice alice@example.com
Subject: Eggs benedict casserole
To: Bob bob@example.com

Hi Bob,
I will bring the eggs benedict casserole recipe on Friday.
-Alice
。
  • RSET:該命令用於重設連線,移除之前傳送的所有資訊而不關閉 SMTP 連線。當用戶端傳送了不正確的資訊時使用 RSET
  • QUIT:這用於結束連線。

什麼是 SMTP 伺服器?

SMTP 伺服器是使用 SMTP 通訊協定傳送和接收電子郵件的郵件伺服器。電子郵件用戶端與電子郵件提供者的 SMTP 伺服器直接連線以開始傳送電子郵件。有幾個不同的軟體程式在 SMTP 伺服器上執行:

  • 郵件提交代理 (MSA):MSA 接收來自電子郵件用戶端的電子郵件。
  • 郵件傳輸代理 (MTA):MTA 將電子郵件傳送至傳遞鏈的下一個伺服器。如上所述,如有需要,它可能查詢 DNS 以查找收件人網域的郵件交換 (MX) DNS 記錄
  • 信件傳送代理 (MDA):MDA 接收來自 MTA 的電子郵件,並將其儲存在收件人的電子郵件收件匣中。

SMTP 使用哪個連接埠?

在網路中,連接埠是接收網路資料的虛擬點,可以將其視為郵件地址中的公寓號。連接埠可幫助電腦將網路資料安排到正確的應用程式。防火牆之類的網路安全措施可封鎖不必要的連接埠,以防止傳送和接收惡意資料。

在過去,SMTP 僅使用連接埠 25。如今,連接埠 25 仍然用於 SMTP,但它還可使用連接埠 465、587 和 2525

  • 連接埠 25 最常用於 SMTP 伺服器之間的連線。如今,用於終端使用者網路的防火牆通常會封鎖該連接埠,因為垃圾郵件發送者嘗試濫用它來傳送大量垃圾郵件。
  • 連接埠 465 曾經專供具有安全通訊端層 (SSL) 加密的 SMTP 使用。但是 SSL 已被 Transport Layer Security (TLS) 取代,因此現代電子郵件系統不再使用該連接埠。它只存在於舊版(過時的)系統中。
  • 連接埠 587 現在是電子郵件提交的預設連接埠。透過此連接埠進行的 SMTP 通訊使用 TLS 加密。
  • 連接埠 2525 並未正式與 SMTP 相關,但部分電子郵件服務會在上述連接埠被封鎖時透過此連接埠提供 SMTP 傳遞。

SMTP 與 IMAP 和 POP

網際網路訊息存取通訊協定 (IMAP) 和郵局通訊協定 (POP) 用於將電子郵件傳遞到其最終目的地。電子郵件用戶端必須從鏈中的最終郵件伺服器擷取電子郵件,才能將電子郵件顯示給使用者。用戶端使用 IMAP 或 POP 而非 SMTP 來實現此目的。

要瞭解 SMTP 和 IMAP/POP 之間的區別,請考慮木板和繩索之間的區別。一段木頭可用於將物品向前推,而不能向後拉。繩索可將物品向後拉,而不能向前推。與此相似,SMTP 將電子郵件「推送」到郵件伺服器,但 IMAP 和 POP 將其「拉」入使用者的應用程式。

什麼是擴充 SMTP (ESMTP)?

擴充簡易郵件傳輸通訊協定 (ESMTP) 是通訊協定的一個版本,它擴展了其原始功能,支援傳送電子郵件附件、使用 TLS 和其他功能。幾乎所有電子郵件用戶端和電子郵件服務都使用 ESMTP,而不是基本 SMTP。

ESMTP 有一些額外的命令,包括「EHLO」,這是一個「extended hello」訊息,支援在開始連線時使用 ESMTP。

什麼是 Cloudflare 電子郵件路由?

Cloudflare 電子郵件路由旨在簡化建立和管理電子郵件地址的程序,無需關注其他信箱。透過電子郵件路由,使用者可以建立任意數量的自訂電子郵件地址,以便在他們不想共用其主要電子郵件地址的情況下使用。然後,電子郵件會被路由到他們偏好的電子郵件收件匣,而無需公開主要電子郵件地址。

Cloudflare 電子郵件路由的運作方式是,修改電子郵件的 SMTP 信封,而使標頭和正文保持不變。如要瞭解更多,請閱讀我們的部落格貼文