ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
0612022 – LƯƠNG PHAN BÌNH 0612374 – TỐNG PHƯỚC BẢO QUỐC
NGHIÊN CỨU VÀ XÂY DỰNG ỨNG DỤNG GỬI NHẬN E-MAIL TRÊN ĐIỆN THOẠI BLACKBERRY
KHÓA LUẬN CỬ NHÂN CNTT
Giáo viên hướng dẫn: ThS. ĐỖ HOÀNG CƯỜNG
NIÊN KHÓA 2006 – 2010
LỜI CÁM ƠN
Chúng em xin bày tỏ lòng biết ơn chân thành nhất đến Thầy Đỗ Hoàng Cường,
người Thầy đã tận tâm hướng dẫn, giúp đỡ chúng em trong suốt thời gian thực hiện luận văn này.
Chúng con xin gửi tất cả lòng biết ơn sâu sắc và sự kính trọng đến ông bà, cha
mẹ, cùng toàn thể gia đình, những người đã nuôi dạy chúng con trưởng thành đến ngày hôm nay.
Chúng em cũng xin chân thành cảm ơn quý Thầy Cô trong Khoa Công Nghệ Thông Tin, trường Đại Học Khoa Học Tự Nhiên TP.Hồ Chí Minh đã tận tình giảng dạy, hướng dẫn, giúp đỡ và tạo điều kiện cho chúng em thực hiện tốt luận văn này.
Xin chân thành cảm ơn sự giúp đỡ, động viên và chỉ bảo rất nhiệt tình của các
anh chị và tất cả các bạn, những người đã giúp chung tôi có đủ nghị lực và ý chí để hoàn thành luận văn này.
Mặc dù đã cố gắng hết sức, song chắc chắn luận văn không tránh khỏi những
thiếu sót. chúng em rất mong nhận được sự thông cảm và chỉ bảo tận tình của quý Thầy Cô và các bạn.
TP.HCM, 6/2010
Nhóm sinh viên thực hiện
Lương Phan Bình – Tống Phước Bảo Quốc
2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
Trường Đại Học Khoa Học Tự Nhiên, Ngày … Tháng … Năm 2010
Giáo viên hướng dẫn
[Ký tên và ghi rõ họ tên]
3
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
Khóa luận đáp ứng đầy đủ yêu cầu của Khóa luận cử nhân CNTT.
Trường Đại Học Khoa Học Tự Nhiên, Ngày … Tháng … Năm 2010
Giáo viên phản biện
[Ký tên và ghi rõ họ tên]
4
LỜI NÓI ĐẦU
Hiện nay, công nghệ thông tin đang phát triển mạnh mẽ và trở thành một ngành
công nghiệp mũi nhọn ở nhiều quốc gia. Máy tính ngày càng trở nên phổ biến, xuất hiện nhiều trong các gia đình và trở thành một công cụ không thể thiếu của nhiều người. Bên cạnh sự phát triển của ngành công nghệ thông tin không thể không nhắc tới sự phát triển của Internet. Sự xuất hiện và phát triển của Internet đã đáp ứng được nhu cầu con người về giải trí, làm việc, học tập cho đến giao tiếp.v.v.
Internet xuất hiện đã đáp ứng được nhu cầu giao tiếp từ xa của con người, với Internet, con người từ khắp nơi có thể liên kết vào cùng một mạng toàn cầu, giúp cho khả năng giao tiếp từ xa của con người dễ dàng hơn. Trong đó E-mail xuất hiện đã góp phần giúp cho việc giao tiếp từ xa của con người dễ dàng hơn rất nhiều.
Công nghệ E-mail ngày càng phát triển bên cạnh sự phát triển của Internet, rất nhiều E-mail Server đã được lập. Từ E-mail Server cung cấp miễn phí cho người dùng như Yahoo, Gmail, Hotmail.v.v. Cho tới các E-mail Server dùng riêng cho các doanh nghiệp. Nhu cầu về E-mail của con người rất lớn. Việc gởi và nhận E-mail đã trở thành một phần không thể thiếu của rất nhiều người. Nhu cầu gởi và nhận E-mail ở mọi nơi đã trở thành một nhu cầu cấp thiết.
Sự ra đời của các thiết bị di động đã đáp ứng được phần nào nhu cầu của con người, dựa vào đặc tính nhỏ gọn và di động. Thiết bị di động đáp ứng được rất nhiều nhu cầu của con người, trong đó có cả việc gởi và nhận E-mail. Ngày nay, việc gởi và nhận E-mail trên các thiết bị di động đã trở nên phổ biến. Có nhiều giải pháp để thực hiện vấn đề trên như Microsoft phát triển Microsoft Exchange Server để quản lý việc gởi và nhận E-mail, BlackBerry Server quản lý việc gởi và nhận E-mail cho các điện thoại BlackBerry.v.v. Trong đó, BlackBerry đang có ưu thế vượt trội về khả năng gởi và nhận E-mail trên các thiết bị di động của mình. BlackBerry đã và đang dần chiếm lĩnh phần lớn thị phần thiết bị di động thông minh.
Xuất phát từ các lý do trên, chúng em đã thực hiện đề tài “NGHIÊN CỨU VÀ
XÂY DỰNG ỨNG DỤNG GỞI VÀ NHẬN E-MAIL TRÊN ĐIỆN THOẠI BLACKBERRY”. Trong đề tài này, chúng em xây dựng một chương trình giúp việc gởi và nhận E-mail trên điện thoại BlackBerry, cụ thể là các điện thoại BlackBerry sử dụng nền tảng hệ điều hành Research In Motion phiên bản 5.0.
Mục tiêu của đề tài là xây dựng một chương trình giúp cho việc gởi và nhận E- mail thông qua điện thoại BlackBerry sử dụng hệ điều hành Research In Motion phiên bản 5.0. Giúp người dùng gởi và nhận E-mail dễ dàng bằng thiết bị thông minh BlackBerry của hãng Research In Motion. Các nội dung chính của đề tài bao gồm:
Tìm hiểu về các công nghệ gởi và nhận E-mail.
5
Tìm hiểu về hệ điều hành Research In Motion và thiết bị di động
BlackBerry của Research In Motion.
Tìm hiểu một số vấn đề về lập trình trên hệ điều hành Research In Motion. Tìm hiểu lập trình mạng trên BlackBerry. Xây dựng một ứng dụng chạy trên các thiết bị di động BlackBerry của hãng
Research In Motion để gởi và nhận E-mail.
6
MỤC LỤC LỜI CÁM ƠN ................................................................................................................. 2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .............................................................. 3
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ................................................................. 4
LỜI NÓI ĐẦU ................................................................................................................ 5
Tổ chức luận văn ........................................................................................................... 10
Danh sách hình .............................................................................................................. 11
Danh sách bảng ............................................................................................................. 13
PHẦN 1: MÔI TRƯỜNG LẬP TRÌNH BLACKBERRY .............................................. 14
Chương 1: Tổng quan hệ điều hành Research In Motion (RIM) ................................. 14
1.1 Kiến trúc Research In Motion OS:................................................................. 14
1.2 Các phiên bản Research In Motion OS: ......................................................... 19
1.3 Giới thiệu Research In Motion OS 5.0: .......................................................... 21
Chương 2: BlackBerry Mobile ................................................................................... 23
2.1 Tổng quan về BlackBerry Mobile: ................................................................ 23
2.2 Một số vấn đề khi xây dựng ứng dụng trên BlackBerry: ................................ 25
Chương 3: Lập trình với BlackBerry API ................................................................... 31
3.1 BlackBerry API: ............................................................................................ 31
3.2 Mail API trên BlackBerry: ........................................................................... 34
PHẦN 2: CƠ SỞ LÝ THUYẾT ..................................................................................... 36
Chương 4: Các giao thức trong gửi nhận e-mail ......................................................... 36
4.1 Giao thức SMTP: .......................................................................................... 36
4.2 Giao thức POP3: ........................................................................................... 43
4.3 Giao thức IMAP: ......................................................................................... 48
Chương 5: Push e-mail và Pull e-mail ........................................................................ 67
5.1 Push e-mail: .................................................................................................. 67
5.2 Pull e-mail: .................................................................................................... 68
PHẦN 3: XÂY DỰNG ỨNG DỤNG GỬI NHẬN E-MAIL.......................................... 70
Chương 6: Các kĩ thuật xử lí trong ứng dụng .............................................................. 70
6.1 Các giải pháp về vấn đề nhận e-mail: ............................................................ 70
6.2 Các giải pháp về vấn đề gửi e-mail: ............................................................... 72
7
6.3 Các giải pháp về vấn đề giả lập Push e-mail: ................................................. 73
6.4 Các giải pháp về vấn đề xây dựng ứng dụng Push e-mail thực sự: ................. 75
6.5 Các giải pháp về vấn đề lưu trữ thông tin trong ứng dụng:............................. 77
6.6 Các giải pháp về vấn đề tiếng Việt trong ứng dụng:....................................... 81
6.7 Các giải pháp về vấn đề đa ngôn ngữ: ........................................................... 83
Chương 7: Phân tích và thiết kế .................................................................................. 85
7.1 Khảo sát hiện trạng........................................................................................ 85
7.2 Xác định yêu cầu: .......................................................................................... 85
7.3 Xây dựng mô hình use-case:.......................................................................... 86
7.4 Đặc tả use-case: ............................................................................................. 88
7.5 Thiết kế kiến trúc: ....................................................................................... 101
7.6 Thiết kế lớp: ................................................................................................ 103
7.7 Thiết kế xử lí: .............................................................................................. 105
Chương 8: Cài đặt và thử nghiệm ............................................................................. 109
8.1 Môi trường phát triển: ................................................................................. 109
8.2 Cài đặt: ........................................................................................................ 109
8.3 Thử nghiệm: ................................................................................................ 110
Chương 9: Tổng kết ................................................................................................. 113
9.1 Kết luận: ..................................................................................................... 113
9.2 Hướng phát triển: ........................................................................................ 113
PHẦN 4: PHỤ LỤC .................................................................................................... 115
Phụ lục A: Phát triển chương trình BlackBerry ......................................................... 115
A.1 Kiến trúc mạng BlackBerry ............................................................................ 115
A.2 Mô hình của chương trình BlackBerry ............................................................ 116
A.3 Những mở rộng của BlackBerry từ J2ME ....................................................... 116
A.4 Phát triển chương trình bằng JDE ................................................................... 117
A.5 Triển khai chương trình bằng Blackberry Desktop Manager ........................... 119
Phụ lục B: Tống hợp các giao thức mail ................................................................... 121
B.1 Cấu trúc MIME .............................................................................................. 121
B.2 Cấu trúc mã trả về và ý nghĩa các chữ số ........................................................ 128
B.3 Base64 và Quoted-printable Encoding ............................................................ 128
8
B.4 Cách đánh số các thành phần trong MIME ..................................................... 131
Tài liệu tham khảo ....................................................................................................... 133
9
Tổ chức luận văn Nội dung của luận văn được chia làm 3 phần và 9 chương:
PHẦN 1: MÔI TRƯỜNG LẬP TRÌNH BLACKBERRY
Chương 1: Tổng quan hệ điều hành Research In Motion(RIM): Giới thiệu tổng quan về công ty Research In Motion, tổng quan về hệ điều hành Research In Motion, sơ lược các phiên bản hệ điều hành Research In Motion cũng như tổng quan về hệ điều hành Research In Motion phiên bản 5.0
Chương 2:BlackBerry Mobile: Giới thiệu tổng quan về thiết bị di động BlackBerry của công ty Research In Motion. Tổng quan về lịch sử, các dòng máy, đặc điểm của thiết bị di động Blackberry.
Chương 3: Lập trình với Blackberry API: Giới thiệu các vấn đề cơ bản về lập trình trên điện thoại BlackBerry.
PHẦN 2: CƠ SỞ LÝ THUYẾT
Chương 4: Các giao thức trong gởi và nhận E-mail: Giới thiệu và trình bày về các giao thức trong việc gởi và nhận E-mail, bao gồm tổng quan, lịch sử, các câu lệnh sử dụng trong các giao thức đó.
Chương 5: Push E-mail và Pull E-mail: Giới thiệu và phân biệt về Push E-mail và Pull E-mail - 2 cách để lấy E-mail từ E-mail Server.
PHẦN 3: XÂY DỰNG ỨNG DỤNG GỞI VÀ NHẬN E-MAIL
Chương 6: Các kĩ thuật xử lý trong ứng dụng: Các kĩ thuật và giải pháp để xử lý và giải quyết các vấn đề đặt ra trong quá trình xây dựng ứng dụng gởi và nhận E-mail trên Blackberry.
Chương 7: Phân tích và thiết kế: Phân tích, thiết kế các chức năng của chương trình, thiệt kế lớp, thiết kế màn hình, thiết kế lưu đồ hoạt động và trình bày một số vấn đề quan trọng khác liên quan tới việc xây dựng ứng dụng.
Chương 8: Cài đặt và thử nghiệm: Giới thiệu môi trường phát triển và cài đặt ứng dụng, thử nghiệm ứng dụng trên môi trường máy ảo và trong thực tế.
Chương 9: Tổng kết: Trình bày những kết quả đạt được, hạn chế, những vấn đề tồn tại, hướng phát triển trong tương lai.
10
Danh sách hình Hình 1.1 - Cấu trúc mạng của Blackberry ............................................................ 15
Hình 1.2 - Trackwheel trên máy BlackBerry 8700 ................................................ 16
Hình 1.3 - Trackball trên điện thoại BlackBerry Pearl 8100 ................................. 16
Hình 1.4 - Trackpad trên điện thoại Blackberry Bold 9700 ................................... 17
Hình 1.5 - Touchscreen trên điện thoại Blackberry Storm 9500 ............................ 17
Hình 1.6 - Bàn phím QWERTY trên máy BlackBerry Curve 8900 ......................... 18
Hình 1.7 - Bàn phím AZERTY Trên máy BlackBerry Curve 8900.......................... 18
Hình 1.8 - Bàn phím SureType trên điện thoại BlackBerry 8100 ........................... 19
Hình 1.9 - Bàn phím ảo SureType trong máy Blackberry 8550 ............................. 19
Hình 1.10 - Giao diện Research In Motion OS 5.0 ................................................ 22
Hình 2.1 - Chu kỳ sống của chương trình BlackBerry ........................................... 26
Hình 2.2 - Các công cụ lập trình MDS trên BlackBerry ........................................ 27
Hình 2.3 - Máy ảo 9530 của BlackBerry ............................................................... 28
Hình 2.4 – Sơ đồ biểu diễn mới quan hệ giữa các lớp Connection ........................ 32
Hình 4.1- Quá trình trao đổi dữ liệu trong giao thức SMTP ................................ 36
Hình 4.2 - Giao tác giữa Client và Server trong giao thức SMTP ......................... 36
Hình 4.1- Quá trình trao đổi dữ liệu trong giao thức SMTP ................................ 36
Hình 4.3 - Mô hình hoạt động của POP3 ............................................................. 43
Hình 4.4 - Trạng thái chứng thực của POP3 ........................................................ 43
Hình 4.5 - Trạng thái giao tác của POP3 ............................................................. 44
Hình 4.6 - Mô hình hoạt động của IMAP4 ........................................................... 49
Hình 5.1 - Mô hình BIS của Research In Motion................................................... 66
Hình 5.2 - Microsoft Exchange 1.0 ....................................................................... 67
Hình 6.1 - Quá trình chuyển đổi mẫu E-mail khi gởi mail tới một người dùng ...... 71
Hình 6.2 - Quá trình tự động nhận E-mail của chương trình ................................ 72
11
Hình 6.3- Mô hình hệ thống Push E-mail .............................................................. 74
Hình 6.4 - Sơ đồ quản lý Persistent Data trong máy BlackBerry........................... 77
Hình 6.5 - Cấu trúc lưu trữ danh sách các cấu hình E-mail .................................. 78
Hình 7.1 - Sơ đồ use-case ứng dụng ..................................................................... 84
Hình 7.2 – Mô hình hoạt động của ứng dụng ........................................................ 99
Hình 7.3 – Kiến trúc thành phần ứng dụng phía Client ......................................... 100
Hình 7.4 – Các lớp quản lý màn hình ................................................................... 101
Hình 7.5 – Các thành phần lưu trữ và xử lý Message ............................................ 101
Hình 7.6 – Sơ đồ các lớp quản lý E-mail............................................................... 102
Hình 7.7 – Thành phần các lớp quản lý cấu hình và lưu trữ.................................. 102
Hình 7.8 – Quá trình nhận E-mail bằng giao thức IMAP ...................................... 103
Hình 7.9 - Quá trình nhận E-mail bằng giao thức POP ....................................... 103
Hình 7.10 – Xử lý và hiển thị nội dung E-mail ...................................................... 104
Hình 7.11 – Xử lý Attachment trong E-mail .......................................................... 104
Hình 7.12 – Đóng gói và gởi E-mail ..................................................................... 105
Hình 7.13 - Các trạng thái chuyển đổi của chương trình ...................................... 105
Hình 8.1 – Giao diện BlackBerry Desktop Manager ............................................. 107
Hình 8.2 – Danh sách chương trình trong thiết bị ................................................. 107
Hình A.1 - Kiến trúc mạng của BlackBerry ........................................................... 111
Hình A.2 - Cài đặt để kết nối BES ......................................................................... 112
Hình A.3 - Tạo Workspace để quản lý công việc ................................................... 113
Hình A.4 - Tạo chương trình mới .......................................................................... 113
Hình A.5 - Thêm một tập tin mới vào chương trình ............................................... 114
Hình A.6 - đưa một tập tin vào chương trình ........................................................ 114
12
Danh sách bảng Bảng 1.1 Các phiên bản hệ điều hành Research In Motion ................................... 21
Bảng 2.1 - Các gói API cần phải ký trước khi sử dụng .......................................... 30
Bảng 4.1 Các định nghĩa mở rộng của SMTP ....................................................... 38
Bảng 4.2 các câu lệnh trả về trong SMTP ............................................................. 41
Bảng 6.1 - Các ký tự Unicode tổ hợp .................................................................... 81
Bảng 7.1 - Các yêu cầu của chương trình ............................................................. 84
Bảng 7.2 – Danh sách các actor ........................................................................... 84
Bảng 7.3 – Danh sách các use-case ...................................................................... 85
Bảng 8.1 - Kết quả thử nghiệm trên máy ảo của chương trình .............................. 86
Bảng A.1 - Chương trình HelloWorld .................................................................. 115
Bảng A.2 - cấu trúc một tập tin .alx ..................................................................... 116
Bảng B.1 – Ví dụ về tập tin MIME ........................................................................ 119
Bảng B.2 - Chữ số “x” ......................................................................................... 124
Bảng B.3 – Chữ số “y” ......................................................................................... 124
Bảng B.4 – Bảng mã chuyển đổi ........................................................................... 126
Bảng B.5 – Ví dụ về chuyển đổi mã ....................................................................... 126
Bảng B.6 – Cách đánh số các thành phần trong MIME ........................................ 127
13
Chương 1: Tổng quan hệ điều hành Research In Motion
PHẦN 1: MÔI TRƯỜNG LẬP TRÌNH BLACKBERRY
Chương 1: Tổng quan hệ điều hành Research In Motion (RIM)
1.1 Kiến trúc Research In Motion OS:
1.1.1 Giới thiệu Research In Motion OS:
Hệ điều hành Research In Motion(RIM OS) được phát triển bởi công ty
Research In Motion, được sử dụng hầu hết cho dòng điện thoại thông minh BlackBerry của hãng này.
Sơ lược về hệ điều hành Research In Motion:
Hệ điều hành RIM lập trình trên ngôn ngữ C++. Ngôn ngữ lập trình: Sử dụng ngôn ngữ Java và BlackBerry API. Kernel: Sử dụng Kernel Java. Bản quyền sử dụng: Research In Motion độc quyền phân phối và phát triển. Ngôn ngữ hỗ trợ: US English, UK English, French, Spanish, European
Portuguese, Brazilian Portuguese, Basque, Catalan, Galician, Italian, German, Dutch, Russian, Polish, Czech, Hungarian, Turkish, Arabic, Hebrew, Indonesian, Thai, Japanese, Chinese (Traditional), Chinese (Simplified), Korean.
Hệ điều hành BlackBerry là một hệ điều hành đa nhiệm, sử dụng cách thức dẫn nhập dữ liệu thông qua bánh xe di chuyển(Trackwheel), viên bi di chuyển(Trackball) hay bàn cảm ứng(Trackpad), màn hình cảm ứng(Touchscreen). Hệ điều hành hỗ trợ các thông tin thiết bị di động chuẩn MIDP 1.0 và giao thức không dây chuẩn WAP 1.2. Hỗ trợ trình duyệt web WAP và các thông tin như lịch, công việc, địa chỉ, E-mail và chú thích như một số điện thoại thông minh khác. Các điện thoại OS 4.0 trở lên hỗ trợ MIDP 2.0.
Các chức năng này được thực hiện bởi phần mềm BES1, phần mềm này là một
phần của hệ điều hành. Một phiên bản cải tiến của BES là BIS2. Nó cho phép người dùng truy cập Internet. Ngoài ra, người dùng còn có thể sử dụng các giao thức POP33, IMAP4 và truy cập Outlook E-mail mà không cần truy cập thông qua BES khi sử dụng BIS. BIS là một dịch vụ được điều hành bởi RIM, được cung cấp thông qua các nhà
1 BlackBerry Enterprise Server 2 BlackBerry Internet Service 3 Post Office Protocol 4 Internet Message Access Protocol
14
Chương 1: Tổng quan hệ điều hành Research In Motion
cung cấp dịch vụ di động. Các phiên bản cập nhật có thể được tải thông qua dịch vụ tải OTASL5 cung cấp bởi hệ điều hành BlackBerry.
Hình 1.1 - Cấu trúc mạng của Blackberry
(Nguồn: BlackBerry OS Report - Josh Schiffman)
Mặc dù hệ điều hành BlackBerry là một hệ điều hành đóng, nhưng nó cung cấp một thư viện giao diện lập trình ứng dụng(Application Programming Interface – API). Các nhà lập trình có thể sử dụng các API này để biết chương trình ứng dụng cho BlackBerry.
1.1.2 Nhập liệu trên Research In Motion OS:
Hệ điều hành Research In Motion được sử dụng cho các máy của chính hãng là
BlackBerry. Vì vậy đều được sử dụng các phương thức nhập liệu sau:
Nhập liệu: a) Các máy BlackBerry có 4 kiểu nhập liệu chính là trackwheel, trackball và
trackpad và màn hình cảm ứng(Touchscreen):
Trackwheel: Được sử dụng cho các dòng máy cũ như 850/870, dòng sản phẩm 6000, dòng
sản phẩm 7000 và 8700. Kiểu nhập liệu này sử dụng một bánh xe di chuyển bên hông máy( gọi là Trackwheel) để di chuyển lên xuống trong giao diện người dùng. Người dùng có thể di chuyển qua trái và qua phải bằng cách giữ nút shift6 trên bàn phím và di chuyển trackwheel. Chọn ứng dụng hay mở menu ứng dụng bằng cách nhấp vào Trackwheel.
5 Air Software Loading 6 Nút Shift hay nút Alt tùy theo dòng máy
15
Chương 1: Tổng quan hệ điều hành Research In Motion
Hình 1.2 - Trackwheel trên máy BlackBerry 8700 (Nguồn: www.gsmarena.com)
Trackball: Được sử dụng từ dòng máy 8100, và các dòng máy 8300, 8800, 8900, 9000,
9600. Trackball là một viên bi nằm ở chính giữa máy. Người dùng có thể cuộn viên bi lên xuống và qua trái, qua phải để di chuyển trong giao diện người dùng. Nhấn vào trackball để chọn và mở menu của ứng dụng.
Hình 1.3 - Trackball trên điện thoại BlackBerry Pearl 8100 (Nguồn: www.GSMArena.com)
Trackpad: Trackpad là kiểu nhập liệu được sử dụng cho các dòng máy mới như 9700,
8500.v.v. Trackpad là một bàn cảm ứng nhỏ được đặt ở giữa máy, người dùng có thể di chuyển bằng cách rê ngón tay trên trackpad. Chọn và mở menu ứng dụng bằng cách nhấp vào giữa trackpad.
16
Chương 1: Tổng quan hệ điều hành Research In Motion
Hình 1.4 - Trackpad trên điện thoại Blackberry Bold 9700 (Ngồn www.GSMArena.com)
Touchscreen:
Touchscreen là kiểu nhập liệu được sử dụng cho các máy có màn hình cảm ứng như dòng điện thoại 9500. Người dùng có thể dùng tay hoặc bút cảm ứng để chọn trực tiếp trên màn hình cảm ứng này.
Hình 1.5 - Touchscreen trên điện thoại Blackberry Storm 9500 (Nguồn: www.GSMArena.com)
Bàn phím: b) Blackberry cung cấp cho người dùng 3 loại bàn phím để nhập liệu khác nhau,
tùy thuộc dòng máy: QWERTY, SureType và bàn phím cảm ứng:
Bàn phím QWERTY: QWERTY là loại bàn phím được nhà phát minh ra máy đánh chữ Christopher
Sholes phát minh vào thập niên 1860. Ban đầu, các ký tự trên may dánh chữ được xếp theo thứ tự alphabet – ABCDE, nhưng cách đánh chữ này không được nhanh và tiện dụng. Một nhà kinh doanh làm chung với Scholes là James Densmore đã đề nghị thay
17
Chương 1: Tổng quan hệ điều hành Research In Motion
đổi và sắp xếp lại các ký tự trên bàn phím, và bàn phím kiểu QWERTY ra đời. Kiểu bàn phím này đuợc sử dụng rộng rãi cho các máy đánh chữ và máy tính ngày nay.
Research In Motion đã ứng dụng kiểu bàn phím này vào điện thoại của mình.
Giúp người dùng có thể nhập liệu bằng cả 2 tay và nhập liệu nhanh hơn. Kiểu bàn phím này đươc sử dụng trên hầu hết các điện thoại của BlackBerry, trừ các loại điện thoại cảm ứng và các dòng sử dụng bàn phím SureType.
Hình 1.6 - Bàn phím QWERTY trên máy BlackBerry Curve 8900 (Nguồn: ecvv.com) Một số điện thoại được phân phối ở Bỉ hoặc Pháp còn sử dụng bàn phím
AZERTY, một phiên bản khác của kiểu bàn phím QWERTY cho những người sử dụng ngôn ngữ Bỉ hay Pháp.
Hình 1.7 - Bàn phím AZERTY Trên máy BlackBerry Curve 8900 (Nguồn: www. mepodphone.net)
Bàn phím SureType:
Bàn phím SureType là kiểu bàn phím dựa vào kiểu bàn phím QWERTY, nhưng thiết kế 2 ký tự trên 1 phím, giúp cho bàn phím SureType trở nên nhỏ gọn hơn
18
Chương 1: Tổng quan hệ điều hành Research In Motion
so với bàn phím QWERTY nhưng vẫn đáp ứng được nhu cầu nhập liệu nhanh của người sử dụng BlackBerry.
Bàn phím SureType còn trang bị cho người dùng một từ điển khoảng 35.000 chữ tiếng Anh, giúp cho người dùng có thể gõ nhanh hơn bằng chế độ gõ chữ thông minh. Ngoài ra, các dòng điện thoại sử dụng bàn phím SureType còn có chức năng tự động học và nhớ những từ người dùng để nhập liệu để thêm vào bộ tự điển, giúp người dùng nhập liệu nhanh hơn.
Bàn phím SureType được sử dụng cho các điện thoại như Pearl 8100, 8110,
8120, 8130.v.v.
Hình 1.8 - Bàn phím SureType trên điện thoại BlackBerry 8100 (Nguồn: www.pdastreet.com)
Bàn phím cảm ứng:
Bàn phim cảm ứng là kiểu bàn phím được thiết kế cho các dòng mày sử dụng màn hình cảm ứng. Bàn phím cảm ứng có 2 loại là bàn phím cảm ứng QWERTY và bàn phím cảm ứng SureType.
Hình 1.9 - Bàn phím ảo SureType trong máy Blackberry 8550 (Nguồn: www.Blackberry.com)
T-Mobile[3]
Nhập liệu
AT&T[4]
Bell[5]
Rogers[6]
Telus[7]
Verizon[8]
Sprint[9]
Tên điện thoại
1.2 Các phiên bản Research In Motion OS: Số hiệu điện thoại
Phiên bản hệ điều hành
2010
9-Aug-09
5-Jan-10
8-Aug-09
20-Apr-10
17-Sep-09
22-Jan-10
Cập nhật lần cuối:
19
Pearl
Trackball
4.5.0
4.2.1.107
4.5.0.110
Chương 1: Tổng quan hệ điều hành Research In Motion
8100
Pearl
Trackball
4.5.0
4.5.0.158
4.5.0.102
8110
Pearl
Trackball
4.5.0
4.5.0.124
4.5.0.110
4.5.0.102
8120
Pearl
Trackball
4.5.0
4.5.0.127
4.5.0.177
4.5.0.77
4.5.0.138
4.5.0.175
8130
Trackball
4.6.0
4.6.0.180
4.6.0.174
8220
Pearl Flip (Kickstart)
Trackball
4.6.0
4.6.1.422
4.6.1.182
8230
Pearl Flip (Kickstart)
4.6.1.234 (6/23/2009)
4.5.0.110
4.5.0.81
Trackball
Curve
4.5.0
8300
4.5.0.306
4.5.0.81
Trackball
Curve
4.5.0
8310
4.5.0.81
4.5.0.182
4.5.0.81
Trackball
Curve
4.5.0
8320
4.5.0.127
4.5.0.160
4.5.0.175
4.5.0.186
Trackball
Curve
4.5.0
8330
4.6.1.194
4.6.1.313
Trackball
Curve
4.6.1
8350i
Trackpad
5.0.0
9100
Pearl 3G (Stratus)
Trackpad
5.0.0
9300
Curve 3G (Kepler)
4.5.0
(Huron)
Trackball
4.2.1.74
4.5.0.110
4.5.0.81
8800
4.5.0
(Huron)
Trackball
4.5.0.139
4.5.0.110
4.5.0.37
8820
4.5.0
(Huron)
Trackball
4.5.0.127
4.5.0.127
4.5.0.160
4.5.0.175
8830
4.5 (4/21/2009)
Trackball
4.6.1
4.6.1.231
4.6.1.315
4.6.1.250
8900
Curve (Javelin)
Bold
Trackball
4.6.0
4.6.0.304
5.0.0.411
4.6.0.282
9000
Tour
Trackball
4.7.1
4.7.1.77
9630
5.0.0.419 (2/2/2010)
5.0.0.591 (4/20/2010)
5.0.0.624 (05/04/2010)
Trackpad
5.0.0
5.0.0.405
5.0.0.344
5.0.0.351
5.0.0.442
9700
5.0.0.586 (5/18/2010)
Bold 2 (Onyx)
Trackpad
4.6.1
4.6.1.314
4.6.1.428
8520
4.6.1.259 (9/8/2010)
Curve 2 (Gemini)
Trackpad
5.0.0
5.0.0.756
5.0.0.609
5.0.0.459
8530
Curve 2 (Gemini)
5.0.0.508 (3/22/2010)
Storm
Touchscreen
4.7.0
4.7.0.148
9500
Storm
Touchscreen
5.0.0
5.0.0.419
4.7.0.122
5.0.0.419
5.0.0.328
9530
20
Storm 2
Touchscreen
5.0.0
5.0.0.320
5.0.0.607
Chương 1: Tổng quan hệ điều hành Research In Motion
9550
4.1.0.376
Trackwheel
4.1.0
7100i
4.2.1.110
Trackwheel
4.2.1
7130e
Trackwheel
4.2.1
4.5.0.110
8700
Trackwheel
4.5.0
4.5.0.124
8700g
Trackwheel
4.2.1
4.2.1.101
8700r
Trackwheel
4.2.1
4.2.1.110
4.2.1.110
4.2.1.195
4.5.0.148
8703e
Bảng 1.1 Các phiên bản hệ điều hành Research In Motion (Nguồn: Wikipedia.org)
1.3 Giới thiệu Research In Motion OS 5.0:
Do ứng dụng gởi và nhận mail trên điện thoại Blackberry được viết để chạy trên nền tảng hệ điều hành Research In Motion phiên bản 5.0, sau đây là một số sơ lược về phiên bản này.
Sự ra đời và phát triển mạnh mẽ của dòng điện thoại thông minh đã tạo ra môi trường phát triển ứng dụng mới. Trong đó sự phát triển mạnh mẽ của dòng điện thoại cảm ứng thúc đẩy sự ra đời của các dòng máy, hệ điều hành tiên tiến hơn, có thể đáp ứng được nhu cầu phát triển của thị trường.
Research In Motion đã cho ra đời phiên bản OS 5.0, được phát triển cho các dòng điện thoại BlackBerry Pearl Flip 8200, Curve 8350i, 8330, 8520 và 8900, Bold 9000, Storm 9530 và Tour 9630. Sự ra đời của hệ điều hành phiên bản mới này đánh dấu bước phát triển mạnh mẽ của hãng và hệ điều hành với các tính năng hỗ trợ màn hình cảm ứng, và các tính năng mạnh mẽ khác hỗ trợ tốt hơn cho người dùng.
21
Chương 1: Tổng quan hệ điều hành Research In Motion
Hình 1.10 - Giao diện Research In Motion OS 5.0 (Nguồn: Wikipedia.org)
Tất cả các thiết bị sử dụng BlackBerry Internet Service(BIS) chạy hệ điều hành phiên bản 5.0 này được cung cấp một trình duyệt mới mạnh mẽ hơn với các chức năng hỗ trợ AJAX7, chạy JavaScript tốt hơn và nhanh hơn, bộ hỗ trợ BlackBerry Widget – bao gồm cả Google Gears và SQLite cho Blackberry Widgets.
Ngoài các tính năng hỗ trợ BlackBerry Internet Service, hệ điều hành phiên bản 5.0 còn cung cấp cho người dùng những tính năng ưu việt như cờ đánh dấu E-mail, quản lý thư mục E-mail, tính năng để có thể xem và quản lý văn bản từ chia sẽ file từ xa, chuyển lịch công việc và kết nối mạnh mẽ. Ngoài ra, với các tính năng hỗ trợ màn hình cảm ứng, giao diện hoàn toàn mới và tiện dụng cho người dùng, Phiên bản hệ điều hành Research In Motion 5.0 đánh dấu một bước phát triển mạnh mẽ, đáp ứng nhu cầu của người sử dụng và cả lập trình viên.
Đặc điểm nổi bật:
o Hỗ trợ các chức năng dành cho thiết bị có màn hình cảm ứng. o Khả năng kết nối và thể hiện website mạnh mẽ. o Kết nối và quản lý văn bản từ xa. o Giao diện mới thân thiện và tiện dụng cho người dùng.
7 Aynchoronous Java Script And XML
22
Chương 2: Blackberry Mobile
Chương 2: BlackBerry Mobile
2.1 Tổng quan về BlackBerry Mobile:
2.1.1 Khái niệm về BlackBerry Mobile: BlackBerry là tên gọi chung của một thiết bị di động được phát triển bởi công
ty Research In Motion(RIM) có trụ sở chính tại Canada. Ngoài các tính năng thông thường của một thiết bị thông minh như sổ địa chỉ, lịch công việc.v.v. BlackBerry còn được biết đến như một thiết bị hỗ trợ mạnh mẽ cho việc gởi và nhận mail ở bất kì đầu, miễn là nó có thể kết nối với mạng di động.
BlackBerry hiện nay chiếm hơn 20% thị trường thiết bị cầm tay thông tin(hay còn gọi là smart phone). Với nhiều đặc tính nổi trội như khả năng bảo mật cao, hỗ trợ gởi và nhận mail một cách mạnh mẽ, có thể kết nối ở khắp mọi nơi.v.v. BlackBerry đã trở thành thiết bị cầm tay thông minh phổ biến nhất đối với các doanh nhân ở thị trường Mỹ.
2.1.2 Lịch sử phát triển: Thiết bị Blackberry xuất hiện đầu tiên vào năm 1999 chỉ đơn thuần là một máy nhắn tin di động(Pager). Chiếc máy có số hiệu 850 sử dụng 2 pin AA, có một số chức năng cơ bản như truy cập Internet, lịch hẹn, sắp xếp và quản lý công việc.v.v. Ở thời điểm các thiết bị di động đều rất lớn và không có nhiều chức năng như bấy giờ, 850 được đón nhận như một trong những thiết bị thành công nhất thời điểm đó, và rất được các doanh nhân ưa chuộng.
Vào năm 2002, các thiết bị phổ biến hơn của BlackBerry ra đời, hỗ trợ push e- mail, gọi điện thoại di động, nhắn tin, fax, duyệt web và một số ứng dụng mạng khác. Lúc này thiết bị khá giống với hình dạng các điện thoại phổ biến bây giờ. Được cung cấp pin lithium có thể sạc, dung lượng bộ nhớ và tốc độ xử lý cũng cải tiến hơn rất nhiều.
Mặc dù hầu hết các điện thoại dòng 5000 và 6000 của Blackberry đều hướng vào thị trường mạng GSM8. Nhưng với sự phát triển của Sprint và Verizon trên nền tảng mạng CDMA9 ở thị trường Mỹ, vào năm 2003 RIM đã phát tirển BlackBerry 6750 cho mạng của Verizon. Kế tới là các phiên bản dòng 7200, điển hình là dòng sản phẩm 7250, được phân phối qua Sprint và Verizon. Đây là thiết bị đầu tiên của BlackBerry có hỗ trợ Bluetooth.
Ở thời điểm này, BlackBerry sản xuất thiết bị cho cả 2 dòng mạng GSM và CDMA. Trong đó 7210, 7220, 7230, 7280, 7290 được thiết kế cho mạng GSM. Và
8 Global System for Mobile Communications 9 Code Division Multiple Access
23
Chương 2: Blackberry Mobile
7250 được thiết kế cho mạng CDMA. Riêng 7270 thật chất là một thiết bị WLAN, không hoạt động dựa trên mạng di động mà được sử dụng cho mục đích gọi VoIP10. Dòng điện thoại 7500 sau đó được thiết kế cho mạng di động iDEN của Motorola.
Có thể nói, bàn phím QWERTY là biểu tượng của Blackberry. Tuy nhiên, một số người lại cho rằng thiết bị full QWERTY lại quá cồng kềnh, và họ ưa chuộng dòng thiết bị mỏng và nhẹ hơn. Chính vì điều này, RIM đã phát triển và phân phối 7100t thông qua mạng T-Mobile vào cuối năm 2004, sử dụng bàn phim SureType – kiểu bàn phím với 2 ký tự cho mỗi phím.
Dòng thiết bị sử dụng bằng phím SureType thật sự được biết đến rộng rãi với
sự ra đời của phiên bản 8100 vào năm 2006, hay còn gọi là BlackBerry Pearl. Với thay đổi lớn chính là một viên bi cuộn ở giữa(được gọi là Trackball) được thay thế cho thanh cuộn bên hông(được gọi là Trackwheel) của những dòng sản phẩm trước. Ban đầu, Pearl được thiết kế hỗ trợ mạng GSM, nhưng vào cuối 2007, Pearl 8130 được phát triển cho mạng CDMA.
Sau một loạt sản phẩm với bàn phím cải tiến SureType, BlackBerry lại cho ra
đời dòng sản phẩm 8700 với kiểu bàn phím QWERTY, sản phẩm này là một trong những sản phẩm bán chạy nhất của BlackBerry. 8700 được phát triển với 3 dòng sản phẩm, một cho mạng GSM với EDGE11, một cho mạng GSM không sử dụng EDGE(phổ biến ở các nước Anh, Ý, Hồng Kông, Singapore, W-CDMA12 ở Nhật), và một dòng sản phẩm khác sử dụng cho mạng CDMA.
Vào ngày 12/2/2007, Blackberry bắt đầu phân phối 8800, sản phẩm GSM bán chạy nhất tại thời điểm lúc bấy giờ. Đây là thiết bị với kiểu bàn phím QWERTY kết hợp với viên bi Trackball của dòng sản phẩm 8100. Vài tháng sau dòng sản phẩm 8830 được phân phối thông qua Verizon, sử dụng mạng CDMA. Và sau đó dòng sản phẩm 8820 ra đời đây là sản phẩm sử dụng Wifi đầu tiên của BlackBerry.
Vào tháng 5/2007. BlackBerry lại tiếp tục giới thiệu dòng sản phẩm BlackBerry 8300, hay còn gọi là BlackBerry Curve. Đây là sản phẩm đầu tiên của BlackBerry có tích hợp camera, sản phẩm này cũng được phân phối ở nhiều mạng khác nhau như GSM hay CDMA.
BlackBerry đã và đang phát triển cho tới tận ngày nay. Với nhiều sản phẩm cải tiến theo từng năm cụ thể, với nhiều kiểu dáng khác nhau như nắp gập, nắp trượt, cảm ứng.v.v. BlackBerry đã và đang dần khẳng định vị thế là một trong những sản phẩm thiết bị cầm tay thông minh mạnh và hiệu quả nhất.
10 Voice Over IP 11 Enhanced Data rates for GSM Evolution 12 Wide Code Division Multiple Access
24
Chương 2: Blackberry Mobile
2.2 Một số vấn đề khi xây dựng ứng dụng trên BlackBerry:
2.2.1 Java trên BlackBerry: Ứng dụng trên Blackberry có thể được phát triển bằng ngôn ngữ Java, cụ thể là
J2ME13 như các thiết bị di động có hỗ trợ Java khác. Ngoài ra, Research In Motion còn cung cấp cho những người phát triển ứng dụng một bộ API14 bao gồm các hàm và các câu lệnh hỗ trợ việc lập trình trên điện thoại BlackBerry.
API của BlackBerry bao gồm các lớp, các hàm hỗ trợ cho việc phát triển ứng
dụng trên BlackBerry, bao gồm:
Brower: trong bộ net.rim.blackberry.api , hỗ trợ các thao tác về trình duyệt web
và tạo trang web.
Invoke: trong bộ net.rim.blackberry.api, hỗ trợ truy cập vào các ứng dụng sẵn
có của máy như mail, task, memo.v.v.
Mail:Hỗ trợ các thao tác về mail như đọc, soạn mail và gởi mail. Phone: Hỗ trợ các thao tác về nghe và nhận cuộc gọi. Pdap: Hỗ trợ thao tác cho các ứng dụng PDA như công việc, lịch, sổ địa
chỉ.v.v.
API về thiết bị ngoại vi như bluetooth, pin, ui.v.v. API hỗ trợ việc mã hóa, lưu trữ khóa, giải mã.v.v.
2.2.2 Chu kì sống của một chương trình BlackBerry: Chương trình được bắt đầu ở trạng thái tạm dừng(Pause), lắng nghe các thông
điệp mà người dùng có thể tương tác trong chương trình. Khi có một thông điệp mà chương trình có thể quản lý, chương trình sẽ chuyển sang trạng thái hoạt động(Active), sau khi thực hiện xong, chương trình lại quay về trạng thái tạm dừng.
Chương trình kết thúc(Destroyed) khi người dùng chọn thoát chương trình.
Quá trình lắng nghe diễn ra liên tục.
13 Java Platform Micro Edition 14 Application Programming Interface
25
Chương 2: Blackberry Mobile
Hình 2.1 - Chu kỳ sống của chương trình BlackBerry (Nguồn: BlackBerry OS Report - Josh Schiffman)
2.2.3 Môi trường lập trình BlackBerry: Về cơ bản, người dùng có thể sử dụng bất kỳ môi trường nào để lập trình ứng
dụng java cho BlackBerry. BlackBerry còn cung cấp cho người dùng một số môi trường lập trình như sau để hỗ trợ thêm về API của BlackBerry.
BlackBerry JDE15: Đây là chương trình cần thiết khi lập trình BlackBerry, nó cung cấp môi trường, máy ảo và các API cần thiết để lập trình BlackBerry. Bộ lập trình này yêu cầu JRE16 và JDK17 1.6 để chạy. Bộ lập trình này bao gồm:
o Một bộ tra cứu về API của BlackBerry và java. o Máy ảo giả lập để chạy và phát triển ứng dụng. o Giả lập MDS. o Một số chương trình mẫu. o Khả năng tạo .code file để đưa ứng dụng vào máy Blackberry. o Công cụ ký(sign) code để phát triển ứng dụng trên môi trường máy thực
tế.
BlackBerry JDE Plug-in cho Eclipse18: Đây là một Plug-in dành cho Eclipse, cung cấp khả năng lập trình BlackBerry trên môi trường Eclipse. Người dùng có thể phát triển ứng dụng BlackBerry thông qua Eclipse. Plug-in này còn cung cấp các máy ảo cần thiết cho việc lập trình, tùy thuộc và JDE cài đặt trong máy.
15 Java Development Environment 16 Java Runtime Environment 17 Java Development Kits 18 Công cụ phát triển ứng dụng Java
26
Chương 2: Blackberry Mobile
Rapid Application Development tools for BlackBerry(MDS Studio 2.0): Môi
trường này cung cấp cho người phát triển ứng dụng khả năng phát triển các ứng dụng khác nhau như mạng, cơ sở dữ liệu.v.v.
BlackBerry Plug-in cho Microsoft Visual Studio: Đây là Plug-in dành cho Visual Studio của Microsoft. Cung cấp khả năng phát triển ứng dụng BlackBerry qua môi trường Visual Studio. Tuy nhiên, Plug-in này hiện nay không được Research In Motion phát triển tiếp.
NetBeans19: Người dùng có thể sử dụng Netbeans để lập trình ứng dụng
BlackBerry.
Hình 2.2 - Các công cụ lập trình MDS trên BlackBerry (Nguồn: BlackBerry OS Report - Josh Schiffman)
2.2.4 Máy ảo BlackBerry: BlackBerry cung cấp cho người dùng một bộ máy ảo gần như hoàn chỉnh về
các tính năng để người dùng có thể chạy thử và phát triển ứng dụng trên BlackBerry.
Tất cả các dòng máy đã sản xuất của Research In Motion đều có một máy ảo
với chức năng và hình dáng tương đương.
Máy ảo BlackBerry bao gồm tất cả các tính năng của một máy BlackBerry thông thường, bao gồm kết nối mạng di động và mạng máy tính, chế độ Holster20, chế độ pin và nhiều chế độ khác.
19 Công cụ phát triển ứng dụng Java 20 Chế độ tiết kiệm pin của BlackBerry khi đưa thiết bị vào một bao da có nam châm
27
Chương 2: Blackberry Mobile
Hình 2.3 - Máy ảo 9530 của BlackBerry (Nguồn: www.Blackberry.com)
2.2.5 Ký (sign) chương trình BlackBerry: Mặc dù người phát triển ứng dụng có thể tự do phát triển ứng dụng cho
BlackBerry. Tuy nhiên, khi sử dụng API của BlackBerry cung cấp, Research In Motion cần phải theo dõi một số chương trình nhạy cảm sử dụng các API liên quan tới việc bảo mật và quản lý các thông tin nằm trong máy. Các hàm về bảo mật và quản lý trong BlackBerry API đều bị khóa, và yêu cầu phải được ký trước khi sử dụng trên máy thật.
Một số API như các API về mã hóa, bảo mật bắt buộc phải được Research In
Motion ký trước khi sử dụng. Điều này giúp cho người dùng có thể sử dụng các chương trình được phát triển mà không phải lo về các vấn đề mã hóa và bảo mật của mình.
Một số chương trình sử dụng MIDP21 để truy cập vào máy cần được ký để xác minh ứng dụng này an toàn. Khi được ký, chương trình sẽ không xuất hiện các cảnh báo cho người dùng khi chương trình sử dụng các kết nối file, kết nối mạng cũng như truy cập dữ liệu trong máy nữa.
21 Mobile Information Device Profile
28
Chương 2: Blackberry Mobile
Các gói cần phải ký trước khi sử dụng là:
Tên gói
Net.rim.blackberry.api.browser Công dụng Gói này cung cấp cho ứng dụng khả năng truy cập vào trình duyệt của BlackBerry.
Net.rim.blackberry.api.invoke
Gói này cung cấp cho ứng dụng khả năng truy cập vào các ứng dụng có sẵn của BlackBerry như lịch công việc, tin nhắn, sổ ghi chép và các ứng dụng về mạng điện thoại.
Net.rim.blackberry.api.mail
Gọi này cung cấp cho phép ứng dụng truy cập vào phần mềm tin nhắn của BlackBerry để gởi, nhận và đọc tin nhắn E-mail.
Net.rim.blackberry.api.mail.event Gói ứng dụng này định nghĩa các sự kiện và lắng nghe, quản lý các sự kiện liên quan tới mail.
thêm các menu vào chương
Net.rim.blackberry.api.options
Net.rim.blackberry.api.menuitem Gói này dùng cho phép người phát triển ứng dụng có trình thể BlackBerry. Gói này cho phép người phát triển ứng dụng có thể thêm các tùy chọn của chương trình vào danh sách tùy chọn có sẵn của máy BlackBerry.
Net.rim.blackberry.api.pdap
Gói này cung cấp cho ứng dụng khả năng truy xuất vào chương trình quản lý thông tin người dùng của Blackberry như sổ địa chỉ, công việc, lịch.
Javax.mircoedition.pim Net.rim.blackberry.api.phone Gói này cung cấp cho ứng dụng khả năng sử dụng các tính năng của các ứng dụng phone.
Gói này cung cấp cho ứng dụng khả năng truy xuất lịch sử gọi và nghe của máy. Net.rim.blackberry.api.phone.pho nelogs
Gói này cung cấp cho ứng dụng khả năng hiển thị trang web trong chương trình. Net.rim.blackberry.api.browser.fie ld
Gói này cho phép người lập trình thêm các kiểu MIME khác vào trình duyệt web của BlackBerry. Net.rim.blackberry.api.browser.pl ugin
29
Chương 2: Blackberry Mobile
Net.rim.blackberry.api.crypto
Gói này cung cấp cho ứng dụng các tính năg về bảo mật, mã hóa, chữ ký điện tử, chứng thực dữ liệu và quản lý chứng thực.
Net.rim.blackberry.api.io.http
Gói này cung cấp cho ứng dụng khả năng đăng ký một hay nhiều địa chỉ tới trình duyệt web của BlackBerry.
Bảng 2.1 - Các gói API cần phải ký trước khi sử dụng (Nguồn:BlackBerry API references)
Các gói kể trên sẽ hoạt động bình thường trên máy ảo khi phát triển ứng dụng.
Tuy nhiên, chương trình cần phải ký trước khi sử dụng trên máy thật.
Để ký cho chương trình của mình, người phát triển ứng dụng cần truy cập vào
địa chỉ: http://na.blackberry.com/eng/developers/javaappdev/codekeys.jsp và điền đầy đủ vào: https://www.blackberry.com/SignedKeys/. Sau khi trả phí cho Research In Motion, người phát triển ứng dụng sẽ chờ để lấy chữ ký và ký cho ứng dụng của mình. Sau đó người phát triển ứng dụng có thể triển khai trên máy thật.
30
Chương 3: Lập trình với Blackberry API
Chương 3: Lập trình với BlackBerry API
3.1 BlackBerry API: Ngoài việc hỗ trợ các gói thư viện MIDLET của các ứng dụng Java trên di động, BlackBerry còn bổ sung rất nhiều thư viện đặc biệt chỉ sử dụng trên RIM OS. Các gói thư viện này có tên bắt đầu net.rim.* . Hướng dẫn sử dụng của các thư viện này được miêu tả cụ thể trong BlackBerry JDK API References (nằm trong bộ SDK của BlackBerry). Trong nội dung của báo cào này chỉ xin giới thiệu một số lớp được sử dụng trong xây dựng chương trình.
3.1.1 Lập trình giao diện trên BlackBerry: BlackBerry API cung cấp cho người dùng các lớp cơ bản nhất để lập trình ứng
dụng có giao diện tương tác người dùng. Bao gồm các control cơ bản nhất của lập trình giao diện như button, listbox, combobox, textfield.v.v.
Các lớp API này đều cho phép kế thừa để người phát triển ứng dụng có thể tùy
biến tùy vào mục đích sử dụng của mình.
3.1.2 Lập trình mạng trên BlackBerry:
3.1.2.1 javax.microedition.io.Connector:
Lớp Connector cung cấp khả năng kết nối thiết bị bằng nhiều giao thức như: comm, socket, udp, sms, mms, http, https, tls, ssl, bluetooth.v.v. Ngoài ra, lớp này còn hỗ trợ khả năng kết nối của thiết bị qua sóng wifi đối với kết nối TCP22 hoặc UDP23. Trong phần này chỉ đề cập tới kết nối bằng socket và bằng ssl/tls.
Kết nối bằng Socket:
Lớp Connector mở một kết nối bằng socket thông qua mạng diện rộng bằng
câu lệnh open có cấu trúc như sau:
Connector.open("socket://
Trong đó:
o Deviceside: Cho biết kết nổi được kết nối trực tiếp qua TCP hay qua proxy TCP. Deviceside=true nếu kết nối trực tiếp qua TCP, deviceside=false nếu kết nối thông qua proxy TCP. o Interface: interface=wifi cho biết kết nối wifi được mở. o Apn: một kết nối thông qua APN được tạo ra.
22 Transmission Control Protocol 23 User Datagram Protocol
31
Chương 3: Lập trình với Blackberry API
o TunnelAuthUsername: tên truy cập để kết nối tới APN. o TunnetAuthPassword: mật khẩu để kết nối tới APN.
Kết nối bằng SSL24/TLS25:
Lớp Connector mở một kết nối TLS hay SSL bằng câu lệnh sau:
Connector.open("tls:// onal parameters>]"); Hay Connector.open("ssl:// parameters>]"); Trong đó: o Deviceside: Cho biết kết nổi được kết nối trực tiếp qua TCP hay
qua proxy TCP. Deviceside=true nếu kết nối trực tiếp qua TCP,
deviceside=false nếu kết nối thông qua proxy TCP.
o Interface: interface=wifi cho biết kết nối wifi được mở.
o Apn: một kết nối thông qua APN được tạo ra.
o TunnelAuthUsername: tên truy cập để kết nối tới APN.
o TunnetAuthPassword: mật khẩu để kết nối tới APN. Kết nối SSL/TLS có thể thực hiện thông qua 2 chế độ: Chế độ proxy: Dịch vụ dữ liệu điện thoại( Mobile Data Service – MDS)
của BlackBerry Enterprise Server(BES) cung cấp TLS/SSL như một hỗ
trợ cho thiết bị. Mọi giao tiếp thông qua internet giữa BES và Web
server được mã hóa sử dụng TLS. Giao tiếp thông qua mạng diện rộng
giữa thiết bị và BES không được mã hóa bởi TLS/SSL, nhưng vẫn được
mã hóa bằng thuật toán TripleDES. Dữ liệu TLS được giải mã tại MDS
và mã hóa lần nữa bằng TripleDES. Chế độ proxy: Dịch vụ dữ liệu điện thoại( Mobile Data Service – MDS)
của BlackBerry Enterprise Server(BES) cung cấp TLS/SSL như một hỗ
trợ cho thiết bị. Mọi giao tiếp thông qua internet giữa BES và Web
server được mã hóa sử dụng TLS. Giao tiếp thông qua mạng diện rộng
giữa thiết bị và BES không được mã hóa bởi TLS/SSL, nhưng vẫn được
mã hóa bằng thuật toán TripleDES. Dữ liệu TLS được giải mã tại MDS
và mã hóa lần nữa bằng TripleDES. 24 Secure Socket Layer
25 Transport Layer Security 32 Chương 3: Lập trình với Blackberry API 3.1.2.2 javax.microedition.io.SocketConnection interface và javax.microedition.io.StreamConnection interface: Hình 2.4 – Sơ đồ biểu diễn mới quan hệ giữa các lớp Connection
2 lớp này cung cấp kết nối socket giữa thiết bị và server. Đồng thời nó còn
cung cấp một dữ liệu InputStream và dữ liệu OutputStream để quản lý quá
trình gởi/nhận của kết nối đó. Khi dữ liệu InputStream hay OutputStream bị đóng, nó chỉ có thể được mở lại bằng lệnh gọi Connector.open(). 3.1.2.3 net.rim.device.api.crypto.tls.tls10.TLS10Connection:
Lớp này có thể tạo ra một kết nối TLS1.0 trực tiếp thông qua kết nối thông thường(ví dụ như TCP). Ngoài ra lớp này còn có chức năng định hướng kết nối là kết
nối TLS nếu sử dụng kết nối thông thường. 3.1.3 Lưu trữ thông tin trên BlackBerry:
Thông tin trên BlackBerry được lưu trữ thông qua 2 lớp hỗ trợ là PersistentObject và PersistentStore: - PersistentObject: Lớp nãy hỗ trợ lưu trữ dữ liệu của chương trình trên thiết bị. Dữ liệu này sẽ không bị mất sau mỗi lần thiết bị khởi động lại. o Để xác định dữ liệu cần lưu trữ, ta sử dụng câu lệnh
setContents(“Dữ liệu cần lưu trữ”)
o Để lưu trữ dữ liệu, ta sử dụng câu lênh commit() hoặc forcecommit() - PersistentStore: Lớp này hỗ trợ lưu trữ dữ liệu đã được xác định trong PersistentObject vào dữ liệu của thiết bị và lưu trữ. 33 Chương 3: Lập trình với Blackberry API 3.1.4 Lập trình truy cập các ứng dụng có sẵn trên BlackBerry:
Blackberry API cung cấp cho người phát triển ứng dụng khả năng truy cập và lấy dữ liệu trong thiết bị Blackberry như tin nhắn, danh bạ điện thoại, lịch làm việc, sổ
ghi nhớ.v.v. Việc truy cập các dữ liệu trong thiết bị BlackBerry kể trên được thông qua các
lớp trong nhóm lớp net.rim.blackberry.api.pdap . Nhóm lớp này cung cấp
các lớp ứng với các ứng dụng có sẵn trên BlackBerry: - Lớp BlackBerryContact, BlackBerryContactGroup, BlackBerryContactList: Cung cấp cho người dùng khả năng truy cập
các thông tin trong danh bạ điện thoại của máy, bao gồm các thông tin về tên,
E-mail, địa chỉ, số điện thoại.v.v. tương ứng với các trường đã được định nghĩa
sẵn trong 2 lớp này. - Lớp BlackBerryEvent và BlackBerryEventList: Cung cấp cho người dùng khả năng truy cập các lịch hẹn trên lịch của thiết bị. - Lớp BlackBerryMemo và BlackBerryMemoList: Cung cấp cho người dùng khả năng truy cập dữ liệu lưu trữ sổ ghi nhớ của BlackBerry. - Lớp BlackBerryToDo và BlackBerryToDoList: Cung cấp cho người dùng khả năng truy cập dữ liệu về lịch làm việc của thiết bị. - Ngoài ra nhóm lớp này còn cung cấp cho người dùng các lớp dùng để lắng nghe và quản lý các sự kiện lên quan tới sổ địa chỉ, lịch công việc và sổ ghi nhớ
của BlackBerry. 3.1.5 Lập trình sự kiện trên BlackBerry:
BlackBerry API cung cấp cho người phát triển ứng dụng khả năng lập trình sự
kiện. Người dúng có thể lắng nghe các sự kiện từ việc nhập liệu. Kiểm tra các sự kiện
đó thuộc về phần nào của ứng dụng để quản lý. 3.2 Mail API trên BlackBerry:
Đ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ã 34 Chương 3: Lập trình với Blackberry API
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 Multipurpose Internet Mail Extension 35 Chương 4: Các giao thức trong gởi nhận E-mail 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 Simple Mail Transfer Protocol 36 Chương 4: Các giao thức trong gởi nhận E-mail 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. 37 Chương 4: Các giao thức trong gởi nhận E-mail 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
8BITMIME trợ dạng Ý nghĩa
Hỗ
MIME 8-bit. Tài liệu Miêu tả
RFC
1652 Định nghĩa hỗ trợ 8-
bit trong chuyển đổi 38 Chương 4: Các giao thức trong gởi nhận E-mail AUTH chứng Cấp
thực RFC
2554 DSN tin
thái RFC
1891 Thông
trạng
chuyển thư ENHANCEDSTATUSCODES
PIPELINING dòng Nhiều
lệnh RFC
2920 SIZE Khai báo kích
thước thư RFC
1870 nội dung của thư có
dạng MIME.
Cơ chế chứng thực
được sử dụng để
tăng cường tính an
toàn.
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.
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.
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à
thể
bên nhận có
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: 39 Chương 4: Các giao thức trong gởi nhận E-mail HELO - 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 - 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: Lệnh RCPT: - Cú pháp: RCPT SMTP bên nhận. - Ví dụ: RCPT TO: Lệnh DATA: - Cú pháp: DATA Lệnh RSET: - Cú pháp: RSET 40 Chương 4: Các giao thức trong gởi nhận E-mail - 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 chỉ định - Ví dụ: VRFY abc@domail.com Lệnh EXPN: - Cú pháp: EXPN danh sách các địa chỉ chứa trong đó. Lệnh HELP: - Cú pháp: HELP [ - 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 kiểm tra kết nối. Lệnh QUIT: - Cú pháp: QUIT Lệnh TURN: Đã bị loại bỏ từ RFC 2821 Lệnh SOML: Đã bị loại bỏ từ RFC 2821 Lệnh SAML: 41 Chương 4: Các giao thức trong gởi nhận E-mail Đã 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
211 System status or system help Ý nghĩa ready. 214 220 221 transaction channel. 250 252 Không thể VRFY người dùng Cho biết lệnh được thực hiện thảnh
cô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 Trả lời lại lệnh DATA. thúc bằng 421 hộp thư không được thực hiện. 451
500 Sai cú pháp, không nhận ra lệnh
501 Sai cú pháp do tham số không Gửi khi SMTP bên nhận đột ngột ngắt
kết nối.
Gửi khi hộp thư đang bị truy xuất bởi
một tiến trình khác.
Xảy ra lỗi khi máy chủ xử lí hợp lệ. 502 Lệnh không được máy chủ hỗ trợ 503 Thứ tự lệnh không hợp lệ Lệnh hợp lệ nhưng máy chủ không hỗ
trợ.
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ợ. Bảng 4.2 các câu lệnh trả về trong SMTP 42 Chương 4: Các giao thức trong gởi nhận E-mail 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 Post Office Protocol 43 Chương 4: Các giao thức trong gởi nhận E-mail 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 (Nguồn: www.TCPIPGuide.com) 44 Chương 4: Các giao thức trong gởi nhận E-mail 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 - 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: Câu lệnh USER cung cấp User của người dùng cho Server. 45 Chương 4: Các giao thức trong gởi nhận E-mail 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 - 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 - 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 - 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 - Tham số: không có 46 Chương 4: Các giao thức trong gởi nhận E-mail - Ý 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 - 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 - 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 - 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 - 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: - Cú pháp: 47 Chương 4: Các giao thức trong gởi nhận E-mail APOP Lệnh QUIT: - Cú pháp: QUIT - 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 Internet Message Access Protocol 48 Chương 4: Các giao thức trong gởi nhận E-mail 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 Internet Message Support Protocol 49 Chương 4: Các giao thức trong gởi nhận E-mail 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. 50 Chương 4: Các giao thức trong gởi nhận E-mail 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: CAPABILITY, NOOP, LOGOUT 51 Chương 4: Các giao thức trong gởi nhận E-mail - 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 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
S: abcd OK CAPABILITY completed 52 Chương 4: Các giao thức trong gởi nhận E-mail Lệnh NOOP: o Cấu trúc: NOOP 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 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 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. 53 Chương 4: Các giao thức trong gởi nhận E-mail 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 Lệnh LOGIN: o Cấu trúc: LOGIN NO – Đăng nhập không thành công: Username hay Password sai.
BAD – Câu lệnh sai hoặc tham số sai o Ý nghĩa: Câu lệnh LOGIN xác nhận Client và một password dạng plaintext để chứng thực người dùng này. Server có thể kết hợp cả câu trả lời CAPABILITY trong nhãn OK
để trả lời cho câu lệnh LOGIN thành công để gởi khả năng của server
một cách tự động. Lệnh AUTHENTICATE: o Cấu trúc: AUTHENTICATE chứng thực; NO: chứng thực thất bại;
BAD: không nhận ra lệnh hoặc tham số không hợp lệ, sự trao đổi chứng thực bị hủy. 54 Chương 4: Các giao thức trong gởi nhận E-mail o Ý nghĩa: Việc trao đổi giao thức chứng thực bao gồm các thách thức
(challenges) từ server và các trả lời của client. Thách thức của server là
chuỗi BASE64 theo sau dấu “+”. Nếu client muốn hủy quá trình chứng
thực thì chỉ cần gửi một lệnh chứa duy nhất “*” cho server. Nhóm lệnh dùng ở trạng thái đã được chứng thực: Lệnh SELECT: o Cấu trúc: SELECT Yêu cầu sự đáp lại không nhãn với OK: UNSEEN, PERMANENTFLAGS, UIDNEXT, UDIVALIDITY. o Kết quả: OK: nếu lệnh thành công, vào trạng thái đã chọn hộp thư NO: lệnh thất bại, không có hộp thư hoặc không có quyền truy cập BAD: không nhận ra lệnh hoặc tham số không hợp lệ. Số lượng các tin nhắn có cờ /Recent Giá trị UID tiếp theo. FLAGS Các cờ được định nghĩa trong hộp thư.
Với mỗi kết nối chỉ có thể chọn một hộp thư trong một thời điểm.
Nếu client được phép thay đổi hộp thư thì trong kết quả trả về kèm theo
“[READ-WRITE]” theo sau OK. o Ý nghĩa: Với mỗi kết nối chỉ có thể chọn một hộp thư trong một thời điểm.
Nếu client được phép thay đổi hộp thư thì trong kết quả trả về kèm theo
“[READ-WRITE]” theo sau OK. o Ví dụ: C: A142 SELECT INBOX
S: * 172 EXISTS
S: * 1 RECENT
S: * OK [UNSEEN 12] Message 12 is first unseen
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * OK [UIDNEXT 4392] Predicted next UID 55 Chương 4: Các giao thức trong gởi nhận E-mail S: * FLAGS (\Answered \Flagged \Deleted \Seen
\Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)]
Limited
S: A142 OK [READ-WRITE] SELECT completed Lệnh EXAMINE: o Cấu trúc: EXAMINE Yêu cầu sự đáp lại không nhãn với OK: UNSEEN, PERMANENTFLAGS, UIDNEXT, UDIVALIDITY o Kết quả: OK: nếu lệnh thành công, vào trạng thái đã chọn hộp thư NO: lệnh thất bại, không có hộp thư hoặc không có quyền truy cập BAD: không nhận ra lệnh hoặc tham số không hợp lệ.
o Ý nghĩa: Lệnh này giống với lệnh SELECT, chỉ khác biệt ở chỗ là client
không thể thay đổi các tin nhắn được. Trong kết quả trả về từ server,
kèm theo “[READ-ONLY]” theo sau OK. o Ví dụ: C: A932 EXAMINE blurdybloop
S: * 17 EXISTS S: * 2 RECENT
S: * OK [UNSEEN 8] Message 8 is first unseen
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * OK [UIDNEXT 4392] Predicted next UID
S: * FLAGS (\Answered \Flagged \Deleted \Seen
\Draft)
S: * OK [PERMANENTFLAGS ()] No permanent flags
permitted
S: A932 OK [READ-ONLY] EXAMINE completed Lệnh CREATE: o Cấu trúc: CREATE NO: không thể tạo hộp thư với tham số tên truyền vào.
BAD: không nhận ra lệnh hoặc tham số không hợp lệ
o Ý nghĩa: Tạo một hộp thư (thư mục) mới với tên được chỉ định. Server
trả về thành công(OK) khi một hộp thư mới được tạo ra. Câu lệnh này sẽ
báo lỗi nếu như tạo Inbox hoặc 1 hộp thư với tên có sẵn. o Ví dụ: 56 Chương 4: Các giao thức trong gởi nhận E-mail C: A003 CREATE newmailbox/
S: A003 OK CREATE completed Lệnh DELETE: o Cấu trúc: DELETE NO – Không thể xóa hộp thư được chỉ định
BAD – Không nhận ra lệnh hoặc tham số không hợp lệ.
o Ý nghĩa: Lệnh DELETE xóa vĩnh viễn hộp thư được chỉ định.Hộp thư
phải không có chứa các thư mục con. Trong trường hợp tồn tại các thư
mục con trong hộp thư, chỉ có thể xóa đi hộp thư đó khi không có chứa
thuộc tính \Noselect. Khi đó, tất cả các tin nhắn trong hộp thư sẽ bị xóa
và hộp thư sẽ có tham số \Noselect. Lệnh RENAME: o Cấu trúc: RENAME mới. o Trả lời: không có trả lời đặc biệt cho lệnh này.
o Kết quả: OK – Đổi tên hộp thư thành công NO – Không thể đổi tên hộp thư
BAD – Không nhận ra lênh hoặc tham số không hợp lệ.
o Ý nghĩa: Lệnh RENAME đổi tên của hộp thư đang tồn tại với một tên mới hợp lệ. Nếu hộp thư có chứa các thư mục con thì khi đổi tên, đường dẫn tới thư mục con cũng thay đổi theo. Nếu tham số tên là một đường dẫn gồm các thư mục phân cách
nhau thì server sẽ tạo ra các thư mục cha của thư mục muốn tạo nếu như
chưa tồn tại
Lệnh SUBCRIBE: o Cấu trúc: SUBCRIBE NO – Lệnh thực hiện không thành công
BAD – Không nhận ra lệnh hoặc tham số không phù hợp
o Ý nghĩa: Lệnh SUBSCRIBE thêm tên của hộp thư được chỉ định vào
danh sách các hộp thư có trạng thái “active” hoặc “subcribed” được trả
về trong lệnh LSUB. Lệnh UNSUBCRIBE: 57 Chương 4: Các giao thức trong gởi nhận E-mail o Cấu trúc: UNSUBCRIBE NO – Lệnh thực hiện không thành công
BAD – Không nhận ra lệnh hoặc tham số không phù hợp
o Ý nghĩa: Lệnh UNSUBCRIBE xóa hộp thư được chỉ định ra khỏi danh sách các hộp thư đang ở trạng thái “active” hoặc “subcribed” o Ví dụ: C: A002 UNSUBSCRIBE #news.comp.mail.mime
S: A002 OK UNSUBSCRIBE completed Lệnh LIST: o Cấu trúc: LIST dạng của tên thư mục. o Trả lời:
o Kết quả:
o Ý nghĩa: Lệnh LIST trả về danh sách các thư mục có tên thỏa tham số
pattern chứa trong thư mục cha.Với mỗi kết quả trả về ứng với 1 dòng
dữ liệu không có thẻ chứa thông tin danh sách các thuộc tính, dấu phân
cấp thư mục, tên của thư mục. o Ví dụ: C: A101 LIST "" ""
S: * LIST (\Noselect) "/" ""
S: A101 OK LIST Completed
C: A103 LIST /usr/staff/jones ""
S: * LIST (\Noselect) "/" /
S: A103 OK LIST Completed STATUS trúc:
list o Tham số: mail-box: tên hộp thư; status-flag-list: danh sách các cờ trạng thái cần lấy thông tin. o Trả lời: Một trả lời không thẻ: STATUS
o Kết quả: OK – Lệnh thực hiện thành công. NO – Lệnh thực hiện thất bại, không có tên trạng thái được chỉ định. BAD – Không nhận ra lệnh hoặc tham số không hợp lệ 58 Chương 4: Các giao thức trong gởi nhận E-mail o Ý nghĩa: Lệnh STATUS yêu cầu server trả về thông tin ứng với từng tên
trạng thái của hộp thư được chỉ định. Lệnh này không làm thay đổi hộp
thư đang được chọn. Các trạng thái có thể truy vấn gồm: số lượng thư có cờ \Recent. giá trị UIDVALIDITY của hộp thư. MESSAGES số lượng thư có trong hộp thư.
RECENT
UIDNEXT giá trị UID tiếp theo của hộp thư.
UIDVALIDITY
UNSEEN số lượng thư không có cờ \Seen o Ví dụ: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)
S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) S: A042 OK STATUS completed Lệnh APPEND: o Cấu trúc: APPEND list> [Date/time] o Tham số: mail-box: tên hộp thư; status-flag-list: danh sách các cờ trạng
thái (tùy chọn); date/time: thông tin ngày giờ (tùy chọn); content: nội
dung message. o Trả lời:
o Kết quả: OK – Lệnh thực hiện thành công NO – Lệnh thất bại, không thể thêm một thư vào hộp thư, thông tin cờ hoặc ngày/giờ không hợp lệ. BAD – Không nhận ra lệnh hoặc tham số không hợp lệ
o Ý nghĩa: Lệnh APPEND thêm 1 thư mới vào hộp thư, nội dung thư phải
nên theo định dạng qui định trong [RFC-2822]. Mặc định nếu không có
tham số cờ thì thư được tạo sẽ không có bất kì cờ nào o Ví dụ: C: A003 APPEND saved-messages (\Seen) {310}
S: + Ready for literal data
C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
C: From: Fred Foobar foobar@Blurdybloop.COM
C: Subject: afternoon meeting
C: To: mooch@owatagu.siam.edu
C: Message-Id: B27397-0100000@Blurdybloop.COM
C: MIME-Version: 1.0
C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII 59 Chương 4: Các giao thức trong gởi nhận E-mail C:
C: Hello Joe, do you think we can meet at 3:30
tomorrow?
C:
S: A003 OK APPEND completed Nhóm lệnh dùng ở trạng thái hòm thư được chọn: Lệnh CLOSE: o Cấu trúc: CLOSE chứng thực. BAD – Không nhận ra lệnh hoặc tham số không hợp lệ
o Ý nghĩa: Lệnh CLOSE yêu cấu server xóa toàn bộ các thư có cờ
\Deleted trong hộp thư đang được chọn, đóng hộp thư và trở về trạng
thái đã được chứng thực. Với mỗi thư được xóa, server sẽ gửi một trả lời
không thẻ EXPUNGE. o Ví dụ: C: A341 CLOSE
S: A341 OK CLOSE completed Lệnh EXPUNGE: o Cấu trúc: EXPUNGE NO – thực hiện thất bại, không có quyền.
BAD – Không nhận ra lệnh hoặc tham số không hợp lệ.
o Ý nghĩa: Lệnh EXPUNGE xóa vĩnh viễn tất cả các thư có cờ \Deleted trong hộp thư đang được chọn. o Ví dụ: C: A202 EXPUNGE
S: * 3 EXPUNGE
S: * 3 EXPUNGE
S: * 5 EXPUNGE
S: * 8 EXPUNGE
S: A202 OK EXPUNGE completed
Chú ý: Trong ví dụ trên, các thư có số thứ tự 3, 4, 7, 11 có cờ \Deleted
và bị xóa. Cứ một thư bị xóa thì chỉ số của các thư phía sau nó giảm đi
1. 60 Chương 4: Các giao thức trong gởi nhận E-mail Lệnh SEARCH: o Cấu trúc: SEARCH value o Tham số: charset-value: tên của CHARSET dùng cho dữ liệu (tùy chọn); criteria-list: danh sách các tiêu chí tìm kiếm. o Trả lời: Yêu cấu có một trả lời không thẻ: SEARCH.
o Kết quả: OK – thực hiện lệnh thành công NO – không thể tìm kiếm trên CHARSET hoặc tiêu chuẩn chỉ định. BAD – không nhận ra lệnh hoặc tham số không hợp lệ
o Ý nghĩa: Lệnh SEARCH tìm trong hộp thư các thư thỏa tiêu chí. Tiêu
chí tìm kiếm (2) bao gồm một hay nhiều khóa tìm kiếm được (liên kết
với nhau bằng mệnh đề AND). Khóa tìm kiếm có thể chỉ có một mình
tên khóa hoặc kèm thêm giá trị ứng với khóa đó, giá trị này không phân
biệt hoa thường. Một khóa được xem là thỏa khi giá trị của khóa đó có
chứa trong thư. Kết quả trả về là danh sách các số thứ tự (sequence number) của các thư thỏa điều kiện chứa trong trả lời không thẻ SEARCH từ server. Các khóa được dùng: ALL tất cả các tin nhắn trong hộp thư ANSWERED các tin nhắn có cờ \Answered BCC BEFORE ngày cần tìm CC DELETED các tin nhắn có cờ \Deleted DRAFT các tin nhắn có cờ \Draft FLAGGED các tin nhắn có cờ \Flagged FROM HEADER 61 Chương 4: Các giao thức trong gởi nhận E-mail KEYWORD LARGER NEW các tin nhắn có cờ \Recent nhưng không có cờ \Seen NOT OLD các tin nhắn không có cờ \Recent ON OR RECENT các tin nhắn có cờ \Recent SEEN các tin nhắn có cờ \Seen SENTBEFORE ngày chỉ định SENTON định SENTSINCE sau ngày chỉ định SINCE định SMALLER SUBJECT TEXT thân TO UID UNANSWERED các tin nhắn không có cờ \Answered UNDELETED các tin nhắn không có cờ \Deleted UNDRAFT các tin nhắn không có cờ \Draft UNFLAGGED các tin nhắn không có cờ \Flagged 62 Chương 4: Các giao thức trong gởi nhận E-mail UNKEYWORD UNSEEN các tin nhắn không có cờ \Seen o Ví dụ: C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM "Smith" S: * SEARCH 2 84 882
S: A282 OK SEARCH completed
C: A283 SEARCH TEXT "string not in mailbox"
S: * SEARCH
S: A283 OK SEARCH completed Lệnh FETCH:
o Cấu trúc: FETCH number-range) o Tham số: sequence-number: số thứ tự của message; sequence-number-
range: dãy các message liên tiếp (M:N); macro:nhãn; address: địa chỉ
phần dữ liệu. o Trả lời:
o Kết quả: OK – thực hiện lệnh thành công NO – Không thể tải dữ liệu
BAD – Không nhận ra lệnh hoặc tham số khônt hợp lệ
o Ý nghĩa: Lệnh FETCH nhận về dữ liệu của thư có số thứ tự (1) trong hộp thư. Có thể nhận về toàn bộ hoặc một phần dữ liệu. Có 3 nhãn thường sử dụng: - ALL tương đương: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
- FAST tương đương: (FLAGS INTERNALDATE RFC822.SIZE)
- FULL tương đương: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY) Một số định nghĩa các thành phần của thư có thể được lấy về: - BODY
- BODY[section] Partial là đoạn dữ liệu trong phần dữ liệu ứng với section, thành phần này gồm offset và số byte dữ liệu từ offset đó.
Giá trị của section có thể là một giá trị số hoặc các giá trị sau: HEADER,
HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, TEXT. Nếu giá trị của
section là rỗng thì dữ liệu nhận về là toàn bộ nội dung message gồm cả phần
header. 63 Chương 4: Các giao thức trong gởi nhận E-mail Mỗi message ít nhất có 1 phần được đánh số. Các đánh số và ý nghĩa của các giá trị section được nói rõ trong phụ lục “”.
Cờ \Seen ngầm được gán cho message. - BODY.PEEK[section] Giống với BODY[section] - BODYSTRUCTURE Lấy về thông tin cấu trúc của message. - ENVELOPE Lấy về cấu trúc phần header của message. - FLAGS Tập hợp các cờ trạng thái được gán cho message. - INTERNALDATE Thông tin ngày của message. - RFC822 Có chức nắng giống BODY[], chỉ khác ở cấu trúc dữ liệu trả về (RFC822). - RFC822.HEADER Có chức năng giống BODY.PEEK[HEADER], chỉ khác ở cấu trúc dữ liệu trả về. - RFC822.SIZE Kích thước của message. - RFC822.TEXT Có chức năng giống BODY[TEXT], chỉ khác ở cấu trúc dữ liệu trả về. - UID Giá trị UID của message o Ví dụ: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) S: * 2 FETCH ....
S: * 3 FETCH ....
S: * 4 FETCH ....
S: A654 OK FETCH completed Lệnh STORE: o Cấu trúc: STORE number-range) o Trả lời: Các câu trả lời không thẻ: FETCH
o Kết quả: 64 Chương 4: Các giao thức trong gởi nhận E-mail o Ý nghĩa: Lệnh STORE thay đổi nội dung của thư trong hộp thư. Thông
thường, thông tin dữ liệu cập nhật sẽ được trả về trong trả lời không thẻ
FETCH từ server. Nếu sử dụng hậu tố “.SILENT” thì sẽ không trả về
kết quả cập nhật.
Một số giá trị có thể được cập nhật: FLAGS giá trị mới cập nhật. FLAGS.SILENT message nhưng không trả về giá trị mới cập nhật. +FLAGS message, trả về giá trị mới cập nhật. +FLAGS.SILENT cờ của message, không trả về giá trị mới cập nhật. -FLAGS message, trả về giá trị mới cập nhật. -FLAGS.SILENT cờ của message, trả về giá trị mới cập nhật. o Ví dụ: C: A003 STORE 2:4 +FLAGS (\Deleted)
S: * 2 FETCH (FLAGS (\Deleted \Seen))
S: * 3 FETCH (FLAGS (\Deleted))
S: * 4 FETCH (FLAGS (\Deleted \Flagged \Seen))
S: A003 OK STORE completed Lệnh UID: o Cấu trúc: UID NO – Lệnh thực hiện thất bại.
BAD – Không nhận ra lệnh hoặc tham số không hợp lệ
o Ý nghĩa: Lệnh UID có 2 dạng sử dụng. Thứ nhất là dùng như là một
tham sọ trong các lệnh COPY, FETCH, STORE để thay thế các giá trị
số thứ tự bằng giá trị UID của message. Cách dùng thứ hai là làm tham
số trong lệnh SEARCH, với cách dùng này thì giá trị trả về là các UID
của các message được tìm thấy thay cho các số thứ tự của các message
đó.
o Ví dụ: C: A999 UID FETCH 4827313:4828442 FLAGS
S: * 23 FETCH (FLAGS (\Seen) UID 4827313)
S: * 24 FETCH (FLAGS (\Seen) UID 4827943) 65 Chương 4: Các giao thức trong gởi nhận E-mail S: * 25 FETCH (FLAGS (\Seen) UID 4828442)
S: A999 OK UID FETCH completed Lệnh COPY: o Cấu trúc: COPY number-range) o Tham số: sequence-number: số thứ tự của message; sequence-number-
range: dãy các message liên tiếp (M:N); dest-mail-box: tên hộp thư đích. o Trả lời: Không có trả lời đặc biệt cho câu lệnh này
o Kết quả: OK – thực hiện lệnh thành công NO – lệnh thất bại, không thể sao chép message hoặc tên hộp thư không đúng. BAD – Không nhận ra lệnh hoặc tham số không hợp lệ.
o Ý nghĩa: Lệnh COPY sao chép các message có số thứ tự trong tham số
(1) của hộp thư đang được chọn sang hộp thư đích. Các thông tin của
message mới chép qua giữ nguyên thông tin gốc nhưng được gán thêm
cờ \Recent. o Ví dụ: C: A003 COPY 2:4 MEETING
S: A003 OK COPY completed 66 Chương 5: Push E-mail và Pull E-mail Chương 5: Push e-mail và Pull e-mail 5.1 Push e-mail:
Push mail là cơ chế mà server mail sẽ hỗ trợ cho phép đẩy mail về client khi
server nhận được mail mới. Quá trình này xảy ra ngay lập tức ngay khi server nhận
được mail. Push E-mail là một nhu cầu của người dùng khi mà họ luôn muốn rằng “Bất cứ
khi nào có e-mail gửi vào hộp thư thì phải thông báo ngay lập tức cho tôi biết.”. Khái
niệm ngay lập tức ở đây có nghĩa là vài giây thay vì vài giờ hay vài ngày. Một số yêu
cầu khi xây dựng một ứng dụng push e-mail: - Người dùng có thể điều khiển quá trình nhận mail, không phải hễ có mail là tải về ngay lập tức. - Người dùng có thể tắt/mở chế độ push mail. Cơ chế push mail được ứng dụng rộng rãi nhất trong các thiết bị cầm tay, ví dụ như điện thoại BlackBerry của Research In Motion. 5.1.1 Push e-mail trên điện thoại BlackBerry:
Hãng RIM (Research In Motion) đã đi tiên phong trong việc ứng dụng pushmail, áp dụng cho các sản phẩm điện thoại BlackBerry. Gói dành cho cá nhân BIS (BlackBerry Internet Service): Là dịch vụ pushmail áp dụng cho các khách hàng cá nhân (POP3/IMAP) hoặc không có server mail riêng mà sử dụng các tài khoản miễn phí như Yahoo, Gmail,
MSN, Hotmail. Người sử dụng cung cấp username/password khi cài đặt tiện ích email
trên máy đầu cuối BlackBerry. Khi thực hiện việc nhận / gửi mail thì chương trình
quản trị email trên máy BlackBerry sẽ kết nối với hệ thống Network Operating Center
(NOC) của RIM qua GPRS. Hình 5.1 - Mô hình BIS của Research In Motion
(Nguồn: www.BlackBerry.com) Gói dành cho doanh nghiệp (BlackBerry Enterprise Server): 67 Chương 5: Push E-mail và Pull E-mail Là dịch vụ áp dụng cho các khách hàng là doanh nghiệp, tổ chức có hệ thống email riêng của doanh nghiệp. Máy chủ email của doanh nghiệp sẽ cài thêm phần
mềm BES, quá trình push email giữa email của doanh nghiệp và máy BlackBerry sẽ
thông qua máy chủ cài BES của doanh nghiệp. 5.1.2 Push e-mail trên Microsoft Exchange:
Microsoft Exchange Server là một máy chủ phát triển bởi Microsoft. Nó là một phần của dòng máy chủ Microsoft, được sử dụng bởi các doanh nghiệp có sử dụng
giải pháp cơ sở hạ tầng Microsoft. Máy chủ này có các tính năng chính bao gồm E-
mail, lịch, địa chỉ liên lạc, lịch công việc hỗ trợ cho dòng thiết bị di động. Các thiết bị
di động sử dụng máy chủ này lấy thông tin thông qua mạng Internet. Hình 5.2 - Microsoft Exchange 1.0
(Nguồn: www.Wikipedia.org) Dòng máy chủ này được phân phối kể từ ngày 11 tháng 6 năm 1996. Hiện nay phiên bản mới nhất là Microsoft Exchange Server 2010 Edition RTM – ra đời vào
ngày 9 tháng 11 năm 2009. Được viết trên ngôn ngữ C, C++, sử dụng hệ điều hành
Microsoft Windows platform x86 và x64. 5.2 Pull e-mail:
Pull mail là cơ chế nhận mail bằng cách: Client sẽ gởi thông điệp cho server, client có thể biết được server có mail mới hay không. Nếu có mail mới, client sẽ nhận
mail mới này về client cho người dùng sử dụng. 68 Chương 5: Push E-mail và Pull E-mail Thông thường Pull mail được thực hiện trong 1 khoảng thời gian nhất định.
Không liên tục như Push mail. Pull mail có thể khắc phục tình trạng này bằng cách
gởi thông điệp liên tục cho server. Nhưng việc này chỉ thuận lợi khi đường truyền tốt
và kết nối giữa client và server bền vững. Nếu kết nối giữa Server và client không bền vững, hoặc có sự cố về đường
truyền. Client có thể bị timeout và không thể nhận được mail mới từ server. Thông
thường người ta khắc phục bằng cách dừng một khoảng thời gian giữa những lần pull
mail. 69 Chương 6: các kĩ thuật xử lý trong ứng dụng Chương 6: Các kĩ thuật xử lí trong ứng dụng 6.1 Các giải pháp về vấn đề nhận e-mail: Trong ứng dụng mail, việc nhận mail có thể được thực hiện thông qua 2 giao thức POP3 và IMAP, với các đặc điểm khác nhau của 2 giao thức này mà ta có 2 cách
thức nhận mail cũng khác nhau: 6.1.1 Nhận mail với giao thức POP3: Nhận xét: Như đã đề cập ở trên, giao thức POP3 hỗ trợ ít lệnh do đó có nhiều hạn chế
trong việc nhận mail. Cụ thể, POP3 không có lệnh nào để nhận biết được cấu trúc
MIME của một e-mail và cũng không hỗ trợ khả năng tải một phần dữ liệu trong cấu
trúc của mail về client. Do đó, khi làm việc với POP3, nếu muốn đọc nội dung của
một mail, ta buộc phải tải toàn bộ nội dung của mail đó về. Điều này dẫn đến trường
hợp phải tải luôn nội dung của các tập tin kèm theo mail đó. Nếu kích thước những tập
tin này lớn và người dùng chỉ quan tâm đến nội dung của mail thì cũng không có cách
nào cải thiện được quá trình nhận mail. Hướng giải quyết:
Nhận về thông tin tóm tắt của message:
Lệnh TOP trong POP3 cho phép nhận về toàn bộ phần header của mail và N dòng phần nội dung bên trong. Nếu ta cho tham số N này có giá trị là 0 thì dữ liệu nhận về chỉ là nội dung phần header. TOP Nhờ vậy ta có thể sử dụng cách này để lấy về thông tin người gửi, tiêu đề đề hiển thị trong danh sách các email mà không phải tải toàn bộ nội dung của từng mail. Nhận về toàn bộ message:
Lệnh RETR trả về toàn bộ nội dung của message, bao gồm nội dung của các attachment. Nếu kích thước attachment này lớn, nếu bộ nhớ của thiết bị không đủ lớn
có thể sẽ gây ra lỗi chương trình. Vấn đề đặt ra là có cách nào cải thiện vấn để này. Hướng giải quyết được đề nghị là xây dựng hàm nhận dữ liệu đặc biệt. Khi nhận từng dòng dữ liệu trả về, ta kiểm tra để nhận biết đó là một attachment hay
không. Ta sẽ lưu nội dung attachment này xuống một file tạm và thay nội dung của
part tương ứng bằng định danh của file tạm này. Với cách giải quyết này, kích thước
của một message lưu trong bộ nhớ chương trình sẽ không lớn và giải quyết được vấn
đề trên. 70 Chương 6: các kĩ thuật xử lý trong ứng dụng Tuy nhiên, các dòng máy BlackBerry hiện nay có không gian bộ nhớ khá lớn,
có thể lưu trữ được hầu hết các kích thước mà các server mail có thể hỗ trợ hiện nay,
do đó ta có thể bỏ qua vấn đề này khi xây dựng ứng dụng. 6.1.2 Nhận mail với giao thức IMAP: Nhận xét: Với IMAP, tập hợp các lệnh nhiều hơn giúp ta có thể xác định được cấu trúc MIME của mail, cũng như tải về nội dung một phần trong cấu trúc đó. Việc nhận mail
trở nên nhanh hơn so với giao thức POP3. Hướng giải quyết: Ta xây dựng nhận mail bằng IMAP theo hướng sau: Nhận về header của mai để hiển thị trong danh sách: Lệnh FETCH cho phép ta tải về nội dung của một mail theo từng phần (address). Khi giá trị address là
HEADER thì nội dung tải về là toàn bộ phần header của mail đó. FETCH Nhận về nội dung của mail mà không kèm theo nội dung của các tập tin đính kèm:
Đấu tiên ta lấy về thông tin cấu trúc MIME bằng cách sử dụng lệnh: FETCH Tiếp theo, ta sẽ tiến hành tự đóng gói một message tương tự như khi lấy toàn bộ thông tin của mail. Để làm được điều này ta sẽ duyệt qua cấu trúc MIME vừa nhận
được, ta có thể biết được phần nào trong cấu trúc này là attachment cùng với thông tin
tên tập tin đó. Bằng cách này ta sẽ lần lượt tải nội dung từng phần và gắn vào mail,
nếu phát hiện phần chuẩn bị gắn vào thì ta sẽ bỏ qua không tải nội dung về, thay vào
đó ta sẽ ghi thông tin có cấu trúc sau: Attachment(1)(2)(3)[4] Trong đó: (1): loại của phần dữ liệu đó
(2): phần mở rộng cụ thể
(3): dạng encode của dữ liệu
(4): địa chỉ của phần đó trong cấu trúc MIME 6.1.3 Hiển thị nội dung một e-mail:
Mail được hiển thị luôn có cấu trúc MIME với nhiều phần (MultiPart). Các loại part có thể là Image, Audio, Video, Application, Text hoặc là một MultiPart khác.
Với 2 giao thức POP3 và IMAP tùy có cách nhận dữ liệu khác nhau, song kết quả trả 71 Chương 6: các kĩ thuật xử lý trong ứng dụng về cuối cùng vẫn là một cấu trúc dạng Message chung và có cách thức hiển thị như
nhau: Hiển thị thông tin chính: Ta sẽ duyệt qua lần lượt tất cả các part trong message, nếu part đang xét không phải là một attachment (thường là kiểu TEXT) ta sẽ gắn thêm một field thông tin lên
màn hình. Các đời máy BlackBerry hiện nay sử OS 5.0 có hỗ trợ BrowserField do đó
trong phần xử lí hiển thị thông tin ta cũng kiểm tra xem nếu là multipart dạng
alternative và có part dạng text/html thì ta ưu tiên hiển thị dạng HTML cho người
dùng. Với các part là attachment thì ta có cách xử lí để lưu thông tin attachment này. Lưu tạm các attachment trong e-mail: Trong mỗi màn hình hiển thị message, ta sẽ tạo một bảng lưu trữ thông tin các
attachment, với key là tên của attachment và value là nội dung của attachment (POP3)
hoặc định danh của attachment (IMAP), giá trị định danh này sẽ bị thay thế bằng nội
dung của attachment khi người dùng chọn tải attachment về máy. Lưu attachment: Duyệt qua tất cả các trường trong bảng thông tin attachment. Với mỗi trường, lấy thông tin tên attachment, cho phép người dùng đổi tên và chọn đường dẫn lưu file.
Kiểm tra giá trị của trường, nếu là nội dung attachment thì lưu xuống file; nếu là định
danh thì ta dựa vào định danh này để tải nội dung attachment về lưu xuống máy. 6.2 Các giải pháp về vấn đề gửi e-mail: 6.2.1 Gửi e-mail dạng HTML: Đặt vấn đề: Việc soạn thảo trên điện thoại di động có nhiều hạn chế cho nên hiện không có nhiều ứng dụng gửi mail trên thị trường hỗ trợ tính năng này. Dựa trên tư tưởng của
gửi mail dạng template, ứng dụng sẽ hỗ trợ người dùng gửi mail dạng HTML. Tính
năng này rất hữu ít khi người dùng muốn gửi mail kèm theo một thông tin có định
dạng đặc biệt như thông tin địa chỉ, ... Hướng giải quyết: Cho phép người dùng chèn nội dung từ một file bên ngoài (có thể chứa các thẻ
HTML). Trong giai đoạn đóng gói message để gửi đi, kiểm tra xem nội dung có định
dạng HTML. Nếu có ta sẽ tạo ra một message dạng multipart/alternative và chèn part
text/html vào. 72 Chương 6: các kĩ thuật xử lý trong ứng dụng 6.2.2 Gửi mail cho các địa chỉ khác nhau theo một mẫu E-mail cụ thể:
Khi người dùng sử dụng mẫu E-mail, trong quá trình gởi E-mail chương trình
sẽ tự thay đổi nội dung mẫu E-mail để phù hợp với nội dung của từng địa chỉ E-mail
nhận. Hình 6.1 - Quá trình chuyển đổi mẫu E-mail khi gởi mail tới một người dùng Người dùng có thể thêm, xóa, sửa các mẫu E-mail trong chương trình để sử dụng. Khi sử dụng một mẫu E-mail, chương trình sẽ tự phân tích cấu trúc mẫu E-mail
và danh sách địa chỉ người nhận để sửa nội dung E-mail phù hợp với từng người nhận
cụ thể. 6.3 Các giải pháp về vấn đề giả lập Push e-mail: Đặt vấn đề: Đối với nhiều người, nhu cầu nhận E-mail ngay lập tức khi có E-mail mới là
một nhu cầu hết sức cần thiết. Nhất là đối với các nhà doanh nghiệp, người sử dụng
sàn giao dịch chứng khoán.v.v. nhu cầu này lại càng rõ rệt. Đối với các thiết bị hỗ trợ Push mail, nhu cầu này dễ dàng được đáp ứng. Nhưng đối với một số thiết bị không hỗ trợ Push mail, hoặc Server E-mail không hỗ
trợ Push mail, giải pháp đặt ra là làm sao để có thể push mail đối với các thiết bị hay
server này. BlackBerry là một thiết bị có hỗ trợ Push E-mail mạnh mẽ và tiện dụng. Nhưng đối với một số nhà phát hành dịch vụ mạng không hỗ trợ dịch vụ Push E-mail, nhu
cầu Push E-mail của người dùng sử dụng các dịch vụ mạng này vẫn rất lớn. Quan
trọng là làm sao để có thể xây dựng chế độ giả lập Push E-mail một cách tiện lợi cho
người dùng. Hướng giải quyết: Giải pháp xây dựng giả lập Push E-mail sử dụng ở đây là sử dụng Pull E-mail. Người dùng có nhu cầu lấy E-mail mới sẽ thiết lập một cấu hình E-mail cần lấy E- 73 Chương 6: các kĩ thuật xử lý trong ứng dụng mail, thiết lập thời gian giữa những lần lấy E-mail để chương trình có thể tự động lấy
E-mail và hiển thị cho người dùng. Sau một khoảng thời gian xác định, chương trình sẽ gởi yêu cầu đến server mà cấu hình E-mail đã thiết lập từ trước. Lấy thông tin E-mail mới về và hiển thị cho
người dùng. Quá trình này lặp đi lặp lại đến khi người dùng thoát chương trình hoặc
không có nhu cầu sử dụng tính năng này nữa. Người dùng thiết lập cấu hình
E-mail và thời gian nhận Chương trình áp dụng thiết lập
E-mail và bắt đầu bộ đếm giờ Có E-mail
mới Chương trình gởi yêu cầu đến
Server Hiển thị thông báo
E-mail mới cho
người dùng Người dùng
chọn đọc E-
mail Lặp đi lặp
lại Hiển thị danh sách E-
mail mới cho người
dùng Hình 6.2 - Quá trình tự động nhận E-mail của chương trình
Sau một khoảng thời gian chương trình lại gởi yêu cầu tới Server để nhận thông tin về E-mail mới. o Nếu có E-mail mới, chương trình sẽ hiển thị thông báo cho người dùng.
o Nếu người dùng chọn đọc, chương trình sẽ lấy E-mail mới về hiển thị cho người dùng và tiếp tục vòng lặp. o Nếu người dùng chọn không, chương trình sẽ lặp lại vòng lặp nhận E-mail.
o Nếu không có E-mail mới, chương trình sẽ lặp lại vòng lặp nhận E-mail. 74 Chương 6: các kĩ thuật xử lý trong ứng dụng 6.4 Các giải pháp về vấn đề xây dựng ứng dụng Push e-mail thực sự: Pull E-mail là một giải pháp không tốt: Pull E-mail là một giải pháp cơ bản để
các thiết bị email kết nối tới server và truy xuất các messages. Điểm tốt của cách này
là người dùng có thể quản lý việc truy cập server, chỉ truy cập khi cần kiểm tra e-mail.
Với nhu cầu tự động thông báo có e-mail mới, một cách giải quyết khác là giả lập
push mail – ứng dụng sẽ kết nối tới server để kiểm tra sau những khoảng thời gian
định kì. Tuy nhiên điểm hạn chế của phương pháp này là: - Truy cập mạng thường xuyên để kiểm tra e-mail sẽ tốn nhiều tài nguyên thiết bị và tiền bạc của người dùng. - E-mail mới nhận về thực chất không ngay lập tức như push mail, tùy thuộc vào thời gian định kì được thiết lập. Giải pháp : IMAP IDLE - IMAP là lựa chọn hoàn hảo để xây dựng một ứng dụng Push E-mail cho các
thiết bị di động. Bằng việc sử dụng lệnh IDLE, e-mail mới sẽ được thông báo
ngay lập tức. - Cách thức hoạt động của lệnh IDLE: IMAP hoạt động trên Client sẽ phát sinh các lệnh gửi cho server, server sẽ đáp lại 2 thông tin sau: 1. Một trả lời cho yêu cầu từ Client
2. Thông tin có bất kì message nào? Điều này có nghĩa là Client phải luôn kết nối với Server trong quá trình thực
hiện lệnh. Server sẽ trả lời cho Client khi có message mới. Nhưng có những
khó khăn khi thực hiện cách trên trên thiết bị di động: 1. Vấn đề timeout: Kết nối thường timeout sau 30 phút chưa kể đến việc
timneout khi sử dụng cơ chế NAT Gateway. Có thể khắc phục bằng
cách gửi lệnh NOOP sau khoảng 15 phút để kích hoạt lại kết nối hiện
có. 2. Mất địa chỉ IP: Với các thiết bị di động IP thay đổi thường xuyên do đó kết nối cũng dễ mất đi và phải kết nối lại. Với những khó khăn trên đã thúc đẩy đến việc xây dựng một hệ thống Push E-
mail để giải quyết các khó khăn trên, đó là xây dựng một Push E-mail Server.
Đó là xây dựng một server chuyên vai nhiệm vụ kết nối với các Mail Server để
kiểm tra mail mới và thông báo lại cho các thiết bị di động. Việc xây dựng một
hệ thống thế này tuy tốn nhiều chi phí nhưng đáp ứng tốt nhu cầu Push E-mail
hiện nay. Ý tưởng: PUSH E-MAIL với IMAP IDLE 75 Chương 6: các kĩ thuật xử lý trong ứng dụng Hình 6.3 - Mô hình hệ thông PUSH E-MAIL. - Xây dựng một ứng dụng server (Push Mail Server) có chức năng: Cho người dùng đăng kí tài khoản.
Cho người dùng đăng kí dịch vụ push mail bằng các tài khoản mail của các server hiện có.
Ghi chú: Việc đăng kí có thể bằng điện thoại hoặc bằng PC.
Truy cập vào các mail server bằng tài khoản người dùng đăng kí.
Thông báo cho client khi có mail mới. - Xây dựng ứng dụng client có chức năng: Truy cập vào mail server để lấy mail về.
Thao tác trên các mail. Cách thức hoạt động: - B1: Người dùng sử dụng thiết bị di động hoặc PC truy cập vào website của hệ
thống để đăng kí tài khoản người dùng. Tài khoản này dùng để đăng nhập mỗi
khi Client có nhu cầu sửa đổi thông tin. 76 Chương 6: các kĩ thuật xử lý trong ứng dụng - B2: Đăng nhập bằng tài khoản vừa đăng kí.
- B3: Chọn chức năng đăng kí dịch vụ Push mail.
- B4: Nhập thông tin, thiết lập cấu hình (có thể thay đổi cấu hình) Các thông tin chính gồm: Tài khoản mail (Yahoo, Gmail, Hotmail, ...)
Thông tin mail server
Số điện thoại dùng để gửi tin nhắn báo hiệu có e-mail mới.
Chế độ PUSH hiện tại (ON/OFF)
Mã pin và IMEI của máy để server quản lý. - B4: Server giao tiếp với các mail server để kiểm tra: Với mỗi tài khoản đăng kí, nếu chế độ PUSH là ON sẽ sử dụng thông tin
để đăng nhập vào mail server. Vì Push Server có tốc độ xử lý nhanh nên
việc chuyển đổi và xử lý nhiều tải khoản coi như là liên tục và song
song. Dùng lệnh IDLE để kiểm tra mail mới: Lệnh IDLE của IMAP có 1 đặc
điểm nổi bật là server sẽ không có trả lời cho tới khi có mail mới. (Các
kĩ thuật duy trì kết nối) Khi có mail mới, push server gửi 1 tin SMS cho số điện thoại của client (sử dụng các dịch vụ mạng hiện có) Chú ý: Ngoài cách trên còn có các cách xử lí khác (nhưng không tốt): Push server lấy mail mới về và gửi cho client - B5: Client nhận tin SMS từ server, có 2 cách xử lí trong trường hợp này: Client mở ứng dụng để đọc mail.
Tự động khởi động ứng dụng khi có tin SMS từ push server.
Client thao tác trực tiếp với mail server khi đọc mail. - B6: Client có thể thay đổi chế độ PUSH thành ON/OFF (Phải đăng nhập vào hệ thống). 6.5 Các giải pháp về vấn đề lưu trữ thông tin trong ứng dụng: 6.5.1 Lưu trữ thông tin về ứng dụng:
Đặt vấn đề: Bất kì chương trình có dữ liệu nào cũng có một yêu cầu đặt ra, đó là yêu cầu
lưu trữ dữ liệu của chương trình đó. Nhu cầu đặt ra ở đây là làm sao lưu trữ các dữ
liệu của chương trình một cách an toàn nhất, hiệu quả nhất và ít tốn không gian lưu trữ
nhất. Hướng giải quyết: Việc lưu trữ dữ liệu của ứng dụng có một số hướng giải quyết như sau: 77 Chương 6: các kĩ thuật xử lý trong ứng dụng Lưu trữ trực tiếp trên ứng dụng: o Ưu điểm: Việc lưu trữ và lấy dữ liệu ra sử dụng nhanh, lưu trữ dễ dàng, bảo mật tốt và không bị mất thông tin. o Khuyết điểm: Việc lưu trữ trực tiếp trong chương trình qua thời
gian sẽ làm chương trình trở nên nặng hơn, tốn nhiều không gian
bộ nhớ khi khởi động chương trình. Và nếu dữ liệu lưu trữ bị sai,
chương trình có thể bị lỗi. Lưu trữ trên tập tin trong hệ thống: o Ưu điểm: Lưu trữ dễ dàng, không bị mất dữ liệu khi khởi động lại máy. o Khuyết điểm: Việc lưu trữ trên tập tin hệ thống có thể bị nhiều khuyết điểm như: Dễ dàng bị di chuyển và thất thoát dữ liệu, khi bị di chuyển,
đổi tên hay thất thoát dữ liệu dễ xảy ra lỗi chương trình khi
không thể tìm thấy dữ liệu cần tìm. Về vấn đề bảo mật: Nếu lưu trữ không có biện pháp bảo mật,
người sử dụng dễ bị lộ thông tin nếu làm mất máy. Nếu có
bảo mật thông tin, chương trình phải thêm phần xử lý về bảo
mật, làm chương trình xử lý trở nên nặng nề hơn. Giải pháp khác:
Research In Motion OS cung cấp cho người dùng một giải pháp lưu trữ dữ liệu
của chương trình mình một cách dễ dàng, bảo mật tốt và không bị thất thoát thông tin:
Sử dụng Persistent Data. Giải pháp sử dụng: Persistent Data là một hỗ trợ của Research In Motion OS, giúp cho người dùng
có thể lưu trữ dữ liệu chương trình của mình trong bộ nhớ máy, tránh trường hợp thất
thoát dữ liệu khi khởi động lại máy, tháo pin và một số trường hợp có thể gây thoát
thoát dữ liệu khác. Persistent Data được lưu trữ trong bộ nhớ máy theo từng phần, mỗi phần được quản lý riêng biệt bằng một bảng Hash để chứa dữ liệu của chương trình. Mỗi phần
đều có một long ID để phân biệt với các dữ liệu thuộc chương trình khác. Hình 6.4 - Sơ đồ quản lý Persistent Data trong máy BlackBerry
(Nguồn:
http://www.codeproject.com/KB/Blackberry/EndToEndBlackBerryApp3.aspx) 78 Chương 6: các kĩ thuật xử lý trong ứng dụng Khi cần đọc dữ liệu của chương trình mình, người dùng cần cung cấp Long ID
đã được định nghĩa và lưu trữ sẵn từ trước, đồng thời cần phải cung cấp đầy đủ tên và
cấu trúc dữ liệu đã được lưu trữ để có thể lấy ra chính xác dữ liệu lưu trữ của mình và
sử dụng cho chương trình. Trong chương trình gởi và nhận mail trên BlackBerry, giải pháp lưu trữ dữ liệu sử dụng là giải pháp sử dụng Persistent Data. Chương trình sử dụng một lớp
GlobalResourceManager để lưu trữ mọi thông tin lưu trữ của chương trình. Mỗi
lần cần lưu trữ hoặc lấy ra sử dụng, chương trình kết nối với Persistent Store thông
qua Long ID đã được định nghĩa sẵn, lưu trữ và lấy dữ liệu để sử dụng cho chương
trình. Cách thức lưu trữ: Người dùng có thể lưu trữ bằng cấu trúc: PersistenObject.setContent(“Dữ liệu cần lưu trữ”)
PersistentObject.commit() : Lưu trữ dữ liệu Cách thức lấy dữ liệu: Người dùng có thể lấy dữ liệu trong Persistent Store thông
qua cấu trúc: PersistentStore.getPersistentObject(“Long ID
định nghĩa sẵn”). 6.5.2 Quản lý và sử dụng cấu hình E-mail:
Đặt vấn đề: Đối với một E-mail Client, nhu cầu của người dùng không chỉ dừng lại là gởi và nhận một E-mail nhất định. Nhu cầu của người dùng là rất lớn, một người có thể có
nhiều địa chỉ E-mail sử dụng cho nhiều mục đích khác nhau. Người dùng có thể sử
dụng một E-mail liên tục trong nhiều lần, vì vậy yêu cầu đặt ra là, làm sao có thể lưu
trữ và quản lý cấu hình E-mail một cách hiệu quả. Hướng giải quyết: Cách giải pháp đặt ra cho vấn đề sử dụng nhiều địa chỉ E-mail là: Tạo ra một khung cho phép người dùng điền các thông tin của địa chỉ E- mail mỗi khi cần đọc một E-mail cụ thể: o Ưu điểm: Người dùng có thể sử dụng một E-mail cụ thể bằng cách điền đầy đủ thông tin mỗi lần sử dụng. o Khuyết điểm: Người dùng mỗi khi sử dụng E-mail đều phải điền
thông tin lặp đi lặp lại, điều này gây cản trở trong quá trình sử dụng
E-mail. Nhất là đối với việc sử dụng E-mail trên thiết bị di động vì
các thiết bị này có khả năng nhập liệu khá hạn chế. Chương trình có thể quản lý các cấu hình E-mail thành một danh sách, giúp
người dùng có thể lựa chọn cấu hình E-mail cần sử dụng mỗi lần đọc E-
mail. Ngoài ra người dùng còn có thể thêm, xóa, sửa cấu hình E-mail tùy
thuộc mục đích sử dụng của mình. Ở đây chương trình sử dụng giải pháp
này Giải pháp được sử dụng: 79 Chương 6: các kĩ thuật xử lý trong ứng dụng Giải pháp sử dụng ở đây là sử dụng một danh sách để lưu trữ các cấu hình E-
mail mà người dùng mong muốn sử dụng: Khi cần sử dụng một E-mail, người dùng
thêm cấu hình E-mail này vào trong danh sách cấu hình E-mail. Chương trình sẽ lưu
trữ danh sách cấu hình E-mail này bằng cách lưu trữ dữ liệu như trên. Khi không cần
sử dụng cấu hình E-mail đó nữa. Người dùng có thể xóa cấu hình hoặc sửa cấu hình
tùy mục đích sử dụng. Hình 6.5 - Cấu trúc lưu trữ danh sách các cấu hình E-mail Một cấu hình E-mail được lưu trữ trong một lớp AccountConfig , danh sách cấu hình E-mail là một mảng bao gồm nhiều AccountConfig nằm trong lớp
GlobalResourceManager để lưu trữ và sử dụng. 6.5.3 Quản lý và sử dụng mẫu E-mail(Template): Đặt vấn đề: Khi sử dụng E-mail, người sử dụng có thể có nhu cầu sử dụng cùng một nội dung E-mail nhiều lần. Ví dụ như khi viết thư xin việc, thư giới thiệu.v.v. E-mail còn
là một công cụ để phân phối E-mail cho nhiều người, ví dụ như phân phối công việc
cho các nhân viên trong công ty. Ngoài ra, E-mail còn được sử dụng như một công cụ
quảng cáo. Trong quá trình sử dụng, người dùng có thể có nhu cầu gởi cùng 1 nội dung E-
mail cho nhiều địa chỉ, hoặc gởi E-mail cho người dùng với 1 nội dung, nhưng thông
tin nội dung có thể khác nhau một bộ phận nào đó, ví dụ như tên, địa chỉ E-mail.v.v. Ngoài ra, việc nhập liệu trên thiết bị di động rất hạn chế, đối với những E-mail dài và có nội dung phức tạp, việc soạn thảo trên điện thoại có thể gây khó khăn cho
người dùng. Yêu cầu đặt ra là sử dụng một nội dung có sẵn(Có thể đã được soạn thảo
từ máy tính) và sử dụng trong thiết bị di động. Hướng gải quyết: Có nhiều hướng giải quyết cho vấn đề sử dụng mẫu E-mail này: Ưu điểm:Người dùng có thể sử dụng mẫu E-mail dễ dàng và Định nghĩa sẵn một số mẫu E-mail có sẵn trong chương trình.
o
nhanh chóng. 80 Chương 6: các kĩ thuật xử lý trong ứng dụng o
Khuyết điểm: Các mẫu E-mail được định nghĩa trong chương
trình sẽ cố định, không thể thay đổi để phù hợp với yêu cầu của từng
người dùng cụ thể. Chương trình có thêm dữ liệu sẽ bị nặng khi sử dụng.
Cho phép người dùng chọn mẫu E-mail từ tập tin trong bộ nhớ máy:
o Ưu điểm: Người dùng có thể thêm mẫu E-mail mới để sử dụng tùy thuộc nhu cầu.
o Khuyết điểm: Người dùng muốn thêm hoặc sửa mẫu E-mail đều
phải thông qua một tác nhân bên ngoài, ví dụ như máy tính, các
mẫu E-mail lưu trữ ngoài có thể bị thất thoát hoặc thay đổi không
như mong muốn của người dùng
Cung cấp cho người dùng công cụ để quản lý, sử dụng và lưu trữ các
mẫu E-mail tùy theo nhu cầu sử dụng mẫu E-mail của mỗi người dùng:
Chương trình gởi và nhận E-mail sử dụng giải pháp này. Giải pháp được sử dụng: Giải pháp sử dụng ở đây là sử dụng một danh sách các mẫu E-mail để sử dụng
và lưu trữ các mẫu E-mail. Người dùng có thể thêm mới mẫu E-mail khi cần thiết, xóa
các mẫu E-mail không cần thiết và sử dụng chúng trong quá trình gởi E-mail. Khi người dùng thêm mới một mẫu E-mail, người dùng có thể chọn tự nhập liệu hoặc sử dụng một mẫu E-mail từ tập tin bên ngoài. Điều này giúp cho người dùng
có thể nhập liệu bằng chính thiết bị di động hoặc sử dụng máy tính để nhập liệu với
những mẫu E-mail phức tạp. Chương trình lưu trữ các mẫu E-mail trong lớp GlobalResourceManger,
mỗi mẫu E-mail được lưu trữ bằng lớp MailTemplate. Việc lưu trữ mẫu E-mail sử
dụng Persistent Store đã đề cập ở trên. 6.6 Các giải pháp về vấn đề tiếng Việt trong ứng dụng: Đặt vấn đề: Đối với người sử dụng tiếng Việt và các doanh nghiệp Việt Nam, nhu cầu sử
dụng tiếng Việt trong quá trình gởi và nhận E-mail là rất lớn. Tuy nhiên, không phải
bất kì dòng máy nào cũng hỗ trợ tiếng Việt một cách mạnh mẽ. Các dòng máy BlackBerry sử dụng hệ điều hành phiên bản 4.5 về trước đều sử dụng bảng mã Unicode Tổ Hợp(Composite Unicode), trong khi hiện nay người sử
dụng Unicode thường sử dụng loại Unicode dựng sẵn, và đa số các website Việt Nam
đều sử dụng Unicode dựng sẵn. Loại Unicode này hiển thị không tốt đối với các máy
phiên bản 4.5. Kể từ phiên bản 4.6, Research In Motion đã thêm vào font chữ Unicode dựng
sẵn, tuy nhiên việc hiển thị cũng không được tốt bằng việc hiển thị Unicode Tổ Hợp,
vốn đã được các dòng máy BlackBerry hỗ trợ từ rất lâu. 81 Chương 6: các kĩ thuật xử lý trong ứng dụng Nhu cầu sử dụng tiếng Việt trong soạn thảo E-mail cũng rất lớn. Trong khi các chương trình hiện tại chưa thể đáp ứng nhu cầu này. Và không phải dòng máy nào
cũng có thể hỗ trợ việc gõ tiếng Việt cũng như có font chữ tiếng Việt để hiển thị Hướng giải quyết:
Hướng giải quyết hiển thị tiếng Việt: Loại bỏ dấu để hiển thị tiếng Việt không dấu. Ưu điểm: Thực hiện nhanh, tiếng Việt không dấu dễ dàng hiển thị ở nhiều vùng khác nhau. Khuyết điểm: Người dùng sẽ khó đọc và dễ bị hiểu lầm từ tiếng Việt khi không bỏ dấu. Hiển thị tiếng Việt ở các dòng máy có hệ điều hành mới(Từ OS 4.6 trở lên). Ưu điểm: Hiển thị tiếng Việt tốt, không cần xử lý phức tạp.
Khuyết điểm: Hạn chế cho các dòng máy cũ. Chuyển tiếng Việt từ Unicode dựng sẵn thành Unicode tổ hợp: Chương trình sử dụng giải pháp này. Ưu điểm: Hiển thị tiếng Việt tốt ở tất cả dòng máy.
Khuyết điểm: Phải xử lý chuyển mã tiếng Việt mỗi khi phát hiện có tiếng Việt. Hướng giải quyết soạn thảo tiếng Việt: Sử dụng bảng AutoText có sẵn của chương trình: Đây là giải phảp hiện
đang được sử dụng nhiều đối với những người sử dụng BlackBerry ở Việt
Nam. Một bảng Auto Text bao gồm các chữ tiếng Việt thông dụng được
thiết lập sẵn trong máy, người dùng sẽ gõ tiếng Việt có dấu kiểu Telex. Ưu điểm: Có thể gõ tiếng Việt ở tất cả các chương trình trong máy. Khuyết điểm: Bảng chữ tiếng Việt còn hạn chế, việc thêm bảng mã khó khăn. Chương trình gởi và nhận mail BlackBerry sử dụng một bộ gõ riêng tích hợp vào chương trình để gõ tiếng Việt. Do cấu trúc bàn phím của thiết bị di động khác với cấu trúc bàn phím của
máy tính. Các phím số được nằm chồng trên các phím chữ, vì vậy việc gõ
tiếng Việt kiểu Vni rất khó khăn. Vì lý do này, chương trình sẽ gõ tiếng
Việt bằng kiểu Telex.
Giải pháp sử dụng: Chuyển Unicode dựng sẵn thành Unicode tổ hợp:
Mỗi một ký tự trong Unicode dựng sẵn đều có thể chuyển đổi tương đương
thành Unicode tổ hợp. Vì vậy việc chuyển đổi Unicode dựng sẵn thành Unicode tổ
hợp đơn thuần chỉ là việc thay đổi từng ký tự tương đương. Các ký tự Unicode dựng sẵn có thể tham khảo trong bảng sau: http://unicode.org/charts/case/chart_Latin.html Unicode tổ hợp Ký tự trong tiếng
Việt 82 Chương 6: các kĩ thuật xử lý trong ứng dụng Đ
Ă
Â
Ê
Ô
Ơ
Ư
Dấu sắc
Dấu huyền
Dấu hỏi
Dấu ngã
Dấu nặng \u0111
\u0103
\u00e2
\u00ea
\u00f4
\u01a1
\u01b0
\u0301
\u0300
\u0309
\u0303
\u0323
Bảng 6.1 - Các ký tự Unicode tổ hợp Đối với việc đọc và hiển thị tiếng Việt: Khi đọc và hiển thị một E-mail, chương trình sẽ kiểm tra E-mail đó có chứa nội
dung tiếng Việt không thông qua hàm hasNormalizableCharacters() của lớp
UnicodeNormalizer(). Hàm này có chức năng kiểm tra có kí tự tiếng Việt trên
bảng trên hay không. Nếu có nội dung tiếng Việt thì sử dụng hàm normalize() để chuyển mã từ
Unicode dựng sẵn thành Unicode Tổ hợp. Hàm này có chức năng chuyển đổi tương
đương giữa unicode tổ hợp và unicode dựng sẵn như bảng trên. Đối với việc ghi tiếng Việt: Việc ghi tiếng Việt trong chương trình là quá trình kiểm tra và thay đổi từng ký tự người dùng gõ tương ứng với các ký tự trong bảng mã Unicode Tổ hợp. Khi người dùng ghi 1 ký tự, chương trình sẽ kiểm tra xem ký tự đó có nằm trong bảng mã unicode tổ hợp không và thay thế tương ứng các ký tự đó bằng các ký
tự Unicode Tổ hợp. Việc kiểm tra và thay thế này được thực hiện bằng các hàm trong
lớp VietnameseParser. 6.7 Các giải pháp về vấn đề đa ngôn ngữ: Đặt vấn đề: Vấn đề đa ngôn ngữ là một vấn đề cần thiết đối với một ứng dụng. Một ứng dụng được phát triển đa ngôn ngữ có thể sử dụng bởi nhiều người của nhiều quốc gia
với ngôn ngữ khác nhau. Khi một chương trình có hỗ trợ đa ngôn ngữ, người dùng có thể sử dụng
chương trình với ngôn ngữ phù hợp cho mình. Giúp chương trình có thể phát triển đáp
ứng được nhiều người dùng khác nhau. Giải pháp: 83 Chương 6: các kĩ thuật xử lý trong ứng dụng Research In Motion cung cấp cho người phát triển ứng dụng khả năng lập trình đa ngôn ngữ thông qua nhóm lớp net.rim.device.api.i18n . Nhóm lớp này
cung cấp cho người phát triển ứng dụng các lớp dùng để phát triển ứng dụng đa ngôn
ngữ một cách dễ dàng thông qua các lớp hỗ trợ. Người phát triển ứng dụng có thể phát triển ứng dụng đa ngôn ngữ dễ dàng thông qua resource được hỗ trợ sẵn của Research In Motion. Để thêm một ngôn ngữ,
người dùng có thể thêm vào resource ứng với ngôn ngữ đó. Lớp
CompiledResourceBundle sẽ quản lý các resource này. Để thay đổi ngôn ngữ tương ứng, có thể sử dụng lớp Locale. Lớp này hỗ trợ
biểu diễn và quản lý các thông tin liên quan tới ngôn ngữ, múi giờ ứng với từng Quốc
Gia. Khi người dùng thay đổi thông tin trong Locale, ứng dụng sẽ tự động chuyển
các thông tin về múi giờ, ngôn ngữ qua quốc gia phù hợp với thông tin trong Locale
đó. Dựa vào điều này, người phát triển ứng dụng có thể xây dựng chương trình đa
ngôn ngữ bằng cách thêm resource một cách dễ dàng. Ứng dụng phát triển ứng dụng
gởi và nhận mail trên Blackberry hỗ trợ 2 ngôn ngữ chính là tiếng Anh và tiếng Việt. 84 Chương 7: Phân tích và thiết kế Chương 7: Phân tích và thiết kế 7.1 Khảo sát hiện trạng Hiện nay, công nghệ thông tin đang phát triển mạnh mẽ và đang dần trở thành
nền công nghiệp mũi nhọn trong ngành công nghiệp của nhiều quốc gia. Bên cạnh sự
phát triển của công nghệ thông tin, Internet cũng đang khẳng định vị thế không thể
thiếu của mình. Trong đó phải kể đến lĩnh vực thư điện tử(E-mail). Có thể nói, sự ra
đời của thư điện tử đã đáp ứng được nhu cầu giao tiếp và thông tin từ xa của con
người. Cùng với sự phát triển của công nghệ thông tin và Internet, thư điện tử cũng đã và đang phát triển mạnh mẽ. Rất nhiều địa chỉ thư đã xuất hiện, các giao thức về thư
điện tử cũng như khả năng trợ giùp con người càng ngày càng phát triển. Nhu cầu của
con người về thư điện tử rất lớn: gởi thư cho gia đình, liên lạc với đối tác, gởi thư
thông báo cho nhân viên của một công ty.v.v. Vì vậy không chỉ các công ty ứng dụng
truyền thông quan tâm tới thư điện tử, mà ngay cả những công ty, hay cá nhân đều
quan tâm tới nó. Nhu cầu về thư điện tử của con người là rất cao. Đáp ứng nhu cầu đó, rất nhiều công cụ trợ giúp con người về thư điện tử đã ra
đời. Nhất là sự ra đời của các thiết bị di động. Các thiết bị di động ra đời đã đáp ứng
được nhu cầu di chuyển và sử dụng thư điện tử một cách nhanh chóng và tiện lợi.
Trong các thiết bị đó, không thể không kể đến BlackBerry của hãng Research In
Motion, một thiết bị đáp ứng nhu cầu thư điện tử của con người rất lớn và đang được
ưa chuộng. Nhu cầu đặt ra là làm sao để có được ứng dụng hỗ trợ con người tốt nhất
về vấn đề thư điện tử này. 7.2 Xác định yêu cầu: Mục tiêu của đề tài là xây dựng một chương trình gởi và nhận mail trên thiết bị di động, cụ thể là điện thoại di động BlackBerry của hãng Research In Motion. Các yêu cầu của chương trình: STT
1 Chức năng
Đọc mail 2 Chú thích
Chọn hòm thư cần đọc mail, hiện tất cả mail trong
hộp thư đó ra cho người dùng.
Thêm cấu hình mail Thêm hòm mail mới, bao gồm các thông tin:
username, password, giao thức và server gởi/nhận
mail. 3 Chỉnh sửa tùy chọn Tùy chỉnh các tùy chọn khi đọc mail như ngôn ngữ, 4 Hỗ trợ tiếng Việt 5 Viết mail sử dụng wifi.v.v.
Chương trình có hỗ trợ đọc và viết mail bằng tiếng
Việt.
Chương trình cho phép người dùng có thể viết mail 85 Chương 7: Phân tích và thiết kế Attach file 6 năng 7 Chức
push/pull mail 8 9
10 11 12 Gởi mail cho nhiều
địa chỉ
Xóa mail
Hỗ trợ nhiều cơ chế
mail khác nhau
Hỗ trợ nhận mail từ
nhiều mail
Hỗ trợ sử dụng mẫu
mail(Mail template) 13 14 Tự động cập nhật
mail mới
Chương trình chạy
ngầm mới.
Chương trình cho phép người dùng đính kèm file
trong quá trình gởi mail.
Chương trình cho phép người dùng nhận mail
thông qua hộp SMS của điện thoại. Cho phép người
dùng tùy chỉnh thời gian nhận mail định kỳ.
Chương trình cho phép người dùng gởi cùng 1 mail
cho nhiều địa chỉ khác nhau.
Chương trình cho phép người dùng xóa mail.
Chương trình hỗ trợ nhiều cơ chế gởi/nhận mail của
nhiều hòm thư khác nhau.
Chương trình có thể thêm vào nhiều mail khác
nhau để gởi/nhận mail.
Hỗ trợ cho người dùng thêm và sử dụng các mẫu
mail(mail quảng cáo, mail giới thiệu.v.v.) và gởi
cho nhiều người dùng khác nhau với nội dung khác
nhau.
Cho phép người dùng cấu hình tài khoản và tự
động báo mail mới cho người dùng.
Chương trình có thể chạy ngầm trong hệ thống để
có thể tự động nhận mail mà không bị ảnh hưởng
tới những chương trình khác.
Bảng 7.1 - Các yêu cầu của chương trình 7.3 Xây dựng mô hình use-case: 7.3.1 Sơ đồ use-case: < < < < < < < < < < < < < Hình 7.1 - Sơ đồ use-case ứng dụng 86 Chương 7: Phân tích và thiết kế STT 7.3.2 Danh sách các Actor:
Tên Actor Ý nghĩa/Ghi chú 1 User Người sử dụng chương trình mail Bảng 7.2 – Danh sách các actor 7.3.3 Danh sách các use-case: STT Tên Use-case Ý nghĩa/Ghi chú 1 List E-mails Liệt kê danh sách E-mail trong hộp mail cho người
dùng chọn 2 Read E-mail Đọc nội dung E-mail 3 Manage Accounts Quản lý các cấu hình E-mail 4 Compose E-mail Soạn mail và gởi mail 5 Manage Configuration Quản lý cấu hình chung của chương trình 6 Show About & Help Hiển thị giới thiệu chương trình và giúp đỡ. 7 Manage Template Quản lý các mẫu mail có sẵn 8 Delete E-mail Xóa E-mail. 9 Save Attachment Lưu trữ tập tin đính kèm. 10 Add attachment Thêm tập tin đính kèm. 11 Auto Receive Mail Quản lý việc tự động nhận mail. 12 Search E-mail Tìm kiếm E-mail. 13 Add Account Thêm cấu hình E-mail. 14 Delete Account Xóa cấu hình E-mail. 15 Update Account Cập nhật cấu hình E-mail. 16 Add Template Thêm mẫu E-mail. 17 Delete Template Xóa mẫu E-mail. 18 Update Template Cập nhật mẫu E-mail. Bảng 7.3 – Danh sách các use-case 87 Chương 7: Phân tích và thiết kế 7.4 Đặc tả use-case: 7.4.1 List E-mails: Tóm tắt: Tác nhân: Người sử dụng chương trình Use-case này cho phép người sử dụng chương trình liệt kê danh sách các mail nằm trong e-mail được lựa chọn. Dòng sự kiện: Dòng sự kiện chính 1. Hiển thị danh sách e-mail đã được cấu hình.
2. Người sử dụng chương trình chọn E-mail để đọc.
3. Chương trình nhận danh sách mail từ Server và hiển thị lên cho người dùng Các dòng sự kiện khác 1a. Nếu danh sách e-mail trống thì thông báo cho người dùng. 2a. Nếu nhận danh sách mail bị lỗi thì thông báo cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case: Phải có ít nhất 1 cấu hình E-mail trong danh sách cấu hình E- mail. Thiết bị phải kết nối được với mạng Internet. Trạng thái hệ thống khi kết thúc Use-case: Danh sách mail trong địa chỉ E-mail hiển thị cho người dùng. Điểm mở rộng: Read E-mail: Đọc nội dung E-mail do người dùng chọn.
Search E-mail: Tìm kiếm E-mail trong địa chỉ E-mail hiện hành.
Delete E-mail: Xóa E-mail người dùng chọn. 7.4.2 Read E-mail: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-Case này hiển thị nội dung E-mail được chọn lên màn hình thiết bị. 88 Chương 7: Phân tích và thiết kế Dòng sự kiện: Dòng sự kiện chính 1. Người dùng chọn E-mail trong danh sách E-mail.
2. Thiết bị kết nối với server và lấy nội dung E-mail.
3. Thiết bị hiển thị nội dung E-mail lên màn hình. Các dòng sự kiện khác 2a. Nếu lấy nội dung E-mail bị lỗi thì hiển thị lỗi cho người dùng. 3a. Nếu hiển thị nội dung E-mail không được thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case: Phải có 1 mail được chọn.
Chương trình đang kết nối với server. Trạng thái hệ thống khi kết thúc Use-case: Thiết bị hiển thị nội dung E-mail lên màn hình. Điểm mở rộng: Save attachment: Lưu trữ tập tin đính kèm E-mail.
Delete E-mail: Xóa E-mail đang đọc. 7.4.3 Manage Accounts: Tóm tắt: Tác nhân: Người sử dụng chương trình Use-case này quản lý các cấu hình E-mail có sẵn Dòng sự kiện: Dòng sự kiện chính 1. Lấy danh sách cấu hình E-mail từ hệ thống.
2. Hiển thị danh sách cấu hình E-mail cho người dùng chọn Các dòng sự kiện khác 1a. Nếu danh sách cấu hình E-mail trống thì thông báo cho người dùng. Các yêu cầu đặc biệt: Không có 89 Chương 7: Phân tích và thiết kế Trạng thái hệ thống khi bắt đầu Use-case: Không có Trạng thái hệ thống khi kết thúc Use-case: Danh sách cấu hình E-mail hiển thị lên màn hình thiết bị. Điểm mở rộng: Delete Account: Xóa cấu hình E-mail được chọn.
Update Account: cập nhật thông tin cấu hình E-mail được chọn.
New Account: Thêm cấu hình E-mail mới. 7.4.4 Compose E-mail: Tóm tắt: Tác nhân: Người sử dụng chương trình Use-case này cho phép người dùng soạn thảo E-mail và gởi E-mail cho một hay nhiều địa chỉ E-mail. Dòng sự kiện: Dòng sự kiện chính 1. Lấy các cấu hình E-mail có sẵn hiển thị cho người dùng.
2. Người dùng chọn cấu hình E-mail để gởi thư đi, điền đầy đủ thông tin trong màn hình soạn thảo. 3. Người dùng chọn gởi mail đi.
4. Chương trình kết nối với Server dựa trên cấu hình E-mail.
5. Chương trình đóng gói E-mail và gởi đi.
6. Hiển thị thông báo cho người dùng nếu mail được gởi đi. Các dòng sự kiện khác 1a. Nếu không có cấu hình E-mail thì thông báo cho người dùng. 2a. Người dùng chọn thêm địa chỉ E-mail từ sổ địa chỉ: 1. Lấy số địa chỉ trong máy.
2. Hiển thị sổ địa chỉ cho người dùng chọn.
3. Thêm địa chỉ người dùng chọn vào danh sách địa chỉ gởi đi. 2b. Người dụng chọn sử dụng mẫu mail(Template): 1. Lấy danh sách mẫu mail có sẵn.
2. Hiển thị danh sách mẫu mail cho người dùng chọn.
3. Thêm mẫu mail được chọn vào nội dung mail. 4a. Nếu không thể kết nối với Server thì hiển thị lỗi cho người dùng. 90 Chương 7: Phân tích và thiết kế 5a. Nếu không thể gởi mail thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case: Danh sách cấu hình E-mail phải có ít nhất 1 cấu hình E-mail. Trạng thái hệ thống khi kết thúc Use-case:
Mail của người dùng được gởi đi. Điểm mở rộng: Add attachment: Thêm tập tin đính kèm trong quá trình gởi mail. 7.4.5 Manage Configuration: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người dùng cấu hình các thông tin chung của chương trình như ngôn ngữ, sử dụng wifi, tự động nhận mail.v.v. Dòng sự kiện: Dòng sự kiện chính 1. Lấy cấu hình có sẵn và hiển thị lên cho người dùng.
2. Người dùng sửa cấu hình.
3. Lưu trữ cấu hình và áp dụng cấu hình cho chương trình. Các dòng sự kiện khác 1a. Nếu không có cấu hình có sẵn thì sử dụng cấu hình mặc định, hiển thị lên cho người dùng. 3a. Nếu không thể lưu trữ cấu hình hoặc thông tin cấu hình sai thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt: Không có. Trạng thái hệ thống khi bắt đầu Use-case: Không có. Trạng thái hệ thống khi kết thúc Use-case: Cấu hình được lưu trữ và áp dụng cho chương trình. 91 Chương 7: Phân tích và thiết kế Điểm mở rộng: Auto Receive Mail: Chọn cấu hình E-mail muốn tự động nhận mail và áp dụng cho chương trình. 7.4.6 Show About & Help Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này hiển thị thông tin về chương trình và phần giúp đỡ người dùng. Dòng sự kiện: Dòng sự kiện chính Lấy thông tin về chương trình và phần giúp đỡ người Hiển thị thông tin về chương trình và phần giúp đỡ lên 1.
dùng từ hệ thống.
2.
màn hình thiết bị. Các dòng sự kiện khác Không có Các yêu cầu đặc biệt:
Không có Trạng thái hệ thống khi bắt đầu Use-case: Không có Trạng thái hệ thống khi kết thúc Use-case: Thông tin về chương trình và phần giúp đỡ được hiển thị lên màn hình. Điểm mở rộng:
Không có 7.4.7 Manage Template Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này lấy danh sách các mẫu E-mail trong hệ thống và hiển thị cho người dùng. Dòng sự kiện: Dòng sự kiện chính 1. Chương trình lấy danh sách các mẫu E-mail trong hệ thống. 92 Chương 7: Phân tích và thiết kế 2. Hiển thị các mẫu E-mail lên màn hình thiết bị. Các dòng sự kiện khác 1a. Nếu danh sách mẫu E-mail trống thì hiển thị thông báo cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case: Không có Trạng thái hệ thống khi kết thúc Use-case: Danh sách các mẫu E-mail có sẵn được hiển thị lên màn hình thiết bị. Điểm mở rộng: Delete Template: Xóa mẫu E-mail được chọn.
Update Template: Cập nhật mẫu E-mail được chọn.
New Template: Thêm một mẫu E-mail mới. 7.4.8 Delete E-mail: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người dùng xóa một E-mail được chọn trong danh sách mail. Dòng sự kiện: Dòng sự kiện chính 1. Người dùng chọn hoặc đọc E-mail.
2. Người dùng chọn xóa E-mail.
3. Chương trình kết nối với server để xóa E-mail.
4. Chương trình xóa E-mail ra khỏi server và chương trình.
5. Chương trình hiển thị thông báo cho người dùng. Các dòng sự kiện khác 1a. Nếu E-mail không tồn tại thì thông báo cho người dùng. 3a. Nếu không thể kết nối với Server thì thông báo cho người dùng. 4a. Nếu không thể xóa E-mail thì hiển thị thông báo cho người dùng. 93 Chương 7: Phân tích và thiết kế Các yêu cầu đặc biệt:
Không có Trạng thái hệ thống khi bắt đầu Use-case: Thiết bị phải kết nối Internet.
Phải có ít nhất 1 cấu hình E-mail đang được lựa chọn.
Thiết bị đang kết nối với server mà cấu hình E-mail đã cấu hình. Trạng thái hệ thống khi kết thúc Use-case: E-mail được chọn bị xóa khỏi Server và chương trình. Điểm mở rộng:
Không có 7.4.9 Save Attachment: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người sử dụng lưu tập tin đính kèm trong một E-mail vào bộ nhớ máy. Dòng sự kiện: Dòng sự kiện chính 1. Chương trình đọc E-mail và tìm tập tin đính kèm.
2. Nếu tồn tại tập tin đính kèm thì tải tập tin đính kèm về.
3. Hiển thị màn hình cho người dùng chọn đường dẫn lưu trữ.
4. Ghi tập tin đính kèm vào đường dẫn mà người dùng chọn.
5. Hiển thị thông báo cho người dùng. Các dòng sự kiện khác 1a. Nếu E-mail không có tập tin đính kèm thì không thể thực hiện chức năng này. 2a. Nếu không thể tải tập tin đính kèm thì hiển thị lỗi cho người dùng. 4a. Nếu không thể ghi tập tin đính kèm vào bộ nhớ máy thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case: Người dùng đang đọc một E-mail trong danh sách E-mail. 94 Chương 7: Phân tích và thiết kế Chương trình đang kết nối với server được cấu hình trong cấu hình E-mail hiện tại. Trạng thái hệ thống khi kết thúc Use-case: Tập tin đính kèm được tải và lưu trữ trong bộ nhớ máy. Điểm mở rộng:
Không có 7.4.10 Add Attachment: Tóm tắt: Tác nhân: Người sử dụng chương trình Use-case này cho phép người dùng đính kèm một tập tin từ bộ nhớ máy để gởi kèm theo E-mail. Dòng sự kiện: Dòng sự kiện chính 1. Người dùng chọn tập tin từ bộ nhớ máy.
2. Chương trình đọc và ghi thông tin tập tin vào nội dung E- mail. Các dòng sự kiện khác 2a. Nếu không thể đọc tập tin thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt:
Không có. Trạng thái hệ thống khi bắt đầu Use-case: Người dùng đang trong màn hình soạn thảo E-mail. Trạng thái hệ thống khi kết thúc Use-case: Tập tin được đính kèm trong nội dung E-mail để gởi đi. Điểm mở rộng: Không có. 7.4.11 Auto Receive E-mail: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người dụng lựa chọn một địa chỉ E-mail trong danh sách cấu hình E-mail để chương trình tự động nhận E-mail khi có E-mail mới. 95 Chương 7: Phân tích và thiết kế Dòng sự kiện: Dòng sự kiện chính 1. Người dùng chọn tự động nhận mail.
2. Chương trình lấy cấu hình E-mail từ hệ thống và hiển thị lên cho người dùng chọn. 3. Người dùng chọn cấu hình E-mail.
4. Chương trình lưu trữ và áp dụng cho chương trình.
5. Chương trình tự động lấy mail mới theo chu kỳ nhất định và hiển thị thông báo cho người dùng. Các dòng sự kiện khác 2a. Nếu không có cấu hình E-mail nào thì không áp dụng tự động nhận mail. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case: Người dùng đang ở trong màn hình chỉnh sửa tùy chọn.
Phải tồn tại ít nhất 1 cấu hình E-mail cho phép chế độ tự động nhận mail. Trạng thái hệ thống khi kết thúc Use-case: Chương trình tự động nhận mail mới theo một chu kỳ nhất định. Điểm mở rộng:
Không có 7.4.12 Search E-mail: Tóm tắt: Tác nhận: Người sử dụng chương trình Use-case này cho phép người dùng tìm kiếm E-mail trong một hộp thư đã được cấu hình sẵn trong danh sách cấu hình E-mail. Dòng sự kiện: Dòng sự kiện chính 1. Người dùng điền nội dung tìm kiếm thư.
2. Chương trình kết nối với server E-mail hiện tại và tìm kiếm thư. 3. Chương trình hiển thị kết quả lên màn hình thiết bị. Các dòng sự kiện khác 1a. Nếu nội dung tìm kiếm sai thì hiển thị lỗi cho người dùng. 96 Chương 7: Phân tích và thiết kế 2a. Nếu không thể tìm kiếm thư thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt:
Không có Trạng thái hệ thống khi bắt đầu Use-case: Người dùng đang trong màn hình đọc E-mail.
Chương trình phải đang kết nối với Server E-mail hiện tại. Trạng thái hệ thống khi kết thúc Use-case: Kết quả tìm kiếm được hiển thị lên màn hình thiết bị. Điểm mở rộng:
Không có 7.4.13 Add Account: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người dùng thêm một cấu hình E-mail vào danh sách cấu hình E-mail. Dòng sự kiện: Dòng sự kiện chính 1. Người dùng điền thông tin cấu hình E-mail.
2. Chương trình thêm cấu hình E-mail vào danh sách cấu hình E-mail có sẵn. Các dòng sự kiện khác 2a. Nếu thông tin cấu hình bị sai hoặc không thể thêm cấu hình E-mail thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case: Thông tin cấu hình E-mail phải chính xác. Trạng thái hệ thống khi kết thúc Use-case: Cấu hình E-mail được thêm vào danh sách cấu hình E-mail. Điểm mở rộng: Không có 97 Chương 7: Phân tích và thiết kế 7.4.14 Delete Account: Tóm tắt: Tác nhân: Không có. Use-case này cho phép người dùng xóa một cấu hình E-mail từ danh sách cấu hình E-mail có sẵn trong hệ thống. Dòng sự kiện: Dòng sự kiện chính 1. Người dùng chọn cấu hình E-mail cần xóa trong danh sách cấu hình E-mail. 2. Chương trình xóa cấu hình E-mai ra khỏi hệ thống.
3. Chương trình hiển thị thông báo lên cho người dùng. Các dòng sự kiện khác 1a. Nếu không có cấu hình E-mail nào thì hiển thị thông báo cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case:
Phải tồn tại ít nhất 1 cấu hình E-mail. Trạng thái hệ thống khi kết thúc Use-case: Cấu hình E-mail bị xóa khỏi danh sách cấu hình E-mail. Điểm mở rộng:
Không có 7.4.15 Update Account: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người dùng cập nhật thông tin của một cấu hình E-mail có sẵn. Dòng sự kiện: Dòng sự kiện chính 1. Lấy cấu hình E-mail từ hệ thống và hiển thị thông tin lên màn hình thiết bị. 2. Người dùng chỉnh sửa cấu hình E-mail. 98 Chương 7: Phân tích và thiết kế 3. Chương trình cập nhật thông tin cấu hình E-mail vào danh sách cấu hình E-mail. Các dòng sự kiện khác 1a. Nếu không thể lấy thông tin cấu hình E-mail thì lấy thông tin cấu hình E-mail mặc định. 3a. Nếu không thể cập nhật thông tin cấu hình E-mail thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt:
Không có Trạng thái hệ thống khi bắt đầu Use-case: Phải có một cấu hình E-mail đang được chọn.
Thông tin cấu hình E-mail phải chính xác. Trạng thái hệ thống khi kết thúc Use-case: Cấu hình E-mail được cập nhật trong danh sách cấu hình E-mail. Điểm mở rộng: Không có 7.4.16 Add Template: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người dùng thêm một mẫu E-mail vào danh sách mẫu E-mail. Dòng sự kiện: Dòng sự kiện chính 1. Người dùng điền thông tin mẫu E-mail.
2. Chương trình thêm mẫu E-mail vào danh sách mẫu E-mail có sẵn. Các dòng sự kiện khác 2a. Nếu thông tin mẫu E-mail bị sai hoặc không thể thêm mẫu E- mail thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt: Không có Trạng thái hệ thống khi bắt đầu Use-case:
Thông tin mẫu E-mail phải chính xác. 99 Chương 7: Phân tích và thiết kế Trạng thái hệ thống khi kết thúc Use-case: Mẫu E-mail được thêm vào danh sách mẫu E-mail. Điểm mở rộng:
Không có 7.4.17 Delete Template: Tóm tắt: Tác nhân: Không có. Use-case này cho phép người dùng xóa một mẫu E-mail từ danh sách mẫu E- mail có sẵn trong hệ thống. Dòng sự kiện: Dòng sự kiện chính 1. Người dùng chọn mẫu E-mail cần xóa trong danh sách mẫu E-mail. 2. Chương trình xóa mẫu E-mai ra khỏi hệ thống.
3. Chương trình hiển thị thông báo lên cho người dùng. Các dòng sự kiện khác 1a. Nếu không có mẫu E-mail nào thì hiển thị thông báo cho người dùng. Các yêu cầu đặc biệt:
Không có Trạng thái hệ thống khi bắt đầu Use-case:
Phải tồn tại ít nhất 1 mẫu E-mail. Trạng thái hệ thống khi kết thúc Use-case: Cấu hình E-mail bị xóa khỏi danh sách mẫu E-mail. Điểm mở rộng: Không có 7.4.18 Update Template: Tóm tắt: Tác nhân: Người sử dụng chương trình. Use-case này cho phép người dùng cập nhật thông tin của một Mẫu E-mail có sẵn. 100 Chương 7: Phân tích và thiết kế Dòng sự kiện: Dòng sự kiện chính 1. Lấy Mẫu E-mail từ hệ thống và hiển thị thông tin lên màn hình thiết bị. 2. Người dùng chỉnh sửa Mẫu E-mail.
3. Chương trình cập nhật thông tin Mẫu E-mail vào danh sách Mẫu E-mail. Các dòng sự kiện khác 1a. Nếu không thể lấy thông tin Mẫu E-mail thì lấy thông tin Mẫu E-mail mặc định. 3a. Nếu không thể cập nhật thông tin Mẫu E-mail thì hiển thị lỗi cho người dùng. Các yêu cầu đặc biệt:
Không có Trạng thái hệ thống khi bắt đầu Use-case: Phải có một Mẫu E-mail đang được chọn.
Thông tin Mẫu E-mail phải chính xác. Trạng thái hệ thống khi kết thúc Use-case: Mẫu E-mail được cập nhật trong danh sách Mẫu E-mail. Điểm mở rộng:
Không có 7.5 Thiết kế kiến trúc: 7.5.1 Mô hình hoạt động: Hình 7.2 – Mô hình hoạt động của ứng dụng • Ứng dụng chạy trên điện thoại BlackBerry. Ứng dụng viết bằng ngôn ngữ Java, sau khi biên dịch sẽ tạo ra file *.cod. 101 Chương 7: Phân tích và thiết kế • Ứng dụng kết nối với các mail server thông qua Internet, sử dụng các giao thức SMTP, POP3 và IMAP. • Có thể thiết lập kênh truyền với SSL hay TLS.
• Sau khi kết nối, ứng dụng sẽ giao tiếp với server bằng các lệnh để đọc e-mail, gửi e-mail, xóa e-mail, ... 7.5.2 Kiến trúc phía ứng dụng BlackBerry: Receive E-mail Send E-mail Component Component Connection Component Configuration & Support
Component Data Store
Component Hình 7.3 – Kiến trúc thành phần ứng dụng phía Client Kiến trúc phía Client bao gồm các thành phần: Thành phần nhận e-mail (receive e-mail component):
Bao gồm các lớp hỗ trợ việc nhận e-mail và hiển thị cho người dùng.
Thành phần gửi e-mail (send e-mail component): 102 Chương 7: Phân tích và thiết kế Bao gồm các lớp hỗ trợ việc soạn thảo và gửi e-mail đến các địa chỉ.
Thành phần kết nối (connection component):
Bao gồm các lớp thực hiện việc kết nối, gửi /nhận dữ liệu trên mạng giữa client và server. Thành phần quản lý cấu hình và hỗ trợ (Configuration & Support Component):
Bao gồm các lớp thực hiện chức năng quản lý cấu hình ứng dụng, lưu file, đính kèm file, ... Thành phần lưu trữ thông tin (Data Store Component):
Các lớp chứa thông tin và lưu trữ thông tin trên điện thoại 7.6 Thiết kế lớp: 7.6.1 Các lớp dùng chung: Hình 7.4 – Các lớp quản lý màn hình 103 Chương 7: Phân tích và thiết kế 7.6.2 Thành phần gởi & nhận e-mail: Hình 7.5 – Các thành phần lưu trữ và xử lý Message Hình 7.6 – Sơ đồ các lớp quản lý E-mail 104 Chương 7: Phân tích và thiết kế 7.6.3 Thành phần quản lý cấu hình và lưu trữ: Hình 7.7 – Thành phần các lớp quản lý cấu hình và lưu trữ 7.7 Thiết kế xử lí: 7.7.1 Nhận e-mail: Hình 7.8 – Quá trình nhận E-mail bằng giao thức IMAP 105 Chương 7: Phân tích và thiết kế Hình 7.9 - Quá trình nhận E-mail bằng giao thức POP Hình 7.10 – Xử lý và hiển thị nội dung E-mail 106 Chương 7: Phân tích và thiết kế Hình 7.11 – Xử lý Attachment trong E-mail 7.7.2 Gửi e-mail: Hình 7.12 – Đóng gói và gởi E-mail 107 Chương 7: Phân tích và thiết kế 7.7.3 Trạng thái chuyển đổi của chương trình Hình 7.13 - Các trạng thái chuyển đổi của chương trình 108 Chương 8: Cài đặt và thử nghiệm Chương 8: Cài đặt và thử nghiệm 8.1 Môi trường phát triển: Ứng dụng gởi và nhận mail trên điện thoại BlackBerry được phát triển sử dụng các công cụ và môi trường sau: Công cụ phân tích và thiết kế: Star UML v5.0 Môi trường cài đặt ứng dụng: Research In Motion OS.
Môi trường lập trình: Eclipse và BlackBerry API Plug-in cho Eclipse.
Môi trường thử nghiệm và cài đặt: Máy ảo BlackBerry 9000, 9550, 9700. 8.2 Cài đặt: 8.2.1 Yêu cầu phần mềm: Yêu cầu phần mềm: Tập tin .alx và .cod để cài đặt chương trình.
Hệ điều hành Research In Motion phiên bản 5.0 trở lên.
Chương trình quản lý thiết bị của Research In Motion: BlackBerry Desktop Manager. 8.2.2 Yêu cầu phần cứng: Yêu cầu phần cứng: Thiết bị BlackBerry đang sử dụng hệ điều hành Research In Motion phiên bản 5.0 trở lên. Cable mini USB hoặc loại cable phù hợp để kết nối thiết bị vào máy tính.
Máy tính để lưu trữ và cài đặt chương trình. 8.2.3 Hướng dẫn cài đặt:
Sau khi build chương trình, chương trình sẽ phát sinh cho người dùng tập tin .alx. Để cài đặt trên máy thật, thực hiện các bước sau: Kết nối thiết bị với máy tính.
Khởi động chương trình BlackBerry Desktop Manager. 1.
2.
Chọn Application Loader như hình: 109 Chương 8: Cài đặt và thử nghiệm Hình 8.1 – Giao diện BlackBerry Desktop Manager Chọn Add/Remove Application, chọn Start, chương 3.
trình BlackBerry Desktop Manager sẽ hiện ra danh sách các
chương trình đã cài trong máy. Để cài chương trình mới. Chọn
Browse.. Lựa chọn tập tin .alx đã build ở trên, nhấn ok. Chọn
Next và bắt đầu cài đặt. Thiết bị sẽ tự khởi động lại, quá trình
cài đặt hoàn tất. Hình 8.2 – Danh sách chương trình trong thiết bị 8.3 Thử nghiệm: Chương trình gởi và nhận mail trên BlackBerry thử nghiệm trên máy ảo giả lập cho ra các kết quả thử nghiệm sau: 110 Chương 8: Cài đặt và thử nghiệm STT Tính năng thử nghiệm Khả năng kết nối mạng 1 Nhân và gởi dữ liệu
Tiêu thụ bộ nhỏ 2
3 4 Lưu trữ bộ nhớ Tốc độ hiển thị hình ảnh
Nhận mail 5
6 Gởi mail 7 Quản lý cấu hình 8 Quản lý mẫu E-mail 9 10 Quản lý cấu hình 11 Tự động nhận mail 12 Hiển thị ngôn ngữ Đánh giá
Tốc độ kết nối ổn định, tùy thuộc vào mạng
sử dụng.
Tốc độ truyền dẫn dữ liệu tương đối nhanh.
Chương trình khởi động chiếm dưới 500 KB
bộ nhớ, tương đối thập và nằm trong phạm vi
cho phép của một chương trình BlackBerry.
Không bị quả tải đối với các máy đời cũ, bộ
sử lý yếu.
Chương trình lưu trữ các thông tin của
chương trình và dữ liệu dùng để sử dụng
chiếm ít, tăng dần khi người sử dụng tăng dữ
liệu lên. Dữ liệu lưu trữ không bị xóa trong
quá trình khởi động lại máy, dữ liệu lưu trữ
chỉ bị xóa khi Master Reset máy – Làm mới
lại hệ điều hành.
Tốc độ hiển thị hình ảnh nhanh, đầy đủ.
Chương trình nhận mail đầy đủ các thông tin
và tất cả các E-mail trong hộp mail. Chức
năng phân trang đầy đủ.
Chương trình đóng gói mail tốc độ khá
nhanh. Tốc độ gởi mail tùy thuộc vào đường
truyền mạng đang sử dụng. Khi gởi mail
bằng mẫu E-mail(Template) tốc độ gởi sẽ
chậm hơn do cần phải thực hiện nhiều lần.
Chương trình quản lý và lưu trữ các cấu hình
E-mail đầy đủ, cho phép người sử dụng
thêm, xóa, sửa các thông tin trong cấu hình.
Chương trình quản lý và lưu trữ các mẫu E-
mail đầy đủ, lưu trữ các mẫu E-mail trong bộ
nhớ máy để sử dụng lần sau, cho phép người
sử dụng thêm, xóa, sửa các thông tin của
mẫu E-mail.
Chương trình quản lý cấu hình đây đủ, có lưu
trữ trong bộ nhớ máy để tải lại vào lần sử
dụng tiếp theo.
Tự động nhận mail nhanh, hiển thị chính xác
số mail chưa được đọc. Cho phép người
dùng đọc mail mới ngay lập tức.
Chương trình cho phép hiển thị ngôn ngữ
tiếng Anh và tiếng Việt. Chuyển đổi ngôn
ngữ để dàng trong phần cấu hình, việc
chuyển đổi ngôn ngữ được áp dụng lập tức
hoặc sau khi người dùng khởi động lại
chương trình. 111 Chương 8: Cài đặt và thử nghiệm 13 Chương trình cho phép người dùng gõ tiếng
Việt trong khi soạn E-mail bằng bộ gõ Telex. 14 Cho phép gõ tiếng Việt
trong E-mail.
Chạy ngầm trong hệ thống. Chương trình chạy ngầm trong hệ thống ổn
định, không bị ảnh hưởng đến các chương
trình khác trong máy. Bảng 8.1 - Kết quả thử nghiệm trên máy ảo của chương trình Thử nghiệm trên máy thật: Vì chưa thể ký chương trình để triển khai trên máy thật nên chương trình hiện nay chưa thể thử nghiệm trên máy thật. 112 Chương 9: Tổng kết Chương 9: Tổng kết 9.1 Kết luận: 9.1.1 Kết quả đạt được:
Sau khi thực hiện đề tài, chúng em đã thu được một số kết quả sau: Xây dựng một chương trình gởi và nhận mail thông qua điện thoại BlackBerry,
Tìm hiểu được các công nghệ gởi và nhận E-mail, một trong những công nghệ
có tầm ứng dụng mạnh mẽ nhất hiện nay. Chúng em đã tìm hiểu được cách thức hoạt
động, đặc điểm kỹ thuật và khả năng của các công nghệ dùng để gởi và nhận mail.
Tìm hiểu được hệ điều hành Research In Motion và lập trình trên hệ điều hành
Research In Motion. Bằng cách xây dựng một ứng dụng trên hệ điều hành Research In
Motion, chúng em đã tiếp thu được kiến thức về Research In Motion cũng như
BlackBerry, thiết bị di động đã và đang phát triển mạnh mẽ trong các thiết bị di động
thông minh.
Tìm hiểu được cách lập trình giao tiếp với các E-mail Server trên BlackBerry.
Từ lý thuyết(tìm hiểu về các công nghệ giúp cho việc gởi và nhận mail), chúng em đã
tiếp tục thực tế bằng cách tìm hiểu cách lập trình để gởi, nhận và phân tích E-mail trên
hệ điều hành Research In Motion.
phục vụ cho việc gởi và nhận mail. Với chương trình này người dùng có thể gởi và
nhận mail một cách nhanh chóng và tiện lợi. Ngoài phục vụ cho mục đích gởi và nhận
mail thông thường, chương trình còn phục vụ cho nhiều mục đích khác như thông báo
E-mail mới, gởi E-mail cho nhiều người với nội dung khác nhau. 9.1.2 Hạn chế: Mặc dù đã cố gắng hết sức nhưng ứng dụng vẫn còn một số hạn chế nhất định: Ứng dụng chưa thể hiện hết 3 chế độ của IMAP là Disconnect, connect và Ứng dụng chưa thể triển khai trên thực tế vì còn vướng phải vấn đề ký chương Ứng dụng đọc E-mail trực tiếp trên ứng dụng, chưa thể đồng bộ với chế độ E-
Tốc độ của ứng dụng còn phụ thuộc vào rất nhiều yếu tố như tốc độ mạng,
dung lượng và cấu trúc của E-mail.v.v. Nếu tốc độ mạng chậm ứng dụng có thể không
thể hiện đầy đủ và chính xác nội dung E-mail.
offline, ứng dụng chỉ mới thực hiện được chức năng connect.
trình của Research In Motion.
mail và tin nhắn trên thiết bị BlackBerry. 9.2 Hướng phát triển: 9.2.1 Phát triển trên các dòng máy BlackBerry:
Với những kết quả đặt được và những hạn chế nêu trên, đề tài có thể mở rộng theo các hướng sau: Xây dựng ứng dụng sao cho có thể đồng bộ với các chế độ nhắn tin và E-mail
trên BlackBerry. 113 Chương 9: Tổng kết Xây dựng ứng dụng có khả năng đồng bộ cao với các E-mail Server hiện tại.
Tăng khả năng kết nối của ứng dụng, cho người dùng tự định nghĩa về ngôn
ngữ cũng như nội dung các mẫu E-mail.
Xây dựng ứng dụng có thể hỗ trợ Push Mail thật sự. 9.2.2 Phát triển trên các dòng máy khác:
Với những kết quả đặt được và những hạn chế nêu trên, đề tài có thể mở rộng theo các hướng sau: o Vì chương trình viết dựa trên nền tảng lập trình socket trên ngôn ngữ Java.
Chương trình có thể thay đổi các giao diện và mã nguồn phụ thuộc vào
BlackBerry API để triển khai trên các thiết bị di động khác hỗ trợ Java và kết
nối mạng. 114 Phụ lục A: Phát triển chương trình BlackBerry A.1 Kiến trúc mạng BlackBerry BlackBerry được cung cấp bởi nhiều nhà mạng khác nhau như Nextel, Telus,
T-mobile, Viettel.v.v. Nhưng tất cả các thiết bị BlackBerry đều liên kết tới Network
Operating Center(NOC) của Research In Motion. Trung tâm này kết nối tất cả nhà
mạng và từ các BlackBerry Enterprise Server(BES) phân phối khắp nơi. BlackBerry
Enterprise Server là một middleware liên kết thiết bị tới các dịch vụ E-mail như
Microsft Exchange và Lotus Notes. Hình A.1 - Kiến trúc mạng của BlackBerry
(Nguồn: developers.sun.com) Được cài đặt sau tường lửa của danh nghiệp, một BES có thể được cung cấp
thêm nhiều dịch vụ khác. Mobile Data Server(MDS) cung cấp cho thiết bị khả năng
truy cập vào mạng toàn cục của doanh nghiệp. Để có được quyền lợi này người dùng
cần cài đặt để có thể sử dụng BES khi người dùng cài đặt chương trình quản lý
Desktop Software Manager của Research In Motion. Chương trình quản lý này giúp
người dùng có thể kết nối thiết bị với máy tính. Một khóa mã hóa sẽ được tạo ra để
bảo mật quá trình giao tiếp giữa thiết bị và BES. Nếu thiết bị không liên kết với BES,
E-mail sẽ được nhận thông qua một Web Client. 115 Hình A.2 - Cài đặt để kết nối BES
(Nguồn: developers.sun.com) A.2 Mô hình của chương trình BlackBerry BlackBerry cung cấp cho nhà phát triển ứng dụng 2 mô hình để phát triển ứng dụng BlackBerry: o Mô hình dựa trên trình duyệt:Cho phép nhà phát triển phát tirển ứng dụng bằng
một ngôn ngữ đánh dấu, ví dụ như Wireless Markup Language(WML) hoặc
compact Hypertext Markup Language(cHTML). Việc sử dụng các khả năng
của các trình duyệt giúp người phát triển ứng dụng không phải lo về giao diện
người dùng, nhưng nó giới hạn khả năng làm việc của người dùng theo khả
năng trình duyệt có thể cung cấp, và không hỗ trợ tính năng văn phòng. o Mô hình ứng dụng dựa trên nền Java: Cho phép người phát triển ứng dụng phát
triển giao diện người dùgn tùy biến, hỗ trợ mạnh mẽ tính năng văn phòng và
hình ảnh. Nhà phát triển cũng có thể xây dựng ứng dụng mà người dùng có thể
tải về và cài đặt trên các thiết bị di động để họ có thể tiếp tục sử dụng mà
không cần phải kết nối mạng. Một số thiết bị BlackBerry còn cung cấp cho
người phát triển ứng dụng một bộ API để phát triển ứng dụng dựa trên nền
Java. A.3 Những mở rộng của BlackBerry từ J2ME BlackBerry hỗ trợ hoàn toàn các API CLDC và MIDP. Ngoài ra Research In
Motion còn cung cấp một số mở rộng cho phép người phát triển ứng dụng phát triển 116 ứng dụng tùy biến và mạnh mẽ hơn. Giúp người phát triển ứng dụng có thể truy cập
và sử dụng các tính năng của BlackBerry về giao diện người dùng, mạng, bảo mật.v.v. Người phát triển ứng dụng có thể sử dụng CLDC, MIDP và Blackberry API
trong cùng một ứng dụng. Tuy nhiên, một chương trình không nên sử dụng cả 2 thư
viện javax.microedition.ldcui và net.rim.device.api.ui vì có thể
gây xung đột giao diện người dùng. A.4 Phát triển chương trình bằng JDE Trong JDE được cung cấp, chọn menu File, chọn New workspace để tạo một vùng làm việc JDE có thể quản lý, điền tên và chọn thư mục lưu trữ: Hình A.3 - Tạo Workspace để quản lý công việc Trong menu Project, chọn Create New Project để tạo một chương trình mới. Điền
tên và chọn nơi lưu trữ để lưu trữ chương trình: Hình A.4 - Tạo chương trình mới Để tạo một tập tin mới để lập trình, chọn New trong menu File. Điền tên(thường kết thúc bằng đuôi mở rộng .java), chọn đường dẫn lưu trữ: 117 Hình A.5 - Thêm một tập tin mới vào chương trình Trong màn hình sửa tập tin, nhấp chuột phải và chọn Insert Into Project để đưa tập tin vào chương trình: Hình A.6 - đưa một tập tin vào chương trình Sau đó có thể lập trình chương trình bình thường, sau đây là chương trình mẫu HelloWorld: import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
public class HelloApp extends UiApplication {
public static void main(String argv[]) {
HelloApp app = new HelloApp();
app.enterEventDispatcher(); 118 ("BlackBerry App", LabelField.ELLIPSIS | }
public HelloApp() {
pushScreen(new HelloScreen());
}
}
class HelloScreen extends MainScreen {
public HelloScreen() {
super();
LabelField title = new LabelField
LabelField.USE_ALL_WIDTH);
setTitle(title);
add(new RichTextField("Welcome to Developing
BlackBerry Apps Tutorial"));
}
public boolean onClose() {
Dialog.alert("Visit Again!");
System.exit(0);
return true;
}
} Bảng A.1 - Chương trình HelloWorld Để build ứng dụng và triển khai ứng dụng, chọn menu Build, chọn Build all, JdE sẽ tạo ra 3 file .jad, .jar, .cod. Người phát triển ứng dụng có thể sử dụng 3 file này
để triển khai hoặc chạy thử trên máy ảo. Để triển khai trên máy thật, có thể sử dụng công cụ javaloader và chạy câu lệnh command: javaloader -usb load “tên chương trình”.cod A.5 Triển khai chương trình bằng Blackberry Desktop Manager Như đã nói ở trên, BlackBerry Desktop Manager là một chương trình dùng để
kết nối thiết bị với máy tính. Ngoài ra chương trình này còn cung cấp cho người dùng
các tiện ích như: Triển khai chương trình trên thiết bị, tạo tập tin với đuôi mở rộng của
Research In Motion là .alx để triển khai. Tập tin có đuôi mở rộng .alx là một tập tin định nghĩa dựa trên ngôn ngữ XML, nó cung cấp các thông tin về ứng dụng, để tạo tập tin này. Chọn menu Project, chọn
Generate ALX File. Nếu chương trình có tên là FirstApp, thì file alx sẽ có dạng: 119 Bảng A.2 - cấu trúc một tập tin .alx Để triển khai chương trình bằng công cụ Blackberry Desktop Manager: Khởi
động chương trình Blackberry Desktop Manager, chọn Application Loader, chọn tập
tin .alx đã tạo ở trên và cài đặt vào thiết bị. 120 Phụ lục B: Tống hợp các giao thức mail B.1 Cấu trúc MIME
Có 2 loại cấu trúc MIME: cấu trúc đơn giản (discrete media) và cấu trúc phức tạp
(composite media). o Cấu trúc đơn giản: text, video, audio, image, application.
o Cấu trúc phức tạp: multipart, message. Các thành phần cơ bản của MIME (được miêu tả trong RFC-2045): 1. MIME-Version:
Mỗi message yêu cầu có 1 trường MIME-Version trong header. Thông tin này nhằm cho biết message được chuyển mã sang dạng MIME và cho biết phiên bản
MIME được sử dụng.
Cú pháp: MIME-Version: 1*DIGIT“.”1*DIGIT (1.0) 2. Content-Type:
Dùng để cho biết cách nội dung phần thân được biểu diễn, nhờ đó tác nhân nhận gói tin biết cách để hiểu thị nội dung với người dùng. Trường này gồm 2 thông tin kiểu (type) và kiểu con (subtype) đi kèm nhau theo
cấu trúc type/subtype và có thể kèm thêm các tham số khác như charset, name, ...
Tên type, subtype, parameter không phân biệt hoa thường. Tuy nhiên giá trị các
parameter thường phân biệt hoa thường. Một số content type chính : application, multipart, text, message, audio, video,
image và extension-token. Chú ý thông tin subtype là bắt buộc vì không có subtype
mặc định cho các type trên. Một số subtype ứng với các type: 1. text: plain (primary), richtext.
2. multipart: mixed (primary), alternative, parallel, digest, related, signed.
3. message: rfc822 (primary), partial, External-body.
4. image: jpeg, gif
5. audio: basic.
6. video: mpeg
7. application: octet-stream, PostScript.
Khi tác nhân đọc mail không nhận ra được giá trị của Content-Type, thường nên xem như là một application/octet-stream. Cấu trúc: Content-Type: 121 Text: là Content-Type mặc định, dùng để gửi dữ liệu đang text. Content-Type
mặc định cho Internet mail là “text/plain; charset=us-ascii”. Tham số “charset”
có thể được dùng để chỉ tập kí tự được dùng. Giá trị của tham số này không
phân biệt hoa thường như các tham số khác. Các giá trị bao gồm: “us-ascii” /
“iso-8859-1” / “iso-8859-2” /“iso-8859-3” /“iso-8859-4” /“iso-8859-5” /“iso-
8859-6” /“iso-8859-7” /“iso-8859-8” /“iso-8859-9” / extension-token. Application: dùng để gửi những dữ liệu cần được xử lí bằng một ứng dụng trên máy tính, thường là các chương trình. Hai loại thường được sử dụng là
“application/octet-stream” và “application/PostScript”. o application/octet-stream: là subtype chính dùng trong “application”
Content-Type cho biết thân của message chứa dữ liệu nhị phân. Các
tham số thường dùng : type, padding và name. o application/PostScript: cho biết nội dung dữ liệu là một chương trình PostScript (Một ngôn ngữ lập trình để chỉ ra cách bố trí (layout) của một
trang được in). Image: cho biết nội dung của phần này là một hình ảnh. Giá trị subtype cho biết
định dạng của file ảnh được sử dụng. Một số subtype hỗ trợ: g3fax / gif / ief /
jpeg / tiff. Nhưng 2 loại thường phổ biến là jpeg và gif.
Cấu trúc header:
image-type := “image” “/” (“gif” / “jpeg” / extension-token) Audio: cho biết nội dung của phần này là một file âm thanh. Subtype được sử dụng là “basic”
Cấu trúc header:
audio-type := “audio” “/” (“basic” / extension-token) Video: nội dung của phần này là một file phim ảnh. Cấu trúc header:
video-type := “video” “/” (“mpeg” / extension-token) Multipart: phần thân bao gồm 1 hay nhiều phần dữ liệu khác nhau (body part)
kết hợp với nhau. Phần định nghĩa “multipart” Content-Type phải xuất hiện
trên header, phần thân gồm 1 hay nhiều phần. Mỗi phần phân biệt cách nhau
bằng đường biên (boundary). Boundary không được xuất hiện trong phần thân
của body part, do đó phải có cách phát sinh ra boundary duy nhất. Mỗi phần
gồm phần header của chính nó, một dòng trống và theo sau là phần thân. Chỉ
những header bắt đầu bằng Content- mới có ý nghĩa trong phần header của
body part. o boundary không được dài quá 70 kí tự (không bao gồm 2 dấu ‘-‘ dầu ....
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="exampledelimtext123"
This is a multipart message in MIME format dòng. Với boundary theo sau part cuối cùng sẽ được gắn thêm 2 dấu ‘-‘
vào cuối. o Tham số boundary bắt buộc phải có trong “multipart” Content-Type. 122 --exampledelimtext123
Content-Type: text/plain
Jane, here is the photo you wanted me for the new client.
Here are some notes on how it was processed.
(Blah blah blah…)
Talk to you soon,Joe.
--exampledelimtext123
Content-Type: image/jpeg; name="clientphoto.jpg"
Content-Transfer-Encoding: base64
SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs
…
zv/wAARCADIARoDASIAAhEBAxEB/8QAHAAAAQUBA
--exampledelimtext123-- Bảng B.1 – Ví dụ về tập tin MIME Cấu trúc của boundary được định nghĩa như sau: boundary := 0*69 bchars := bcharsnospace / " " bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / "+"
/"_" / "," / "-" / "." / "/" / ":" / "=" / "?" Multipart/mixed: được dùng khi các body part độc lập với nhau và cần được
giữ theo một trật tự. Bất kì subtype của multipart không thể nhận biết phải
được xem như “mixed”. Multipart/alternative: mỗi body part được xem như là một bản thay thế biểu diễn cùng một nội dung thông tin. Hệ thống sẽ chọn ra cách tốt nhất để hiển thị
nội dung. Thứ tự của các part trong “multipart/alternative” mang ý nghĩa rằng
tính chính xác của dữ liệu gốc tăng dần. Và thường hệ thống sẽ chọn ra phần
sau nhất được hỗ trợ để hiển thị nội dung. Mỗi phần nên có một Content-ID,
giá trị này giống nhau khi nội dung các phần giống hệt nhau và nên khác nhau
khi nội dung của các phần không giống nhau hoàn toàn. Các Content-ID này
khác với Content-ID của toàn bộ entity “multipart/alternative”. Multipart/digest: được dùng để gửi tập các message dạng văn bản. Nhưng giá trị mặc định của Content-Type trong mỗi phần là “message/rfc822”. Multipart/parallel: dùng để hiển thị tất cả các phần đồng thời trên cả phần cứng
và phần mềm mà nó hỗ trợ. Ví dụ, hiển thị một hình ảnh trong khi đang chơi
một bản nhạc. 123 Hình B.1 - Cấu trúc của một message kiểu multipart
(Nguồn: The TCP/IP Guide - www.tcpipguide.com) Message: cho phép message có thể chứa các messages khác hoặc chứa các con trỏ trỏ tới các message khác. message/rfc822: Phần thân của message chứa một message khác theo cấu trúc của RFC822 message. Tuy nhiên phần thân của
“message/rfc822” không yêu cầu các trường “From”, “Subject”, “To”.
Một message “message/rfc822” cũng có thể là một MIME message.
message/partial: được định nghĩa nhằm cho phép gửi các đối tượng dữ
liệu có kích thước lớn qua nhiều đoạn message khác nhau, sau đó tự
động hợp lại với nhau thành một message hoàn chỉnh. Chỉ có 7bit
Content-Transfer-Encoding được dùng trong trường hợp này. Có 3 tham
số bắt buộc phải có khi dùng “message/partial” Content-Type là id,
number và total. Id là một giá trị duy nhất để kết hợp các phần lại với
nhau. Nếu như id cho biết các phần thuộc về cùng một message thì
number cho biết thứ tự của các phần và có giá trị là một số tự nhiên.
Tham số cuối cùng là total, một số tự nhiên cho biết tổng số phần được
tách ra của message. Tham số này buộc phải có trong phần cuối cùng
nhưng nên dùng trong tất cả các phần. Chú ý giá trị của tham số number 124 bắt đầu từ 1. Khi phát sinh và hợp các phần của một message, các
header của message được gói gọn phải được kết hợp với các header của
message bao quanh bên ngoài theo các quy tắc sau:
(1) Tất cả các trường trong header của part 1 (enclosing entity), ngoại
trừ các trường bắt đầu bằng “Content-“ và các trường “Message-ID”,
“Encrypted” và “MIME-Version” phải được sao chép theo thứ tự sang
message mới.
(2) Chỉ những trường trong header của (enclosed message) bắt đầu bằng
“Content-” và các trường “Message-ID”, “Encrypted”, “MIME-
Version” phải được thêm theo thứ tự vào header của message mới.
(3) Tất cả các trường trong header của các message tiếp theo bắt đầu từ
message thứ 2 sẽ bị bỏ qua. Ví dụ: Một message được tách thành 2 phần, phần thứ nhất có nội dung:
X-Weird-Header-1: Foo From: Bill@host.com Enclosing entity To: joe@otherhost.com Subject: Audio mail Message-ID: MIME-Version: 1.0 Content-type: message/partial; id="ABC@host.com"; number=1; total=2 X-Weird-Header-1: Bar Enclosed message X-Weird-Header-2: Hello Message-ID: MIME-Version: 1.0 Content-type: audio/basic Content-transfer-encoding: base64 ... first half of encoded audio data goes here...
Phần thứ 2 có nội dung: 125 From: Bill@host.com To: joe@otherhost.com Subject: Audio mail MIME-Version: 1.0 Message-ID: Content-type: message/partial; id="ABC@host.com"; number=2; total=2 ... second half of encoded audio data goes here... Theo các quy tắc trên thì message được hợp nhất có nội dung:
X-Weird-Header-1: Foo From: Bill@host.com To: joe@otherhost.com Subject: Audio mail Message-ID: MIME-Version: 1.0 Content-type: audio/basic Content-transfer-encoding: base64 ... first half of encoded audio data goes here... ... second half of encoded audio data goes here... message/external-body: Cho phép nội dung của message nằm bên ngoài của message và chỉ được tham chiều tới message đó. Tham số buộc phải có khi sử
dụng “message/external-body” là “access-type”, cho biết cơ chế truy cập file.
Một số cơ chế thường sử dụng:
(1) “FTP” và “TFTP”: truy cập file thông qua giao thức FTP và TFTP. Với các
truy cập này, có thể sử dụng các tham số NAME, SIZE, DIRECTORY và
MODE (NETASCII, OCTET và MAIL cho TFTP; ASCII, EBCDIC, IMAGE,
LOCAL8 cho FTP). Nếu tham số MODE không được chỉ định, mặc định giá 126 trị này sẽ là NETASCII cho TFTP và ASCII cho FTP.
(2) “non-ftp”: giống như FTP ngoại trừ không dùng username và password để
đăng nhập và mà đăng nhập dạng ẩn danh (anonymous) với password ứng với
tài khoản email sử dụng.
(3) “local-file” và “afs”: “local-file” chỉ cho biết file được truy cập nằm trên
máy cục bộ trong khi “afs” cho biết file được truy cập thông qua hệ thống file
AFS. Tham số bắt buộc là NAME có giá trị là tên của file. Có thể dùng thêm
tham số SITE để chỉ ra các máy tính có quyền truy cập nội dung của file.
(4) “mail-server”: nội dung thực sự nằm trên mail server. Tham số bắt buộc là
SERVER chứa địa chỉ mail của mail server chứa nội dung dữ liệu.
“message/external-body” phải sử dụng trường Content-ID trong header với một
giá trị duy nhất để tham chiếu tới phần dữ liệu bên ngoài. Content-Transfer-Encoding: Dùng để chỉ ra cơ chế biến đổi được dùng để biểu
diễn nội dung phần thân thành dạng có thể truyền được trên các protocols giới
hạn tập kí tự chuyển qua. Nhờ đó bên nhận biết cách để chuyển ngược lại dữ
liệu gốc ban đầu. Một số cơ chế thường dùng: o “7bit” (phân biệt hoa thường):
o “quoted-printable”
o “base64”
o “8bit”
o “binary”
o x-token 7bit là giá trị mặc định. 7bit, 8bit và binary chủ yếu dùng để chỉ loại dữ liệu chứa trong đối tượng. 7bit bao gồm các dòng ngắn (<1000) với các kí tự US-ASCII.
8bit gồm các dòng ngắn bao gồm các kí tự không phải ASCII. Binary gồm các kí tự
không phải ASCII và không giới hạn độ dài của mỗi dòng. Có thể định nghĩa thêm cơ chế mới với cấu trúc x-my-new-encoding. Tuy nhiên, chỉ có 2 bên trong hệ thống mới hiểu cơ chế này. Nếu Content-Transfer-Encoding xuất hiện trong header của message thì có ảnh hưởng trên toàn bộ message đó. Nếu xuất hiện trong header của một phần của
message thì chỉ ảnh hưởng trên phần đó của message. Nếu một message (hoặc body
part) loại “multipart” hoặc “message” thì chỉ có 7bit, 8bit và binany được dùng. 3. Content-ID: Là một giá trị duy nhất cũng gần giống với Message-ID. Content-ID là không bắt buộc, tuy nhiên khi sử dụng trong message có Content-ID là
“message/external-body” thì bắt buộc phải có để cache dữ liệu được tham chiếu tới. 4. Content-Description:
Được dùng để bổ sung một số thông tin miêu tả cho nội dung của message, thường dùng dạng US-ASCII. 127 5. Content-Disposition:
Hai giá trị thường sử dụng là “inline” và “attachment”, có thể kèm thêm các tham
số khác. “inline” cho biết nội dung của phần message đó sẽ tự động hiển thị giống như
các phần khác. Trong khi “attachment” cho biết nội dung phần message bị tách riêng
khỏi phần nội dung chính (xem thêm RFC-2183). 6. Content-Location: Thông tin URI (uniform resource identifier) mà phần message sử dụng. 7. Content-Length: Tổng số byte dữ liệu chứa trong thực thể MIME (MIME entity). B.2 Cấu trúc mã trả về và ý nghĩa các chữ số
Mỗi mã trả về gồm một dãy 3 chữ số liên tiếp nhau “xyz” với ý nghĩa như sau: Chữ số đầu tiên (“x”): Chữ số đầu tiên cho biết kết quả của lệnh thành công
hay thất bại, lệnh đã hoàn thành hay chưa hoàn thành. Các giá trị có thể của
chữ số này như sau:
Định dạng Ý nghĩa
1yz
2yz
3yz 4yz 5yz Lệnh được chấp nhận và đang được xử lí.
Lệnh được thực hiện thành công và kết thúc.
Lệnh được chấp nhận, quá trình xử lí tạm dừng chờ cung cấp
thêm thông tin.
Lệnh không được chấp nhận và không có hành động nào được
thực hiện, nhưng lỗi xảy ra chỉ là tạm thời và có thể thử thực hiện
lại lệnh.
Lệnh không được chấp nhận và không có hành động nào được
thực hiện, thường do lệnh không đúng. Bảng B.2 - Chữ số “x” Chữ số thứ hai (“y”):
Định dạng Ý nghĩa
x0z
x1z
x2z
x3z
x4z
x5z Lỗi cấu trúc
Thông tin trạng thái lệnh.
Thông tin trạng thái kết nối client-server.
Không được chỉ định.
Không được chỉ định.
Thông tin liên quan đến dịch vụ (giao thức).
Bảng B.3 – Chữ số “y” B.3 Base64 và Quoted-printable Encoding B.3.1 Base64:
Phương pháp chuyển mã sử dụng các kí tự a-z, A-z, /, + và = để biểu diễn dữ liệu sau khi encode. 128 Các byte cần encode sẽ được biểu diễn dưới dạng nhị phân (nguyên vẹn 8 bit). Với mỗi 6 bit liên tiếp nhau trong dãy mã nhị phân tương ứng với một giá trị thập
phân từ 1-63, giá trị này được ánh xạ vào bảng chuyển đổi bên dưới sang giá trị được
encode. Khi số kí tự cần encode là bội của 3 (24 bit) thì kết quả encode không có phần
padding (các dấu =). Khi số kí tự cần encode chia 3 dư 2 thì kết quả sẽ có một dấu = ở
cuối. Nếu số dư là 1 thì sẽ có 2 dấu = ở cuối kết quả encode. Bảng mã chuyển đổi: 0 A 16 Q 32 g 48 W 1 B 17 R 33 H 49 X 2 C 18 S 34 I 50 Y 3 D 19 T 35 J 51 Z 4 E 20 U 36 K 52 0 5 F 21 V 37 L 53 1 6 G 22 W 38 M 54 2 7 H 23 X 39 N 55 3 8 I 24 Y 40 O 56 4 9 J 25 Z 41 P 57 5 10 K 26 a 42 Q 58 6 129 11 L 27 b 43 R 59 7 12 M 28 C 44 S 60 8 13 N 29 D 45 T 61 9 14 O 30 E 46 U 62 + 15 P 31 F 47 V 63 / Bảng B.4 – Bảng mã chuyển đổi Ví dụ: 77 97 110 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0 19 22 5 46 Bảng B.5 – Ví dụ về chuyển đổi mã B.3.2 Quoted-printable:
Là phương pháp chuyển mã sử dụng các kí tự in được để chuyển dữ liệu dạng
8-bit qua các đường đi chỉ hỗ trợ 7-bit. Phương pháp này ánh xạ một byte bất kì thành
một dãy các kí tự ASCII. Cách chuyển đổi: Bất kì byte nào sẽ được ánh xạ thành 3 kí tự (bắt đầu bằng
dấu =, theo sau là 2 kí tự hexa). Những kí tự in được (33-60 và 62-126) không cần
encode. Dấu = (mã 61) được encode thành =3D. Dấu TAB và SPACE được encode
thành =09 và =20. Dấu xuống dòng được encode thành =0D=0A. 130 Một dòng dữ liệu dạng quoted-pritable chỉ có tối đa 76 kí tự, do đó dấu xuống
dòng mềm (soft line break) được sử dụng để cắt bớt kí tự trong trường hợp có nhiều
hơn 76 kí tự. Ví dụ: If you believe that truth=3Dbeauty, then surely=20=
mathematics is the most beautiful branch of philosophy. Đoạn trên là kết quả sau khi encode chuỗi sau: If you believe that truth=beauty, then surely mathematics is the most beautiful
brach of philosophy. B.4 Cách đánh số các thành phần trong MIME Để có thể lấy đúng phần dữ liệu mong muốn khi dùng IMAP, ta cần phải hiểu cách các phần dữ liệu đó được đánh địa chỉ như thế nào trong cấu trúc MIME. Ví dụ dưới đây miêu tả cách xác định địa chỉ các phần trong một message dang
multipart. HEADER ([RFC-2822] header of the message)
TEXT ([RFC-2822] text body of the message)
MULTIPART/MIXED
1 TEXT/PLAIN
2 APPLICATION/OCTET-STREAM
3 MESSAGE/RFC822
3.HEADER ([RFC-2822] header of the message)
3.TEXT ([RFC-2822] text body of the message)
MULTIPART/MIXED
3.1 TEXT/PLAIN
3.2 APPLICATION/OCTET-STREAM
4 MULTIPART/MIXED
4.1 IMAGE/GIF
4.1.MIME ([MIME-IMB] header for the IMAGE/GIF)
4.2 MESSAGE/RFC822
4.2.HEADER ([RFC-2822] header of the message)
4.2.TEXT ([RFC-2822] text body of the message)
MULTIPART/MIXED 4.2.1 TEXT/PLAIN
4.2.2 MULTIPART/ALTERNATIVE
4.2.2.1 TEXT/PLAIN
4.2.2.2 TEXT/RICHTEXT Bảng B.6 – Cách đánh số các thành phần trong MIME 131 Trong đó: HEADER là toàn bộ phần header của message, TEXT là toàn bộ nội
dung phần thân của message (hoặc một part của message). Mỗi part sẽ được đánh số,
các part bên trong một part khác sẽ được đánh số theo chiều sâu. Ví dụ: Part 3 dạng MULTIPART/MIXED, bên trong chứa 2 part TEXT/PLAIN và APPLICATION/OCTET-STREAM sẽ được đánh số lần lượt là 3.1 và 3.2. Biết được
cách đánh địa chỉ này ta dễ dàng lấy được nội dung của bất kì phần nào trong message
thông qua lệnh FETCH đã đề cập ở trên. 132 Tài liệu dạng văn bản: [1] BlackBerry Forum – Blackberry Development Documents – Research In
Motion. [2] BlackBerry JDE 4.7 API References – BlackBerry 4.7 SDK. [3] BlackBerry Forum – Writing You Frist Application V5 – Research In Motion. [4] BlackBerry Forum – How And When To Sign V2 – Research In Motion. [5] BlackBerry Forum – Storing Persistent Data V2 – Research In Motion. BlackBerry Developer Journal Team – BlackBerry Developer Journal Volume [6]
2, issue 2 Josh Schiffman – BlackBerry OS Report 2 – Network and security Research [7]
Center, Department of computer Science and engineering, pennsylvania State
Univercity, University Park PA. [8] Logic mail – Logicmail Development Blog – 2008 - 2009 Các website: [9] www.Blackberry.com [10] www.codeproject.com [11] www.java2s.com [12] www.wikipedia.org [13] www.thinkingblackberry.com [14] http://en.wikipedia.org/wiki/Base64 [15] http://en.wikipedia.org/wiki/Quoted-printable http://www.tcpipguide.com/free/t_MIMECompositeMediaTypesMultipartandE [16]
ncapsulatedMes-4.htm [17] https://www.logicprobe.org/proj/logicmail/ [18] http://na.blackberry.com/eng /developers/ 133PHẦN 2: CƠ SỞ LÝ THUYẾT
PHẦN 3: XÂY DỰNG ỨNG DỤNG GỬI NHẬN E-MAIL
0 BODY[HEADER] (BODYSTRUCTURE)Add attachment
Save attachment
Auto Receive Mail
Delete E-mail
Read E-mail
Compose E-mail
Manage Configuration
Search E-mail
List E-mails
Add Account
Show About & Help
User
Delete Account
Manage Template
Manage Accounts
Update Account
Update Template
Add Template
Delete Template
PHẦN 4: PHỤ LỤC
Value Char
Value Char
Value Char
Value Char
Text content
M
A
n
ASCII
Bit pattern
Index
Base64-encoded
T
W
F
u
Tài liệu tham khảo