Email Protocols (SMTP, IMAP, POP3)
my-notes/system-design-hld/concepts · ZH
translationKey: email-protocols-smtp-imap-pop3
#system design
#concept
參考影片: https://www.youtube.com/watch?v=IMLFrYqI-oQ
💡 一、Email Protocol 是什麼?
電子郵件(Email)在網際網路上的傳遞, 是透過一系列「標準協定」進行傳送、接收與同步的。
在郵件系統中,通常包含三個主要角色:
| 類別 | 角色 | 代表協定 |
|---|---|---|
| 寄信(Sending) | 郵件伺服器之間傳輸郵件 | SMTP |
| 收信(Retrieval) | 用戶端從郵件伺服器取信 | POP3 / IMAP |
| 存取(Access) | 用戶端(如 Gmail, Outlook)讀取或管理信件 | IMAP |
🧭 二、Email 傳送與接收流程概覽
[User A Client]
│ (SMTP)
▼
[User A's Mail Server]
│ (SMTP over Internet)
▼
[User B's Mail Server]
│ (IMAP / POP3)
▼
[User B Client]
流程解釋:
1️⃣ SMTP:用於將信件從寄件者的客戶端送到郵件伺服器,並在伺服器之間傳遞。
2️⃣ IMAP / POP3:用於收件者從伺服器讀取信件。
📨 三、SMTP(Simple Mail Transfer Protocol)
📘 功能
SMTP 是郵件的「寄送協定」,
用於將郵件從客戶端 → 郵件伺服器 → 目標伺服器。
⚙️ 運作流程
-
使用者的郵件客戶端(MUA)透過 SMTP 將信件傳給郵件伺服器(MSA)
-
郵件伺服器(MTA)透過 SMTP 將信件傳送到收件者的郵件伺服器(MDA)
🔢 常用 Port
| Port | 加密方式 | 用途 |
|---|---|---|
| 25 | 無加密(Plaintext) | 伺服器對伺服器傳信(早期) |
| 465 | SSL/TLS | 已被重啟使用為「SMTPS」 |
| 587 | STARTTLS | 用戶端安全寄信(推薦) |
🔐 SMTP 安全擴充
| 協定 | 功能 |
|---|---|
| SMTP AUTH | 驗證使用者身份(防止垃圾信) |
| STARTTLS | 支援傳輸加密 |
| SPF / DKIM / DMARC | 防止信件偽造與釣魚攻擊 |
📥 四、POP3(Post Office Protocol v3)
📘 功能
POP3 是「下載式收信協定」, 將信件從伺服器「拉回本地端」儲存,預設下載後伺服器會刪除副本。
⚙️ 特性
| 特性 | 說明 |
|---|---|
| 預設行為 | 下載後刪除伺服器副本(可設定保留) |
| 離線使用 | 支援,信件都存在本機 |
| 多裝置同步 | ❌ 不支援(不同裝置收信後不一致) |
| 效能 | 快速、低資源消耗 |
| 使用場景 | 單一裝置使用,如舊式 Outlook / Thunderbird |
🔢 常用 Port
| Port | 加密方式 |
|---|---|
| 110 | 無加密 |
| 995 | SSL/TLS(POP3S) |
📂 五、IMAP(Internet Message Access Protocol)
📘 功能
IMAP 是「即時同步式收信協定」, 信件保留在伺服器上,所有裝置(手機、筆電)都能即時同步狀態。
⚙️ 特性
| 特性 | 說明 |
|---|---|
| 資料儲存 | 郵件保留在伺服器端 |
| 離線使用 | 部分同步(快取) |
| 多裝置同步 | ✅ 支援(標示、已讀、分類同步) |
| 效能 | 較 POP3 高,但需要更多伺服器資源 |
| 使用場景 | 現代郵件系統(Gmail、Outlook、Yahoo)幾乎全採 IMAP |
🔢 常用 Port
| Port | 加密方式 |
|---|---|
| 143 | STARTTLS |
| 993 | SSL/TLS(IMAPS) |
🔄 六、SMTP vs POP3 vs IMAP 對照表
| 項目 | SMTP | POP3 | IMAP |
|---|---|---|---|
| 功能 | 傳送郵件 | 收信(下載) | 收信(同步) |
| 流向 | 寄件人 → 收件伺服器 | 收件伺服器 → 客戶端 | 雙向同步 |
| 資料儲存 | 郵件伺服器中繼 | 下載到本地 | 保留於伺服器 |
| 多裝置同步 | 不適用 | 不支援 | ✅ 支援 |
| 加密 Port | 465 / 587 | 995 | 993 |
| 使用者行為 | 寄信 | 收信(一次下載) | 收信(同步所有裝置) |
🧰 七、常見應用範例
📨 寄信(SMTP)
import smtplib
from email.mime.text import MIMEText
msg = MIMEText("Hello, this is a test email.")
msg['Subject'] = "Test Mail"
msg['From'] = "sender@example.com"
msg['To'] = "receiver@example.com"
with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
smtp.starttls()
smtp.login("sender@example.com", "password")
smtp.send_message(msg)
📥 收信(IMAP)
import imaplib, email
mail = imaplib.IMAP4_SSL("imap.gmail.com")
mail.login("user@example.com", "password")
mail.select("inbox")
result, data = mail.search(None, "ALL")
for num in data[0].split():
result, msg_data = mail.fetch(num, "(RFC822)")
msg = email.message_from_bytes(msg_data[0][1])
print(msg["Subject"])
🔒 八、Email 安全機制
| 協定 | 功能 |
|---|---|
| SPF (Sender Policy Framework) | 驗證寄件 IP 是否授權寄送該網域郵件 |
| DKIM (DomainKeys Identified Mail) | 使用私鑰簽名郵件,防止內容被竄改 |
| DMARC (Domain-based Message Authentication, Reporting & Conformance) | 結合 SPF + DKIM,規範如何處理偽造信件 |
| STARTTLS / SMTPS / IMAPS / POP3S | 加密郵件傳輸過程 |
🌍 九、Email 協定與現代雲端郵件服務
| 平台 | 發信協定 | 收信協定 | 備註 |
|---|---|---|---|
| Gmail | SMTP (smtp.gmail.com) | IMAP / POP3 | 支援 OAuth 驗證 |
| Outlook | SMTP (smtp.office365.com) | IMAP / POP3 | 支援多層驗證 |
| AWS SES | SMTP API / HTTPS | - | 專業寄信服務 |
| SendGrid / Mailgun | SMTP API | - | 常用於系統郵件、通知信 |
🧠 十、實務設計建議
| 需求 | 建議使用 |
|---|---|
| 系統寄信(驗證信 / 通知) | SMTP + 第三方寄信服務(SendGrid / SES) |
| 收信與多裝置同步 | IMAP |
| 輕量單機應用 / 備份信件 | POP3 |
| 安全寄信 | SMTP + STARTTLS (Port 587) |
| 防止偽造與釣魚 | SPF + DKIM + DMARC |
✅ 十一、一句話總結
-
SMTP:負責「寄信」 📤
-
POP3:負責「下載信件」 📩
-
IMAP:負責「同步信件狀態」 🔄
📬 現代郵件系統一般架構: 用戶端寄信 → SMTP → 郵件伺服器 → IMAP 收信
🚀 若要做系統級通知與郵件驗證, 建議使用 SMTP API(SendGrid, SES, Mailgun) 來實作安全可靠的寄信功能。
尚無其他語言版本