RFC 1939: POP3 — Giao thức Bưu điện Phiên bản 3
Tại Sao Tồn Tại Điều Này
Vào những ngày đầu của internet, hầu hết người dùng không được kết nối vĩnh viễn. Kết nối dial-up chậm và đắt tiền. Kiến trúc email được chia thành hai vai trò:
- MTA (Mail Transfer Agent): Một máy chủ luôn hoạt động nhận và xếp hàng thư qua SMTP.
- MUA (Mail User Agent): Một ứng dụng khách kết nối định kỳ để truy xuất thư tích lũy.
POP3 cầu nối khoảng cách đó. Nó cung cấp một cách đơn giản, không trạng thái để khách hàng xác thực, liệt kê tin nhắn, tải xuống và tùy chọn xóa chúng khỏi máy chủ. Nó được thiết kế để có thể thực hiện bằng mã tối thiểu trên các máy có tài nguyên thấp — và nó đã thành công. POP3 vẫn là một trong những giao thức truy cập thư được hỗ trợ rộng rãi nhất trên thế giới.
Cách Hoạt Động
Kết Nối và Trạng Thái
Một phiên POP3 trải qua ba trạng thái tuần tự:
- AUTHORIZATION: Khách hàng kết nối (cổng 110, hoặc cổng 995 để TLS ngầm) và xác thực bằng tên người dùng và mật khẩu.
- TRANSACTION: Khách hàng phát hành các lệnh để liệt kê, truy xuất và đánh dấu tin nhắn để xóa.
-
UPDATE: Khách hàng gửi
QUIT. Máy chủ thực hiện tất cả các lần xóa đang chờ và đóng kết nối.
Một Phiên POP3 Điển Hình
-- Khách hàng kết nối với cổng 995 (POP3S) -- +OK POP3 server ready USER alice@example.com +OK PASS s3cretP@ss +OK Logged in. -- Bây giờ ở trạng thái TRANSACTION -- STAT +OK 3 12400 ← 3 tin nhắn, tổng cộng 12400 octets LIST +OK 3 messages 1 4200 2 3800 3 4400 . RETR 1 ← tải xuống tin nhắn 1 +OK 4200 octets (nội dung tin nhắn RFC 5322 đầy đủ...) . DELE 1 ← đánh dấu tin nhắn 1 để xóa +OK Deleted. QUIT +OK Bye. ← máy chủ xóa tin nhắn 1 bây giờ
Các Lệnh POP3 Cốt Lõi
| Lệnh | Trạng Thái | Mục Đích |
|---|---|---|
USER / PASS
|
AUTH | Xác thực bằng tên người dùng và mật khẩu |
APOP |
AUTH | Xác thực thách thức-phản hồi (tránh gửi mật khẩu dưới dạng văn bản thuần) |
STAT |
TRANSACTION | Lấy số tin nhắn và kích thước tổng cộng |
LIST |
TRANSACTION | Liệt kê số tin nhắn và kích thước |
RETR |
TRANSACTION | Truy xuất một tin nhắn đầy đủ theo số |
DELE |
TRANSACTION | Đánh dấu một tin nhắn để xóa |
NOOP |
TRANSACTION | Giữ cho phiên hoạt động |
RSET |
TRANSACTION | Bỏ đánh dấu tất cả các tin nhắn được đánh dấu để xóa |
TOP |
TRANSACTION | Truy xuất tiêu đề cộng với n dòng phần thân |
UIDL |
TRANSACTION | Lấy danh sách ID duy nhất (dùng để theo dõi các tin nhắn đã tải xuống) |
QUIT |
Bất Kỳ | Kết thúc phiên; kích hoạt trạng thái UPDATE |
Chi Tiết Kỹ Thuật Chính
Tải Xuống-và-Xóa so với Giữ-trên-Máy-chủ
Mô hình mặc định của POP3 là tải xuống-và-xóa: khách hàng truy xuất mỗi tin nhắn bằng RETR, sau đó đánh dấu nó bằng DELE, và máy chủ xóa nó trên QUIT. Nhiều khách hàng cung cấp một tùy chọn "để lại tin nhắn trên máy chủ", đơn giản là bỏ qua bước DELE. Lệnh UIDL cung cấp các ID duy nhất để khách hàng có thể theo dõi những tin nhắn nào mà nó đã tải xuống mà không cần tải xuống lại.
Khóa
POP3 yêu cầu một khóa độc quyền trên hộp thư. Chỉ một khách hàng có thể truy cập một hộp thư POP3 tại một thời điểm. Nếu một khách hàng thứ hai cố gắng kết nối trong khi khách hàng thứ nhất ở trạng thái TRANSACTION, nó sẽ bị từ chối. Điều này làm cho POP3 không phù hợp để truy cập đa thiết bị.
Không Thư Mục, Không Cờ, Không Tìm Kiếm
POP3 xem một hộp thư dưới dạng danh sách phẳng các tin nhắn được đánh số. Không có khái niệm về thư mục, nhãn, cờ đã đọc/chưa đọc hoặc tìm kiếm phía máy chủ. Máy chủ chỉ là một kho lưu trữ tin nhắn; tất cả tổ chức xảy ra trên khách hàng. Đây là sự khác biệt cơ bản giữa POP3 và IMAP.
Bảo Mật: APOP và TLS
Xác thực USER/PASS ban đầu gửi mật khẩu dưới dạng văn bản thuần. APOP sử dụng một thách thức MD5 chia sẻ bí mật để tránh điều này, nhưng MD5 hiện được coi là bị phá vỡ mã hóa. POP3 hiện đại phải luôn chạy trên TLS ngầm trên cổng 995 (theo RFC 8314) hoặc, như một sự cố dự phòng, sử dụng STLS (tương đương POP3 của STARTTLS).
Những Sai Lầm Phổ Biến
- Sử dụng POP3 với nhiều thiết bị. Vì POP3 tải xuống và xóa, điện thoại và máy tính xách tay sẽ tranh giành tin nhắn. Chỉ một thiết bị thấy mỗi tin nhắn. Hãy sử dụng IMAP hoặc JMAP thay vào đó.
- Chạy POP3 trên cổng 110 mà không có TLS. Thông tin xác thực và nội dung tin nhắn đi qua mạng dưới dạng văn bản thuần. Luôn sử dụng cổng 995 với TLS ngầm.
- Dựa vào APOP để bảo mật. APOP sử dụng MD5, dễ bị tấn công va chạm và tiền hình ảnh. TLS là cách bảo vệ duy nhất đáng tin cậy.
- Không sử dụng UIDL cho chế độ "để lại trên máy chủ". Không có UIDL, một khách hàng ở chế độ "để lại trên máy chủ" không có cách đáng tin cậy để biết những tin nhắn nào mà nó đã tải xuống, dẫn đến sự trùng lặp sau khi kết nối lại.
-
Ngắt kết nối mà không gửi QUIT. Nếu khách hàng bỏ kết nối mà không gửi
QUIT, máy chủ sẽ không nhập trạng thái UPDATE. Các lệnhDELEđang chờ xử lý bị loại bỏ — các tin nhắn được cho là đã xóa sẽ xuất hiện lại. - Mong đợi các tính năng phía máy chủ. POP3 không có tìm kiếm, không có cờ, không có thư mục. Nếu ứng dụng của bạn cần bất kỳ tính năng nào trong số này, POP3 là giao thức sai.
Tác Động Đến Khả Năng Gửi
- POP3 là giao thức truy xuất, không phải giao thức gửi. Nó không có tác động trực tiếp đến việc thư gửi đi của bạn có đến hộp thư đến hay không. Tuy nhiên, nó ảnh hưởng đến cách những người nhận tương tác với thư bạn gửi cho họ.
- Biên lai đọc và theo dõi. Khách hàng POP3 tải xuống tin nhắn để đọc ngoại tuyến. Các pixel theo dõi mở có thể không kích hoạt cho đến khi người dùng mở tin nhắn trong ứng dụng khách cục bộ của họ, nếu họ tải các hình ảnh từ xa.
-
Xử lý trả lại. Nếu bạn sử dụng POP3 để thăm dò một hộp thư trả lại, hãy sử dụng
UIDLđể tránh xử lý lại các trả lại. Đảm bảo khoảng thời gian thăm dò của bạn đủ thường xuyên để xử lý các trả lại kịp thời cho vệ sinh danh sách. - Vị trí hộp thư đến. Những người nhận sử dụng khách hàng POP3 nhận tất cả tin nhắn vào một hộp thư đến phẳng mà không có lọc thư rác phía máy chủ (trừ khi máy chủ lọc trước khi truy cập POP3). Điều này có thể có nghĩa là khả năng hiển thị cao hơn cho các tin nhắn của bạn — hoặc nhiều phàn nàn hơn nếu người nhận cảm thấy bị choáng ngợp.