Điểm đặc biệt của BlackBerry API là cung cấp đầy đủ các lớp cần thiết để quản lý thông tin của một cấu trúc Mime, ... Các lớp này được chứa trong gói thư viện
net.rim.device.api.mime.* và net.rim.blackberry.api.mail.*
.
3.2.1 Gói net.rim.device.api.mime.*:
Multipurpose Internet Mail Exntensions(MIME) là một chuẩn được định nghĩa để lưu trữ e-mail, hỗ trợ các loại định dạng khác nhau như văn bản, hình ảnh, âm thanh, video.v.v.
Vì mail gởi qua các server thường được mã hóa và đóng gói. Nhóm lớp mime cung cấp các lớp lưu trữ dữ liệu giao tiếp giữa mail server và thiết bị để lưu trữ dữ liệu mail đã được đóng gói. Bao gồm MIMEInputStream để đọc dữ liệu đã được mã
Chương 3: Lập trình với Blackberry API
35
hóa theo chuẩn MIME26. Và MIMEOutputStream dùng để ghi dữ liệu mã hóa theo chuẩn MIME:
o MimeInputStream:
Lớp này kế thừa từ lớp InputStream, quản lý việc nhận về một cấu trúc MIME.
o MimeOutputStream:
Lớp này kế thừa từ lớp OutputStream, quản lý việc xuất ra một cấu trúc MIME.
3.2.2 Gói net.rim.blackberry.api.mail.*:
Gói net.rim.blackberry.api.mail dùng để biểu diễn một E-mail
message trong ứng dụng message của thiết bị BlackBerry.
Ngoài ra lớp này còn hỗ trợ người phát triển ứng dụng đóng gói, nhận và gởi một E-mail message thông qua ứng dụng message có sẵn.
26
Chương 4: Các giao thức trong gởi nhận E-mail
36
PHẦN 2: CƠ SỞ LÝ THUYẾT
Chương 4: Các giao thức trong gửi nhận e-mail 4.1 Giao thức SMTP27:
4.1.1 Lịch sử:
Tiền thân của SMTP là giao thức MTP (Mail Transfer Protocol) được định nghĩa trong RFC 772 vào tháng 9 năm 1980. Giao thức này diễn tả một tập hợp các lệnh và thủ tục để 2 thiết bị kết nối với nhau qua TCP và trao đổi e-mail với nhau. Đến tháng 5 năm 1981, giao thức MTP được cập nhật trong RFC 780.
Do tầm quan trọng và thực tế của việc trao đổi thư điện tử, đến tháng 11 năm 1981, một giao thức mới được thiết kế riêng biệt cho việc gửi thư điện tử ra đời, đó là giao thức SMTP (Simple Mail Transfer Protocol). Ban đầu giao thức SMTP chỉ truyền những thư dạng văn bản theo chuẩn ARPAnet (định nghĩa trong RFC 733).
Đến tháng 8 năm 1982, 2 tài liệu RFC 821 và 822 được công bố, phát triển các tính năng cho giao thức SMTP.
Từ đó đến nay, mặc dù có nhiều tài liệu mới nhưng chủ yếu là bổ sung vào tài liệu chuẩn RFC 821 và RFC 822. Có thể ghi nhận một số thay đổi đáng chú ý của giao thức SMTP, đó là RFC 1425 được công bố tháng 2 năm 1993.
RFC 1425 bổ sung khả năng mở rộng cho SMTP và có tên là ESMTP (SMTP Service Extensions hoặc Extended SMTP hoặc Enhenced SMTP).
RFC 1425 tiếp tục được sửa thành RFC 1651 (6/1994) và RFC 1869 (11/1995). Các bổ sung về trao đổi kênh liên lạc và kích thước thư được định nghĩa trong những lần sửa đổi này.
Một cột mốc đáng ghi nhận trong quá trình phát triển của giao thức SMTP là 2 tài liệu RFC 2821 và RFC 2822 được công bố tháng 4 năm 2001. RFC 2821 kết hợp chặt chẽ những đặc điểm của giao thức trong RFC 821 và RFC 1869, và hiện là tài liệu chuẩn của giao thức SMTP. Các tài liệu khác tiếp theo hỗ trợ các cơ chế truyền an toàn, truyền tập tin kích thước lớn, ....
4.1.2 Tổng quan:
SMTP là giao thức truyền thư tín đơn giản, một chuẩn truyền thư điện tử qua mạng Internet dựa trên văn bản (text-based). Bên gửi và bên nhận lần lượt dùng các chuỗi lệnh và các thông tin cần thiết trao đổi qua một kênh truyền tin cậy (reliable
27
Chương 4: Các giao thức trong gởi nhận E-mail
37
channel) thông thường là TCP. SMTP sử dụng cổng 25 cho kết nối thông thường và 465 (hoặc 587) cho các kết nối an toàn sử dụng SSL hoặc TLS.
Một phiên (session) trao đổi SMTP được bắt đầu từ khi client kết nối thành công đến server và client thực hiện thành công lệnh HELO. Sau khi thiết lập kết nối, server sẵn sàng lắng nghe các lệnh từ client gửi tới. Client nên gửi lời chào HELO đến server, server sẽ đáp lại bằng mã 250. Nếu sử dụng EHLO thay thế thì kết quả trả về là một danh sách các khả năng mà server hỗ trợ. Sau câu lệnh trên, một phiên
(session) trao đổi giữa client và server được bắt đầu.
Hình 4.1- Quá trình trao đổi dữ liệu trong giao thức SMTP (Nguồn: www.TCPIPGuide.com)
Trong một phiên SMTP có thể có nhiều giao tác (transaction) giữa client và server. Mỗi giao tác bao gồm 3 bước theo thứ tự sau:
Khởi tạo giao tác và định danh người gửi: SMTP bên gửi báo cho SMTP bên nhận biết bên gửi muốn gửi thư và cung cấp địa chỉ e-mail cho bên nhận. Định danh người nhận: SMTP bên gửi cung cấp danh sách các địa chỉ e-mail
của người nhận cho SMTP bên nhận.
Truyền nội dung thư: SMTP bên gửi truyền nội dung thư (theo đặc tả RFC 822) cho SMTP bên nhận.
Chương 4: Các giao thức trong gởi nhận E-mail
38
Hình 4.2 - Giao tác giữa Client và Server trong giao thức SMTP
(Nguồn: www.TCPIPGuide.com)
Một số đặc điểm và sự mở rộng của giao thức SMTP:
Ngoài chức năng cơ bản là gửi thư, giao thức SMTP còn được sử dụng vào một số mục đích bên phía máy chủ như :
Chuyển tiếp thư (Mail relaying).
Chuyển thư (Mail forwarding): Nhận thư và chuyển tới một địa chỉ thích hợp. Cổng thư (Mail gatewaying): Máy chủ SMTP có thể được cấu hình thành một cổng thư có nhiệm vụ chuyển đổi e-mail TCP/IP thành một dạng tương thích với các hệ thống thư điện tử khác và ngược lại.
Kiểm tra địa chỉ (Address Debugging): lệnh VRFY của giao thức SMTP có thể dùng để kiểm tra tính xác thực của một địa chỉ mail mà không cần phải gửi mail đến địa chỉ đó.
Mở danh sách địa chỉ (Mailing list expansion): lệnh EXPN trong giao thức SMTP có thể được dùng để quyết định xem các địa chỉ mail có gắn với danh sách các địa chỉ mail không.
Các định nghĩa mở rộng của SMTP: khi sử dụng ESMTP với lệnh EHLO, kết quả trả về từ server có thể bao gồm các khả năng mở rộng sau:
Từ khóa Ý nghĩa Tài liệu Miêu tả
8BITMIME Hỗ trợ dạng MIME 8-bit.
RFC 1652
Định nghĩa hỗ trợ 8- bit trong chuyển đổi
Chương 4: Các giao thức trong gởi nhận E-mail
39
nội dung của thư có dạng MIME. AUTH Cấp chứng thực RFC 2554 Cơ chế chứng thực được sử dụng để tăng cường tính an toàn. DSN Thông tin trạng thái chuyển thư RFC 1891 Cho phép SMTP bên gửi yêu cầu SMTP bên nhận cung cấp thông tin khi xảy ra lỗi trong quá trình chuyển thư cho bên nhận. ENHANCEDSTATUSCODES PIPELINING Nhiều dòng lệnh RFC 2920
Cho phép gửi nhiều lệnh cùng lúc từ bên gửi sang bên nhận thay vì gửi từng lệnh.
SIZE Khai báo kích
thước thư RFC 1870 SMTP bên gửi có thể báo cho SMTP bên nhận biết kích thước thư sẽ gửi và bên nhận có thể quyết định nhận hay không.
STARTTLS Khởi tạo TLS RFC 3207
Bảng 4.1 Các định nghĩa mở rộng của SMTP
Vấn đề an toàn trong trong SMTP:
Một số cơ chế an toàn được sử dụng trong giao thức SMTP: Kiểm tra địa chỉ IP của thiết bị muốn kết nối tới SMTP server.
Hạn chế lệnh được sử dụng, chẳng hạn một số lệnh chỉ được thực hiện sau khi đã được chứng thực hoặc kênh truyền đã được thiết lập an toàn bằng SSL hoặc TLS.
Hạn chế việc sử dụng lệnh EXPN để ngăn chặn các người dùng chưa được chứng thực vẫn truy cập được vào server.
Giới hạn kích thước thư và số lượng thư được gửi trong một khoảng thời gian.
4.1.3 Các lệnh hỗ trợ:
Lệnh HELO và EHLO: - Cú pháp:
Chương 4: Các giao thức trong gởi nhận E-mail
40
HELO <SP> <domain> <CRLF>
Hoặc EHLO <SP> <domain> <CRLF>
- Tham số: domain: tên miền bên gửi
- Ý nghĩa: Khởi tạo quá trình trao đổi giữa người dùng và server. Giúp cho server biết được mình đang giao tiếp với ai. Kết quả trả về thường nhiều dòng ứng với các khả năng mà server hỗ trợ bao gồm các cơ chế chứng thực, thiết lập kết nối an toàn, ... .Kết thúc lệnh cả client và server đều ở trạng thái khởi tạo. Hiện nay, hầu hết các máy chủ đều hỗ trợ ESMTP, do đó ta nên thử gửi lệnh EHLO tới máy chủ trước thay vì lệnh HELO. - Ví dụ:
HELO mydomain.com
Lệnh MAIL: - Cú pháp:
MAIL <SP> FROM:<reverse-path> <CRLF>
- Tham số: reverse-path: chứa tên hộp thư người gửi
- Ý nghĩa: Lệnh MAIL sẽ khởi tạo một giao tác (transaction) - SMTP bên gửi báo cho SMTP bên nhận biết bên gửi muốn gửi thư và cung cấp địa chỉ e- mail cho bên nhận.
- Ví dụ:
MAIL FROM: <mymail@mydomain.com>.
Lệnh RCPT: - Cú pháp:
RCPT <SP> TO:<forward-path> <CRLF>
- Tham số: forward-path: chứa tên hộp thư bên nhận.
- Ý nghĩa: SMTP bên gửi cung cấp một địa chỉ e-mail của người nhận cho SMTP bên nhận. - Ví dụ: RCPT TO: <yourmail@yourdomain.com> Lệnh DATA: - Cú pháp: DATA <CRLF> - Tham số: không có
- Ý nghĩa: Cho biết bạn đang gởi nội dung của mail. Server sẽ đáp lại mã 354 báo cho client biết server bắt đầu nhận nội dung. Client sau khi nhận câu trả lời từ server sẽ tiến hành gửi nội dung thư và bắt buộc phải kết thúc bằng 5 ký tự “\r\n.\r\n”.
Lệnh RSET: - Cú pháp:
Chương 4: Các giao thức trong gởi nhận E-mail
41 - Tham số: không có
- Ý nghĩa: Hủy bỏ giao tiếp đang thực hiện(gồm MAIL, RCPT, DATA) Lệnh VRFY:
- Cú pháp:
VRFY <SP> <string> <CRLF>
- Tham số: string: địa chỉ mail cần kiểm tra.
- Ý nghĩa: Yêu cầu SMTP bên nhận kiểm tra tính xác thực của hộp thư được chỉ định - Ví dụ: VRFY abc@domail.com Lệnh EXPN: - Cú pháp: EXPN <SP> <string> <CRLF>
- Tham số: string: tên danh sách địa chỉ.
- Ý nghĩa: Yêu cầu máy chủ SMTP xác nhận tên danh sách địa chỉ và trả về danh sách các địa chỉ chứa trong đó.
Lệnh HELP: - Cú pháp:
HELP [<SP> <string>] <CRLF>
- Tham số: string: tên của lệnh
- Ý nghĩa: Yêu cầu máy chủ SMTP cung cấp thông tin hướng dẫn sử dụng lệnh - Ví dụ: HELP DATA Lệnh NOOP: - Cú pháp: NOOP <CRLF> - Tham số: không có
- Ý nghĩa: Lệnh NOOP không có chức năng đặc biệt nào ngoài việc dùng để kiểm tra kết nối.
Lệnh QUIT: - Cú pháp:
QUIT<CRLF>
- Tham số: không có
- Ý nghĩa: Kết thúc phiên làm việc giữa client và server. Lệnh TURN:
Đã bị loại bỏ từ RFC 2821
Lệnh SOML:
Đã bị loại bỏ từ RFC 2821
Chương 4: Các giao thức trong gởi nhận E-mail 42 Đã bị loại bỏ từ RFC 2821 Lệnh SEND: Đã bị loại bỏ từ RFC 2821 4.1.4 Reply Codes:
Mã Chuỗi thông tin Ý nghĩa 211 System status or system help
ready.
214 <Help message...> Dùng trong kết quả trả về của lệnh HELP.
220 <servername> Service ready. Lời chào từ server khi kết nối TCP được thiết lập.
221 <servername> closing transaction channel.
Lời chào tạm biệt của lệnh QUIT.
250 Cho biết lệnh được thực hiện thảnh
công. 252 Không thể VRFY người dùng
nhưng thư được chấp nhận và cố gắng gửi đi.
354 Bắt đầu nhận nội dung thư, kết thúc bằng <CRLF>.<CRLF>
Trả lời lại lệnh DATA. 421 <servername> dịch vụ không tồn
tại, đóng kênh giao tiếp.
Gửi khi SMTP bên nhận đột ngột ngắt kết nối.
450 Hành động được yêu cầu trên hộp thư không được thực hiện.
Gửi khi hộp thư đang bị truy xuất bởi một tiến trình khác.
451 Xảy ra lỗi khi máy chủ xử lí
500 Sai cú pháp, không nhận ra lệnh 501 Sai cú pháp do tham số không
hợp lệ.
502 Lệnh không được máy chủ hỗ trợ
Lệnh hợp lệ nhưng máy chủ không hỗ trợ.
503 Thứ tự lệnh không hợp lệ Lệnh được gửi đi không theo đúng thứ tự, ví dụ gửi lệnh DATA trước khi gửi lệnh MAIL.
504 Tham số của lệnh không được hỗ trợ.
Chương 4: Các giao thức trong gởi nhận E-mail
43
4.2 Giao thức POP328:
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