ĐẠ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 đó:

: đường dẫn tới server.  : port kết nối tới server.  : đường dẫn thư mục trên server.  : Các tham số mở rộng, bao gồm:

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 đó:

: đường dẫn tới server.  : port kết nối tới server.  : đường dẫn thư mục trên server.  : Các tham số mở rộng, bao gồm:

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

PHẦN 2: CƠ SỞ LÝ THUYẾT

Chương 4: Các giao thức trong gửi nhận e-mail

4.1 Giao thức SMTP27:

4.1.1 Lịch sử: Tiền thân của SMTP là giao thức MTP (Mail Transfer Protocol) được định

nghĩa trong RFC 772 vào tháng 9 năm 1980. Giao thức này diễn tả một tập hợp các lệnh và thủ tục để 2 thiết bị kết nối với nhau qua TCP và trao đổi e-mail với nhau. Đến tháng 5 năm 1981, giao thức MTP được cập nhật trong RFC 780.

Do tầm quan trọng và thực tế của việc trao đổi thư điện tử, đến tháng 11 năm

1981, một giao thức mới được thiết kế riêng biệt cho việc gửi thư điện tử ra đời, đó là giao thức SMTP (Simple Mail Transfer Protocol). Ban đầu giao thức SMTP chỉ truyền những thư dạng văn bản theo chuẩn ARPAnet (định nghĩa trong RFC 733).

Đến tháng 8 năm 1982, 2 tài liệu RFC 821 và 822 được công bố, phát triển các

tính năng cho giao thức SMTP.

Từ đó đến nay, mặc dù có nhiều tài liệu mới nhưng chủ yếu là bổ sung vào tài

liệu chuẩn RFC 821 và RFC 822. Có thể ghi nhận một số thay đổi đáng chú ý của giao thức SMTP, đó là RFC 1425 được công bố tháng 2 năm 1993.

RFC 1425 bổ sung khả năng mở rộng cho SMTP và có tên là ESMTP (SMTP

Service Extensions hoặc Extended SMTP hoặc Enhenced SMTP).

RFC 1425 tiếp tục được sửa thành RFC 1651 (6/1994) và RFC 1869 (11/1995).

Các bổ sung về trao đổi kênh liên lạc và kích thước thư được định nghĩa trong những lần sửa đổi này.

Một cột mốc đáng ghi nhận trong quá trình phát triển của giao thức SMTP là 2 tài liệu RFC 2821 và RFC 2822 được công bố tháng 4 năm 2001. RFC 2821 kết hợp chặt chẽ những đặc điểm của giao thức trong RFC 821 và RFC 1869, và hiện là tài liệu chuẩn của giao thức SMTP. Các tài liệu khác tiếp theo hỗ trợ các cơ chế truyền an toàn, truyền tập tin kích thước lớn, ....

4.1.2 Tổng quan: SMTP là giao thức truyền thư tín đơn giản, một chuẩn truyền thư điện tử qua

mạng Internet dựa trên văn bản (text-based). Bên gửi và bên nhận lần lượt dùng các chuỗi lệnh và các thông tin cần thiết trao đổi qua một kênh truyền tin cậy (reliable

27 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 Hoặc EHLO

- 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 FROM:

- 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 TO: - Tham số: forward-path: chứa tên hộp thư bên nhận. - Ý nghĩa: SMTP bên gửi cung cấp một địa chỉ e-mail của người nhận cho

SMTP bên nhận.

- Ví dụ:

RCPT TO:

Lệnh DATA:

- Cú pháp:

DATA - Tham số: không có - Ý nghĩa: Cho biết bạn đang gởi nội dung của mail. Server sẽ đáp lại mã 354 báo cho client biết server bắt đầu nhận nội dung. Client sau khi nhận câu trả lời từ server sẽ tiến hành gửi nội dung thư và bắt buộc phải kết thúc bằng 5 ký tự “\r\n.\r\n”.

Lệnh RSET:

- Cú pháp:

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 - Tham số: string: địa chỉ mail cần kiểm tra. - Ý nghĩa: Yêu cầu SMTP bên nhận kiểm tra tính xác thực của hộp thư được

chỉ định

- Ví dụ:

VRFY abc@domail.com

Lệnh EXPN:

- Cú pháp:

EXPN - Tham số: string: tên danh sách địa chỉ. - Ý nghĩa: Yêu cầu máy chủ SMTP xác nhận tên danh sách địa chỉ và trả về

danh sách các địa chỉ chứa trong đó.

Lệnh HELP:

- Cú pháp:

HELP [ ]

- 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 - Tham số: không có - Ý nghĩa: Lệnh NOOP không có chức năng đặc biệt nào ngoài việc dùng để

kiểm tra kết nối.

Lệnh QUIT:

- Cú pháp:

QUIT - Tham số: không có - Ý nghĩa: Kết thúc phiên làm việc giữa client và server.

Lệnh TURN:

Đã bị loại bỏ từ RFC 2821

Lệnh SOML:

Đã bị loại bỏ từ RFC 2821

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 Service ready.

221 closing Dùng trong kết quả trả về của lệnh HELP. Lời chào từ server khi kết nối TCP được thiết lập. Lời chào tạm biệt của lệnh QUIT.

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 dịch vụ không tồn tại, đóng kênh giao tiếp. 450 Hành động được yêu cầu trên

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 username

- 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:

PASSpassword

- 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:

RETRmsg#

- 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:

TOPmsg#line#

- 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:

DELEmsg#

- 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

APOPusernameencryptedKey - Tham số: username: tên tài khoản mail; encryptedKey: khóa trao đổi được mã hóa. - Ý nghĩa: Cho phép kích hoạt chế độ bảo mật của chứng thực POP3. Khi chế này được kích hoạt, password sẽ không được gởi dưới dạng text thông thường mà gởi dưới dạng chuỗi đã được mã hóa bằng thuật toán MD5 từ password, process ID và thời gian.

Lệnh QUIT:

- Cú pháp:

QUIT

- 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 o Tham số: không có o Trả lời: yêu cầu phải có một trả lời không nhãn CAPABILITY. o Kết quả: OK: lệnh hoàn thành.

BAD: không nhận ra command hay tham số không hợp lệ o Ý nghĩa: Yêu cầu server trả về danh sách các khả năng mà nó hỗ trợ. Danh sách này được trả về trong một lời trả lời không thẻ CAPABILITY.

o Ví dụ:

C: abcd CAPABILITY S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI LOGINDISABLED 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 Tham số: không có o Trả lời: Không có trả lời nào đặc biệt cho câu lệnh này. o Kết quả: OK: lệnh hoàn thành. BAD: không nhận ra command hay tham số không hợp lệ.

o Ý nghĩa: Lệnh noop luôn luôn thành công. Câu lệnh này không thực hiện hành động nào cả. Lệnh noop có thể được dùng để reset bộ đếm giờ để tự động logout của server khi không có hành động nào o Ví dụ:

C: A023 LOGOUT S: * BYE IMAP4rev1 Server logging out S: A023 OK LOGOUT completed

Lệnh LOGOUT:

o Cấu trúc: LOGOUT o Tham số: không có o Trả lời: Phải có câu trả lời BYE(Không có nhãn). o Kết quả: OK – Logout thành công

BAD – Câu lệnh hoặc tham số sai

o Ý nghĩa: Câu lệnh Logout cho Server biết Client đã thực hiện xong việc kết nối. Server phải gởi một trả lời BYE trước trả lời OK(Có nhãn), sau đó Server đóng kết nối lại.

o Ví dụ:

C: A023 LOGOUT S: * BYE IMAP4rev1 Server logging out S: A023 OK LOGOUT completed

 Nhóm lệnh dùng ở trạng thái chưa được chứng thực:

Lệnh STARTTLS:

o Cấu trúc: STARTTLS o Tham số: không có o Trả lời: Không có trả lời nào đặc biệt cho câu lệnh này. o Kết quả: OK – Câu lệnh thành công, bắt đầu quá trình thương lượng

bằng TLS.

BAD – Câu lệnh sai hoặc tham số sai

o Ý nghĩa: Quá trình thương lượng bằng TLS sẽ bắt đầu ngay sau CRLF tại câu trả lời có nhãn OK của server. Không nên đưa ra câu lệnh nào khác trừ khi server đã trả lời quá trình thương lượng bằng TLS hoàn tất.

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 C: a003 CAPABILITY S: * CAPABILITY IMAP4rev1 AUTH=PLAIN S: a003 OK CAPABILITY completed C: a004 LOGIN joe password S: a004 OK LOGIN completed

Lệnh LOGIN:

o Cấu trúc: LOGINusernamepassword o Tham số: username:tên truy cập; password: mật khẩu truy cập. o Trả lời: Không có trả lời đặc biệt cho câu lệnh này. o Kết quả: OK – Đăng nhập thành công, đang ở trạng thái chứng thực.

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: AUTHENTICATEauth-name o Tham số: auth-name:tên cơ chế dùng để chứng thực. o Trả lời: yêu cầu cung cấp thêm thông tin để tiếp tục lệnh. o Kết quả: OK: chứng thực thành công, client vào trạng thái đã được

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: SELECTmail-box o Tham số: mail-box: tên hộp thư (thư mục) o Trả lời: Yêu cầu sự đáp lại không nhãn: FLAGS, EXISTS, RECENT

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ư. EXISTS Số lượng tin nhắn trong hộp thư. RECENT OK [UNSEEN ] Số thứ tự của tin nhắn chưa được đọc đầu tiên. danh sách các cờ mà OK [PERMANENTFLAGS (list of flags)] client có thể thay đổi vĩnh viễn. Nếu không có danh sách này thì mặc định có thể thay đổi tất cả các cờ. OK [UIDNEXT ] OK [UDIVALIDITY ] Giá trị UID có hiệu lực.

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: EXAMINEmail-box o Tham số: mail-box: tên hộp thư (thư mục) o Trả lời: Yêu cầu trả lời không nhãn: FLAGS, EXISTS, RECENT

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: CREATEnew-mail-box o Tham số: new-mail-box: tên hộp thư cần tạo. o Trả lời: không có trả lời đặc biệt cho lệnh này. o Kết quả: OK: tạo thành công;

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: DELETEmail-box o Tham số: mail-box: tên hộp thư o Trả lời: không có trả lời đặc biệt cho lệnh này. o Kết quả: OK – xóa hộp thư thành công

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: RENAMEmail-boxnew-mail-box o Tham số: mail-box: tên hộp thư đang tồn tại; new-mail-box: tên hộp thư

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: SUBCRIBEmail-box o Tham số: mail-box: tên hộp thư o Trả lời: không có trả lời đặc biệt cho lệnh này. o Kết quả: OK – Thực hiện lệnh thành công.

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: UNSUBCRIBEmail-box o Tham số: mail-box: tên hộp thư o Trả lời: không có trả lời đặc biệt cho lệnh này. o Kết quả: OK – Thực hiện lệnh thành công.

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: LISTreference-namepattern o Tham số: reference-name: đường dẫn thư mục cha; pattern: chuỗi định

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

STATUSmail-boxstatus-flag- Lệnh STATUS: o Cấu

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: APPENDmail-box[status-flag-

list>

[Date/time] Content

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 o Tham số: không có o Trả lời: không có trả lời đặc biệt cho lệnh này. o Kết quả: OK – thực hiện thành công, chuyển về trạng thái đã được

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 o Tham số: không có o Trả lời: Một trả lời không thẻ: EXPUNGE o Kết quả: OK – thực hiện thành công

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[CHARSETcharset-

value]criteria-list

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:

các tin có số thứ tự thuộc tập hợp

ALL tất cả các tin nhắn trong hộp thư

ANSWERED các tin nhắn có cờ \Answered

BCC các tin nhắn có BCC chứa chuỗi cần tìm

BEFORE các tin nhắn có giá trị ngày cục bộ sớm hơn giá trị

ngày cần tìm

CC các tin nhắn có CC chứa chuỗi cần tìm

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 các tin nhắn có FROM chứa chuỗi cần tìm

HEADER các tin nhắn có header với trường chỉ định chứa chuỗi cần tìm.

61

Chương 4: Các giao thức trong gởi nhận E-mail

KEYWORD các tin nhắn có cờ chỉ định được bật

LARGER các tin nhắn có kích thước lớn hơn n

NEW các tin nhắn có cờ \Recent nhưng không có cờ \Seen

NOT các tin nhắn không thỏa khóa tìm

OLD các tin nhắn không có cờ \Recent

ON các tin nhắn trong ngày chỉ định

OR các tin nhắn thỏa khóa tìm 1 hoặc 2

RECENT các tin nhắn có cờ \Recent

SEEN các tin nhắn có cờ \Seen

SENTBEFORE các tin nhắn có giá trị trong Date: sớm hơn

ngày chỉ định

SENTON các tin nhắn có giá trị trong Date: trong ngày chỉ

định

SENTSINCE các tin nhắn có giá trị trong Date: trong hoặc

sau ngày chỉ định

SINCE các tin nhắn có giá trị ngày nội bộ sau ngày chỉ

định

SMALLER các tin nhắn có kích thước nhỏ hơn n

SUBJECT các tin nhắn có SUBJECT chứa chuỗi cần tìm

TEXT các tin nhắn chứa chuỗi chỉ định trong header hoặc

thân

TO các tin nhắn có TO chứa chuỗi cần tìm

UID các tin nhắn có UID thuộc tập chỉ định

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 các tin nhắn không có cờ được chỉ định

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: FETCHsequence-number(hoặc sequence-

number-range)macro(hoặc address)

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] nhưng không gán cờ \Seen cho message.

- 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: STOREsequence-number(hoặc sequence-

number-range)item-nameitem-value 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); item-name: tên thành phần thay đổi dữ liệu; item-value: giá trị dữ liệu thay đổi.

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 : Thay thế tập hợp cờ của message, trả về

giá trị mới cập nhật.

 FLAGS.SILENT : Thay thế tập hợp cờ của

message nhưng không trả về giá trị mới cập nhật.

 +FLAGS : Thêm một số cờ vào tập hợp cờ của

message, trả về giá trị mới cập nhật.

 +FLAGS.SILENT : Thêm một số cờ vào tập hợp

cờ của message, không trả về giá trị mới cập nhật.

 -FLAGS : Xóa một số cờ trong tập hợp cờ của

message, trả về giá trị mới cập nhật.

 -FLAGS.SILENT : Xóa một số cờ trong tập hợp

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: UIDcommand-nameparams-list o Tham số: command-name: tên lệnhl params-list:danh sách tham số o Trả lời: Các trả lời không thẻ : FETCH, SEARCH 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. 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: COPYsequence-number(hoặc sequence-

number-range)dest-mail-box

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

PHẦN 3: XÂY DỰNG ỨNG DỤNG GỬI NHẬN E-MAIL

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 0

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 BODY[HEADER]

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 (BODYSTRUCTURE)

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:

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

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ẦN 4: PHỤ LỤC

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

MyCompany Copyright (c) 2010 MyCompany MyCompany FirstApp.cod

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: /[; parameter1; paramenter2; ...]

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 bcharsnospace

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:

Value Char

Value Char

Value Char

Value Char

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ụ:

Text content

M

A

n

77

97

110

ASCII

0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0

Bit pattern

19

22

5

46

Index

Base64-encoded

T

W

F

u

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 tham khảo

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/

133