4.2.1 Lịch sử:
Năm 1984, RFC 918 được công bố định nghĩa giao thức POP (Post Office Protocol) – đó là một tập các hành động gồm có người dùng cung cấp thông tin username/password để server chứng thực và tải nội dung của hòm thư về máy.
Đến tháng 2 năm 1985, RFC 937 định nghĩa POP phiên bản 2 bổ sung thêm tập lệnh và cho phép tải từng thư thay vì cả hòm thư. Tuy nhiên POP2 vẫn còn tương đối đơn giản và POP3 ra đời năm 1988 trong RFC 1081. POP3 tăng cường khả năng truy xuất và nhận mail cho các thiết bị.
Hiện nay POP3 đang được sử dụng và ngầm được hiểu đến khi nói đến giao thức POP.
4.2.2 Tổng quan:
1. Định nghĩa:
POP là giao thức là tầng application, sử dụng ở mail client cho phép client nhận email từ server thông qua kết nối TCP/IP.
2. Đặc điểm:
- Sử dụng kết nối tin cậy TCP/IP.
- Hoạt động ở cổng 110 trong chế độ thường và cổng 995 ở chế độ sự dụng SSL(TLS).
- Chỉ hoạt động ở chế độ offline.
- Chỉ hỗ trợ download mail và xóa mail. 3. Cơ chế hoạt động: Mô hình hoạt động của POP3:
28
Chương 4: Các giao thức trong gởi nhận E-mail
44
Hình 4.3 - Mô hình hoạt động của POP3
(Nguồn: www.TCPIPGuide.com)
Trạng thái chứng thực (Authorization State):
Server gửi lời chào tới client cho biết đã sẵn sàng nhận lệnh. Client cung cấp thông tin chứng thực để truy cập vào hòm thư. Phương pháp thường sử dụng để chứng thực bằng POP3 là dùng username / password để đăng nhập. Đầu tiên client phát sinh lệnh USER kèm theo tham số tên của hòm thư, server sẽ đáp lại ngay lập tức. Sau đó client phát sinh lệnh PASS kèm theo tham số password. Nếu đăng nhập thành công, server sẽ thông báo và kèm theo số lượng thư có trong hòm thư. Client chuyển sang trạng thái giao tác.
Hình 4.4 - Trạng thái chứng thực của POP3
Chương 4: Các giao thức trong gởi nhận E-mail
45
Ngoài ra POP3 còn định nghĩa các cơ chế chứng thực khác như dùng lệnh APOP, AUTH.
Trạng thái giao tác (Transaction State):
Client có thể lấy thư và xóa thư trong hòm thư.
Client có thể thao tác trên hòm thư qua các lệnh : STAT, LIST, RETR, DELE, NOOP, RSET, TOP, UIDL.
Hình 4.5 - Trạng thái giao tác của POP3
(Nguồn: www.TCPIPGuide.com)
Trạng thái cập nhật (Update State):
Khi client đã kết thúc giao tác bằng lệnh QUIT, server sẽ xóa các thư được đánh dấu đã xóa và đóng kết nối với client.
4.3.3 Các lệnh hỗ trợ:
Lệnh USER:
- Cú pháp:
USER<SP> username <CRLF>
- Tham số: username: tên truy cập của người dùng (tên địa chỉ mail, cò thể không cần phần thông tin domain).
- Ý nghĩa:
Chương 4: Các giao thức trong gởi nhận E-mail
46
Câu lệnh này là câu lệnh đầu tiên sau khi thực hiện việc connect với server
Lệnh PASS:
- Cú pháp:
PASS<SP>password<CRLF>
- Tham số: password: mật khẩu ứng với username. - Ý nghĩa:
Câu lệnh PASS cung cấp một mật khẩu dạng plaintext để chứng thực User đã điền ở phía trên.
Thực hiện sau câu lệnh USER, câu lệnh này để điền password khi đăng nhập vào mail, với pwd là chuỗi password
Lệnh STAT:
- Cú pháp:
STAT<CRLF>
- Tham số: không có
- Ý nghĩa: Cho biết số lượng mail và dung lượng tổng cộng của các mail đó trong hòm thư. Nếu câu lệnh thành công thì nó sẽ trả về dạng +OK #msgs #bytes. Trong đó:
o #msgs: số lượng mail có trong hòm mail.
o #bytes: tổng dung lượng(tính theo đơn vị byte) của các mail trong hòm thư đó.
Lệnh LIST:
- Cú pháp:
LIST<CRLF>
- Tham số: không có
- Ý nghĩa: Liệt kê số lượng mail và dung lượng của từng mail, mỗi mail liệt kê một dòng. - Ví dụ: +OK 3 messages 1 1205 2 305 3 344400
Ở ví dụ trên hòm mail có 3 mail, được liệt kê ở dưới.
Lệnh LAST:
- Cú pháp:
LAST<CRLF>
Chương 4: Các giao thức trong gởi nhận E-mail
47
- Ý nghĩa: Trả về số thứ tự của mail được đọc hoặc xóa cuối cùng
Lệnh RETR:
- Cú pháp:
RETR<SP>msg#<CRLF>
- Tham số: msg#: số thứ tự của mail.
- Ý nghĩa: Nhận về mail thứ msg# trong hòm thư, ví dụ khi thực hiện câu lệnh RETR 3, hòm thư sẽ trả về nội dung mail thứ 3 trong hòm thư.
- Ví dụ:
RETR 3
Lệnh TOP:
- Cú pháp:
TOP<SP>msg#<SP>line#<CRLF>
- Tham số: msg#: số thứ tự của mail; line#: số lượng dòng trong phần thân (không bao gồm phần header) được nhận về, nếu line# bằng 0 thì nhận về chỉ là phần header của message.
- Ý nghĩa: Gởi về nội dung mail thứ msg# gồm phần header và line# dòng đầu trong phần thân của mail đó.
Lưu ý: Không phải server nào cũng hỗ trợ câu lệnh này
- Ví dụ:
TOP 12 0
Lệnh DELE:
- Cú pháp:
DELE<SP>msg#
- Tham số: msg#: số thứ tự của message.
- Ý nghĩa: Đánh dấu là sẽ xóa mail thứ msg# trong hòm thư. Lệnh này chỉ được thực thi thật sự khi lệnh QUIT được thực thi. Nếu kết nối tới server bị ngắt trước khi thực hiện lệnh QUIT. Câu lệnh xóa mail này sẽ không diễn ra.
- Ví dụ: DELE 10 Lệnh RSET: - Cú pháp: RSET<CRLF> - Tham số: không có.
- Ý nghĩa: Câu lệnh này sẽ hủy tất cả những thư bị đánh dấu bởi lệnh DELE. Khi thực hiện lệnh QUIT thì các thư đã được RSET sẽ không bị xóa.
Lệnh APOP:
Chương 4: Các giao thức trong gởi nhận E-mail
48
APOP<SP>username<SP>encryptedKey<CRLF>
- Tham số: username: tên tài khoản mail; encryptedKey: khóa trao đổi được mã hóa. - Ý nghĩa: Cho phép kích hoạt chế độ bảo mật của chứng thực POP3. Khi chế này
được kích hoạt, password sẽ không được gởi dưới dạng text thông thường mà gởi dưới dạng chuỗi đã được mã hóa bằng thuật toán MD5 từ password, process ID và thời gian.
Lệnh QUIT:
- Cú pháp:
QUIT<CRLF>
- Tham số: không có
- Ý nghĩa: Xóa tất cả mail được đánh dấu bằng lệnh DELE. Sau đó ngắt kết nối khỏi server.
4.3 Giao thức IMAP29:
4.3.1 Lịch sử:
Phiên bản chính thức đầu tiên của IMAP là IMAP2 được định nghĩa trong RFC-1064 công bố tháng 6 năm 1988. Sau đó được cập nhật vào tháng 8 năm 1990 nhưng vẫn giữ nguyên tên gọi.
Đến tháng 2 năm 1991, RFC 1203 nâng cấp IMAP lên IMAP3. Tuy nhiên IMAP3 không được mọi người chấp nhận sử dụng rộng rãi.
Tháng 12 năm 1994, IMAP4 ra đời và được định nghĩa trong 2 tài liệu RFC- 1730 và RFC-1731. RFC-1730 miêu tả các nét chính của giao thức IMAP, trong khi RFC-1731 miêu tả chi tiết các cơ chế chứng thực cho IMAP.
IMAP4 sau đó tiếp tục được cập nhật trong RFC-2060 và gần đây nhất là RFC- 3501.
4.3.2 Tổng quan:
1. Định nghĩa:
IMAP là 1 trong 2 giao thức nhận mail. Xét về chức năng thì IMAP giống POP đó là có thể truy cập và thao tác trên hòm thư. Tuy nhiên, IMAP hỗ trợ nhiều lệnh hơn và do đó mạnh mẽ hơn POP.
2. Đặc điểm:
- Sử dụng kết nối tin cậy TCP/IP.
- Hoạt động ở cổng 143 trong chế độ thường và cổng 993 trong chế độ an toàn sử dụng SSL hay TLS.
- Hoạt động ở 3 chế độ: offline, online và disconnected.
29
Chương 4: Các giao thức trong gởi nhận E-mail
49
Offline: Mail được tải về client, mail trên server bị xóa và sau đó kết nối bị ngắt. Mail được đọc, trả lời và thực hiện các hành động khác ở trạng thái offline. Nếu muốn gởi thư phải kết nối lại với server.
Online: Mail cũ vẫn nằm trên server, mọi hành động trên client đều có thực hiện tương đương trên server.
Disconnect: Mail cũ lưu tạm trên Client và làm việc. Và được cập nhật trên server khi có kết nối ở lần kế tiếp.
- IMAP có thể quản lý trạng thái của các message: “Seen”, “Deleted”, “Answered”, ...
- IMAP có thể truy xuất và quản lý nhiều hộp thư (thư mục).
- IMAP hỗ trợ cập nhật và truy xuất hộp thư được chia sẻ. Khi nhiều người đang truy xuất vào hộp thư, những thay đổi về trạng thái của hộp thư sẽ được cập nhật cho tất cả các thành viên.
- IMAP cung cấp giao thức IMSP 30cho phép truy cập thông tin cấu hình cá nhân (ví dụ sổ địa chỉ, ...).
- IMAP tối ưu quá trình nhận mail bằng cách cung cấp các hàm cho phép lấy cấu trúc của message, lấy nội dung từng phần trong message đó. - IMAP cung cấp khả năng tìm kiếm.
3. Cơ chế hoạt động: Mô hình hoạt động của IMAP4:
30
Chương 4: Các giao thức trong gởi nhận E-mail
50
Hình 4.6 - Mô hình hoạt động của IMAP4
(Nguồn: www.TCPIPGuide.com)
Trạng thái chưa được chứng thực (Not Authenticated State):
Client ở trạng thái này sau khi kết nồi với server được thiết lập. Client sẽ sử dụng các lệnh chứng thực để chứng thực bản thân với server và chuyển sang trạng thái đã được tiếp theo.
Trạng thái đã được chứng thực (Authenticated State):
Client lựa chọn hòm thư.
Trạng thái đã chọn hòm thư (Selected State):
Client truy xuất, thao tác trên các thư trong hòm thư đang được chọn. Khi client đóng hòm thư sẽ trở lại trạng thái đã được chứng thực.
Trạng thái đăng xuất (Logout State):
Client có thể phát sinh lệnh Logout ở các trạng thái khác và nhảy vào trạng thái này hoặc do thời gian phiên làm việc đã vượt quá ngưỡng qui định. Server sẽ đáp lại client và đóng kết nối.
Chương 4: Các giao thức trong gởi nhận E-mail
51
4.3.3 Các lệnh hỗ trợ:
IMAP sử dụng các thẻ để đánh dấu các lệnh. Thẻ (tag) là một chuỗi thường bắt đầu bằng 1 kí tự và theo sau là một dãy số có giá trị tăng dần (A0001, A002, ...). Khi server đáp lại bằng một trả lời với thẻ trùng với lệnh cho biết quá trình thực hiện lệnh đó đã kết thúc. Client có thể gửi lệnh tiếp theo. Trả lời từ server có 3 dạng: trả lời với thẻ của lệnh, trả lời không thẻ (bắt đầu bằng dấu *) và trả lời yêu cầu client cung cấp thêm thông tin để thực hiện lệnh (bắt đầu bằng dấu +).
Mã kết quả:
- OK: Thường đi kèm với thẻ của lệnh, cho biết lệnh được thực hiện thành công. Hoặc có thể không kèm theo thẻ trong lời chào từ server khi một phiên làm việc mới bắt đầu.
- NO: Khi đi kèm với thẻ lệnh cho biết lệnh thất bại. Khi không kèm theo thẻ thường cung cấp những cảnh báo.
- BAD: Thông báo lỗi, kèm theo thẻ khi chính lệnh ứng với thẻ đó bị lỗi.
- PREAUTH: Kèm trong thông báo không thẻ gửi tới client cho biết phiên
làm việc không yêu cầu chứng thực.
- BYE: luôn luôn không kèm theo thẻ. Được sử dụng khi server đáp lại lệnh LOGOUT của client hoặc khi kết nối bị đóng.
Mã trả lời:
- ALERT: Chuỗi chứa thông điệp đặc biệt được thể hiện nhằm mục đích nhắc người dùng chú ý về thông điệp.
- BADCHARSET: Giá trị của tham số CHARSET không hợp lệ.
- CAPABILITY: Trả về trong lệnh CAPABILITY
- PARSE: Chuỗi chứa lỗi khi phân tích header của message.
- PERMANENTFLAGS: Chỉ định các cờ cho phép người dùng thay đổi.
- READ-ONLY: Cho biết hộp thư được chọn chỉ cho phép đọc.
- READ-WRITE: Cho biết hộp thư được chọn chỉ cho phép đọc và ghi.
- TRYCREATE: Cố gắng thực hiện lệnh APPEND hoặc COPY trên một
hộp thư không tồn tại.
- UIDNEXT: Chỉ định giá trị UID tiếp theo trong hộp thư.
- UNSEEN: Chỉ định số lượng message đầu tiên không chứa cờ \Seen.
Các lệnh trong IMAP được chia ra thành 4 nhóm dựa vào phạm vi sử dụng: - Các lệnh dùng ở bất kì trạng thái nào:
Chương 4: Các giao thức trong gởi nhận E-mail
52
- Các lệnh ở trạng thái chưa được chứng thực:
LOGIN, AUTHENTICATE, STARTTLS
Các phương pháp chứng thực trong IMAP:
+ Plain Login: Sử dụng lệnh LOGIN với tham số username / password. Thông tin chứng thực ở dạng thuần văn bản không đảm bảo tính an toàn. + TLS Login: Sử dụng lệnh LOGIN để đăng nhập sau khi đã thiết lập một kênh truyền an toàn bằng giao thức TLS (Transport Layer Security). Việc thiết lập kênh truyền này được thực hiện bằng lệnh STARTTLS. + Negotiated Authentication Method: Sử dụng các cơ chế chứng thực khác bằng lệnh AUTHENTICATE. Cơ chế được sử dụng phải được server hỗ trợ trong kết quả trả về của lệnh CAPABILITY. Sau khi chỉ định loại chứng thực, client và server trao đổi thông tin chứng thực dựa theo cơ chế trên.
- Các lệnh ở trạng thái đã được chứng thực:
SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBCRIBE, UNSUBCRIBE, LIST, LSUB, STATUS, APPEND.
- Các lệnh ở trạng thái hòm thư được chọn:
CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, UID, COPY.
Nhóm lệnh dùng ở bất kì trạng thái nào:
Lệnh CAPABILITY:
o Cấu trúc: CAPABILITY<CRLF>
o Tham số: không có
o Trả lời: yêu cầu phải có một trả lời không nhãn CAPABILITY.
o Kết quả: OK: lệnh hoàn thành.
BAD: không nhận ra command hay tham số không hợp lệ
o Ý nghĩa: Yêu cầu server trả về danh sách các khả năng mà nó hỗ trợ. Danh sách này được trả về trong một lời trả lời không thẻ CAPABILITY.
o Ví dụ:
C: abcd CAPABILITY
S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI LOGINDISABLED
Chương 4: Các giao thức trong gởi nhận E-mail
53
Lệnh NOOP:
o Cấu trúc: NOOP<CRLF>
o Tham số: không có
o Trả lời: Không có trả lời nào đặc biệt cho câu lệnh này.
o Kết quả: OK: lệnh hoàn thành.
BAD: không nhận ra command hay tham số không hợp lệ.
o Ý nghĩa:
Lệnh noop luôn luôn thành công. Câu lệnh này không thực hiện hành động nào cả.
Lệnh noop có thể được dùng để reset bộ đếm giờ để tự động logout của server khi không có hành động nào
o Ví dụ:
C: A023 LOGOUT
S: * BYE IMAP4rev1 Server logging out S: A023 OK LOGOUT completed
Lệnh LOGOUT:
o Cấu trúc: LOGOUT<CRLF>
o Tham số: không có
o Trả lời: Phải có câu trả lời BYE(Không có nhãn).
o Kết quả: OK – Logout thành công
BAD – Câu lệnh hoặc tham số sai
o Ý nghĩa: Câu lệnh Logout cho Server biết Client đã thực hiện xong việc kết nối. Server phải gởi một trả lời BYE trước trả lời OK(Có nhãn), sau đó Server đóng kết nối lại.
o Ví dụ:
C: A023 LOGOUT
S: * BYE IMAP4rev1 Server logging out S: A023 OK LOGOUT completed
Nhóm lệnh dùng ở trạng thái chưa được chứng thực:
Lệnh STARTTLS:
o Cấu trúc: STARTTLS<CRLF>
o Tham số: không có
o Trả lời: Không có trả lời nào đặc biệt cho câu lệnh này.
o Kết quả: OK – Câu lệnh thành công, bắt đầu quá trình thương lượng bằng TLS.
BAD – Câu lệnh sai hoặc tham số sai
o Ý nghĩa: Quá trình thương lượng bằng TLS sẽ bắt đầu ngay sau CRLF tại câu trả lời có nhãn OK của server. Không nên đưa ra câu lệnh nào khác trừ khi server đã trả lời quá trình thương lượng bằng TLS hoàn tất.
Chương 4: Các giao thức trong gởi nhận E-mail
54
Server tồn tại dưới dạng không chứng thực, ngay cả khi Client có ủy nhiệm trong quá trình thương lượng TLS.
Client nên xóa tất cả thông tin trước đó về server và thực hiện lại lệnh CAPABILITY. Lúc này, có thể server sẽ hỗ trợ thêm các khả năng mới cho client trong môi trường mạng đã an toàn
o Ví dụ:
C: a001 CAPABILITY
S: * CAPABILITY IMAP4rev1 STARTTLS LOGINDISABLED S: a001 OK CAPABILITY completed
C: a002 STARTTLS
S: a002 OK Begin TLS negotiation now <TLS negotiation, further commands are under [TLS] layer>
C: a003 CAPABILITY
S: * CAPABILITY IMAP4rev1 AUTH=PLAIN S: a003 OK CAPABILITY completed
C: a004 LOGIN joe password S: a004 OK LOGIN completed
Lệnh LOGIN:
o Cấu trúc: LOGIN<SP>username<SP>password<CRLF>
o Tham số: username:tên truy cập; password: mật khẩu truy cập.
o Trả lời: Không có trả lời đặc biệt cho câu lệnh này.