báo cáo Ứng dụng mail client

54
LI CẢM ƠN ---------- Lời đầu tiên, nhóm em xin chân thành cảm ơn ThS. Phạm Thi Vương! Thầy đã tận tình chbảo, truyền đạt những kiến thức vô cùng bích, quý báu cũng như những ví dcthể, sinh động, hấp dẫn để nhóm em có ththực hiện tốt đề tài này. Nhóm em cũng xin cảm ơn Trường Đại Học Công NghThông Tin! Trường đã tạo điều kiện thuận lợi cho chúng em (thư viện học tập rất tưởng) có thhọp nhóm hiệu quả. Nhóm em cũng xin gửi lời cảm ơn sâu sắc đến gia đình, bạn bè và những người thân đã động viên, cvũ vvật chất cũng như tinh thần giúp em vượt qua khó khăn, trngại để tiếp tc hoàn thành đề tài. Xin chân thành cảm ơn! Tp. HCM, tháng 06 – 2013 Nhóm thực hiện

Upload: neu-la-anh

Post on 06-Feb-2016

36 views

Category:

Documents


0 download

DESCRIPTION

Báo cáo hệ thống mail client do nhóm sinh viên đại học CNTT DDHQGTPHCM thực hiện.

TRANSCRIPT

Page 1: Báo cáo Ứng dụng mail client

LỜI CẢM ƠN ----------

Lời đầu tiên, nhóm em xin chân thành cảm ơn ThS. Phạm Thi Vương! Thầy đã tận tình chỉ bảo, truyền đạt những kiến thức vô cùng bổ ích, quý báu cũng như những ví dụ cụ thể, sinh động, hấp dẫn để nhóm em có thể thực hiện tốt đề tài này.

Nhóm em cũng xin cảm ơn Trường Đại Học Công Nghệ Thông Tin! Trường đã tạo điều kiện thuận lợi cho chúng em (thư viện học tập rất lý tưởng) có thể họp nhóm hiệu quả.

Nhóm em cũng xin gửi lời cảm ơn sâu sắc đến gia đình, bạn bè và những người thân đã động viên, cổ vũ về vật chất cũng như tinh thần giúp em vượt qua khó khăn, trở ngại để tiếp tục hoàn thành đề tài.

Xin chân thành cảm ơn! Tp. HCM, tháng 06 – 2013 Nhóm thực hiện

Page 2: Báo cáo Ứng dụng mail client

Table of Contents LỜI CẢM ƠN ...................................................................................................................................... 1

LỜI NÓI ĐẦU ...................................................................................................................................... 3

NHẬN XÉT CỦA GIẢNG VIÊN .............................................................................................................. 5

I. GIỚI THIỆU ................................................................................................................................. 1

II. MÔ TẢ CHỨC NĂNG. ................................................................................................................... 2

1. Các chức năng chính: ........................................................................................... 2

1.1 Sử dụng tài khoản Gmail trên một Client. .................................................................. 2

1.2 Nhận và lưu trữ Email. .............................................................................................. 2

1.3 Tính năng xem nhanh email hữu ích cho người dùng. ............................................... 2

1.4 Xây dựng sổ địa chỉ. .................................................................................................. 3

1.5 Tìm kiếm Email. ......................................................................................................... 4

1.6 Quản lý email: xóa, chuyển, lưu thư… ..................................................................... 4

1.7 Soạn và gửi Email. ..................................................................................................... 5

1.8 Tính năng tự động thông báo khi có mail mới. ........................................................... 5

1.9 Hỗ trợ thiết lập tài khoản. ......................................................................................... 6

2. Hướng dẫn sử dụng. ............................................................................................. 6

2.1 Cài đặt ứng dụng ....................................................................................................... 6

2.2 Cách sử dụng ............................................................................................................. 7

III. CẤU TRÚC CHƯƠNG TRÌNH. ...................................................................................................20

1. Sơ đồ các module chính ................................................................................ 20

2. Sơ đồ các lớp ................................................................................................ 21

3. Giao diện chương trình ................................................................................. 23

3.1 Form Main. ........................................................................................................ 23

3.2 Form NewAccount. ............................................................................................. 24

3.3 Form SendMail. ................................................................................................. 24

3.4 Form Contacts. .................................................................................................. 25

3.5 Form newContact. ................................................................................................... 26

3.6 Form Search. ...................................................................................................... 27

3.7 Form Setting. ..................................................................................................... 28

3.8 Form Attach. ...................................................................................................... 29

Page 3: Báo cáo Ứng dụng mail client

3.9 Form About. ....................................................................................................... 29

4 Thuật toán mã hóa AES. .................................................................................. 30

5 Thiết kế cơ sở dữ liệu ....................................................................................... 33

IV. SOURCE CODE CÁC MODULE CHÍNH. ......................................................................................35

1. Nhận mail ..................................................................................................... 35

1.1 Đăng nhập và đăng nhập vào Mail Server tiến hành tải mail mới về client. ............. 35

1.2 Source code toolstripProcessBar chạy khi lấy mail về. ....................................... 36

2. Tự động thông báo có thư mới. ..................................................................... 38

2.1 Sử dụng timer để tự động lấy thư mới về . ................................................................ 38

2.2 Tự động thông báo khi có thư mới ............................................................................ 39

3.Chức năng xem mail nhanh. ................................................................................ 39

4. Soạn và gửi mail. .......................................................................................... 40

4.1 Thư viện sử dụng và cách khai báo: ........................................................................ 40

4.2 Hàm gửi mail và các thao tác định dạng. ................................................................ 41

5. Danh sách và chức năng chính của các Class. ............................................... 48

V. TÀI LIỆU THAM KHẢO .............................................................................................................49

LỜI NÓI ĐẦU ----------

Công nghệ thông tin phát triển nhanh chóng như vũ bão đã tác động tích cực

đến mọi mặt đời sống kinh tế, xã hội. Internet đã trở nên quen thuộc và không thể thiếu với mỗi người, với mỗi quốc gia và xã hội. Nhu cầu liên lạc, trao đổi thông tin qua Internet phát triển với tốc độ chóng mặt, và email là một phương tiện liên lạc có chi phí thấp, nhanh chóng và hiệu quả trên Internet. Hằng ngày chúng nhận một số lượng email khá lớn, nếu như bạn là người không thường xuyên sử dụng Internet và bạn muốn xem được email của mình ngay cả khi không truy cập được Internet…

Nhóm 18 đã phát triển “Ứng dụng Mail Client” nhằm hỗ trợ người dùng có thể

xem email bất cứ khi nào cần. Phần mềm của nhóm gồm các chức năng chính sau: Hỗ trợ dùng nhiều tài khoản Gmail trên một Client. Nhận Email và lưu trữ email. Tính năng xem nhanh email hữu ích cho người dùng.

Page 4: Báo cáo Ứng dụng mail client

Xây dựng sổ địa chỉ. Tìm kiếm Email. Soạn và gửi Email. Quản lý email như chuyển, xóa, lưu thư nháp,… email. Tự động báo thư mới khi client nhận được thư mới. Hỗ trợ người dùng thiết lập cho tài khoản.

Với giao diện khá đẹp mắt, hiệu quả, tiện dụng, kết hợp hướng dẫn sử dụng chi tiết, nhóm hy vọng người dùng sẽ hài lòng với sản phẩm. Mặc dù đã cố gắng hoàn thành tốt đề tài nhưng không tránh khỏi những thiếu sót. Rất mong nhận được ý kiến đóng góp từ Quý Thầy, bạn bè và khách hàng để phần mềm ngày càng hoàn thiện hơn. Xin chân thành cảm ơn!

Tp. Hồ Chí Minh, tháng 6 – 2013.

Nhóm thực hiện

Page 5: Báo cáo Ứng dụng mail client

NHẬN XÉT CỦA GIẢNG VIÊN .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. .............................................................................................................................. ..............................................................................................................................

Page 6: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 1

ỨNG DỤNG MAIL CLIENT.

I. GIỚI THIỆU

Ứng dụng Mail Client của nhóm 18 là ứng dụng thao tác với email, hỗ trợ cho Gmail nhằm phục vụ nhu cầu liên lạc trên Internet qua tài khoản của Google Mail. Ứng dụng với các tính năng: tự động cập nhật và lấy email mới lưu trữ tại client có hỗ trợ xem file đính kèm, nhận thư, soạn thảo email mới có hỗ trợ lưu vào hộp thư nháp nếu muốn, gửi thư với đính kèm tập tin, chèn hình ảnh, hyperlink vào nôi dung email, xóa email tại client, sổ địa chỉ có thể tự động lấy liên hệ khi người dùng soạn và gửi email và cho phép người dùng thêm liên hệ thủ công, hỗ trợ tìm kiếm email và hướng dẫn sử dụng chi tiết phần mềm. Ứng dụng được xây dựng trên môi trường Visual Studio 2012, sử dụng ngôn ngữ C#( với giao diện trên Windows Forms Application). Mail Client 1.0 có giao diện tiếng anh, dễ sử dụng, trực quan với mục tiêu đem lại sự thân thiện và thoải mái cho người sử dụng.

Page 7: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 2

II. MÔ TẢ CHỨC NĂNG. 1. Các chức năng chính:

1.1 Sử dụng tài khoản Gmail trên một Client. Ứng dụng của nhóm chúng em có thể hỗ trợ quản lý cùng lúc nhiều tài khoàn

Gmail trên cùng một Client.

1.2 Nhận và lưu trữ Email. Ứng dụng hỗ trợ hai chế độ Get Mail về Client:

- Get Mail tự động: khi ứng dụng mở lên tự động lấy mail về và sau một khoản thời gian nhất định(người dùng có thể tự cấu hình trong mục “Setting”) mặc định là 5 phút.

- Get Mail thủ công: người dùng có thể lấy mail theo ý muốn. Mail mới sẽ được lưu xuống cơ sở dữ liệu. Người dùng có thể xem mail khi không thể truy cập Internet.

1.3 Tính năng xem nhanh email hữu ích cho người dùng. Người dùng có thể rê chuột vào các mail trên danh sách thời gian nhận được và nội dung tóm lược của mail được hiển thị cho người dùng xem trước khi click vào để xem mail.

Page 8: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 3

Với tính năng xem nhanh ứng dụng của nhóm hỗ trợ người dùng check mail nhanh hơn kiểu xem bình thường, giúp tiết kiệm thời gian, và tránh khỏi đọc phải những mail người dùng không thích.

1.4 Xây dựng sổ địa chỉ. Sổ địa chỉ dùng quản lý các địa chỉ liên lạc của người dùng, hỗ trợ thêm liên hệ mới, chỉnh sửa, xóa, soạn mail mới đến liên hệ.

Page 9: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 4

1.5 Tìm kiếm Email. Hỗ trợ tìm kiếm mail theo tiêu đề, người gửi, người nhân, nội dung mail, ngày gửi.

1.6 Quản lý email: xóa, chuyển, lưu thư… Ứng dụng cho phép người dùng thực hiện các thao tác quản lý mail cơ bản như: chuyển thư từ “Inbox” sang “Trash”, xóa thư ra khỏi client , lưu thư thành “Drafts”, “Sent”.

Page 10: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 5

1.7 Soạn và gửi Email. Thực hiện soạn mail mới, trả lời thư, chuyển tiếp thư, gửi thư có đính kèm file, hình ảnh, trang webs, tự động thêm địa chỉ mới vào danh sách liên hệ khi người dùng gửi mail lần đầu cho ai đó.

1.8 Tính năng tự động thông báo khi có mail mới. Người dùng có thể yên tâm làm việc mà không lo lắng đến việc quên kiểm tra mail mới, nhờ tính năng tự động thông báo có mail mới của ứng dụng, với tiếng nhạc nhẹ nhàng, như khẽ nhắc người dùng.

Page 11: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 6

1.9 Hỗ trợ thiết lập tài khoản. Người dùng có thể xem các thông tin cấu hình máy chủ gửi, nhận mail, thay đổi thời gian tự động kiểm tra mail mới, cổng gửi và nhận thư.

2. Hướng dẫn sử dụng.

2.1 Cài đặt ứng dụng

Page 12: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 7

2.2 Cách sử dụng

2.2.1 Màn hình khởi động.

Ghi chú: sau khi cài đặt phần mềm màn hình khởi động như hình trên, người dùng có thể thêm tài khoản gmail vào bằng cách nhấn vào nút “Add new Gmail account” hoặc vào FileAdd account, sau đó cửa sổ Add New Account sẽ được mở lên .

2.2.2 Màn hình thêm tài khoản Gmail

Ghi chú: Sau khi mở cửa sổ Add New Account. Người dùng có thể điền thông tin theo mẫu sau:

Page 13: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 8

Your name: Tên của người dùng. Email Address: Địa chỉ Gmail. Password: Mật khẩu tài khoản Gmail. Khi thêm tài khoản tại khung nhập email sẽ kiểm tra địa chỉ email có hợp lệ hay

không. Nếu không hợp lệ thanh “Status” sẽ hiển thị nội dung “Check email format!” và nút “OK” bị ẩn đi. Bạn phải nhập lại đúng địa chỉ email.

Sau khi điền đủ thông tin, người dùng chọn nút “OK” hoặc nhấn “Enter”, nếu đăng nhập nhập vào mail server thì cửa sổ Add New Account sẽ được đóng lại, và quay lại cửa sổ Main, ngược lại sẽ hiển thị thông báo ”Password or user name is in correct! ”, khi đó người dùng phải nhập lại mật khẩu. Cỏ thể chọn nút “Cancel” để thoát khỏi màn hình Add New Account.

2.2.3 Màn hình chính(màn hình thực đơn)

Ghi chú: người dùng có thể sử dụng menu, các nút, … để thực hiện các chức năng chính của chương trình như: lấy thư về, soạn thảo, lưu trữ hoặc gửi đi một hay nhiều thư mới, xóa thư, xem danh sách liên hệ, tìm kiếm thư, xem thư, cài đặt tài khoản, thông tin về phần mềm, giúp đỡ, …. Người dùng có thể thực hiện như sau:

Lấy & lưu thư: nhấn nút “Get Mail” nếu lấy về tất cả thư của tất cả các tài khoản, nhấn vào từng tài khoản nếu muốn lấy mail theo tài khoản được chọn: có 2 cách: như hình 1 và hình 2.

Page 14: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 9

Hinh 1 Hinh 2

Đọc thư: người dùng có thể đọc thư ở hai chế độ: đọc nhanh(hình 1) và đọc đầy đủ(hình 2):

Hình 1.

Hình 2.

Page 15: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 10

Đặc biệt: người dùng có thể xem nhanh các thư chưa đọc, thư có đính kèm File, và thư có gắn dấu sao ngay trên của sổ chính khi nhấn vào ViewUnread(Starred/Attachment).

Trả lời, chuyển tiếp thư: nhấn nút “Reply” để trả lời thư theo từng mail khi người dùng đọc thư ở chế độ đọc đầy đủ, nhấn nút “Forward” để chuyển tiếp thư đến bạn bè hay một ai đó. Người dùng cũng có thể trả lời và chuyển tiếp thư đang đọc bằng cách vào EditReply đối với trả lời, Edit Forward đối với chuyển tiếp.

Thêm tài khoản Gmail mới: người dùng vào FileAdd Account để thêm vào tài khoản Gmail khác.

Soạn thư mới: hỗ trợ người soạn thư mới ở các của sổ Main, Address Book. Người dùng có thể nhấn nút “Write” tại của sổ Main hoặc vào

FileNew Mail để viết thư mới chưa có địa chỉ người nhận nếu trong danh sách liên hệ của người dùng chưa có ai, và soạn mail cho người đầu tiên trong danh sách liên hệ.

Ứng dụng còn hỗ trợ tạo thư mới khi người dùng Click vào địa chỉ của người gửi trên của sổ Main như hình

Page 16: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 11

hoặc click chuột phải chọn “Create new mail”:

Xóa mail: người có thể xóa mail hiện tại đang đọc, tất cả các mail đã đọc, mail chưa đọc( chỉ áp dụng cho Inbox ) và tất cả các mail có trong hộp thư( Inbox, Sent, Draft, Trash).

Click chuột phải vào “Inbox”, “Sent”, “Draft”, “Trash” để thao tác.

EditDelete(thực hiện xóa mail đang xem, hay đang chọn). Tìm kiếm thư: nhấn nút “Search” hoặc click chuột phải vào tên tài khoản chọn

“Search Messages…”. Cài đặt tài khoản: người dùng có thể Click chuột phải vào tên tài khoản chọn

“Setting…”.

Page 17: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 12

Vào cửa sổ “Address Book”: nhấn nút “Address Book”. Thoát: vào FileExit.

2.2.4 Màn hình thông tin(About).

Ghi chú: Màn hình About cho biết các thông tin về ứng dụng: phiên bản, người

phát triển, hỗ trợ kỹ thuật. Người dùng vào: Help About.

2.2.5 Màn hình danh sách liên hệ(Contact).

Page 18: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 13

Ghi chú: Màn hình Address Book hỗ trợ người dụng các chức năng: xem, thêm, xóa, sửa một hay nhiều liên hệ.

Thêm liên hệ: hỗ trợ thêm ở của sổ chính và cửa sổ Address Book và sau khi gửi mail.

Cửa sổ chính: click chuột phải vào mục “From ” hoặc “To” như hình để thêm vào liên hệ mới.

Tại cửa sổ Address Book: nhấn nút “New Contact”. Sau khi gửi mail đi ứng dụng sẽ tự động lưu liên hệ mới vào “Collection

Address”. Chỉnh sửa liên hệ: sau khi chọn liên hệ người dùng có thể chỉnh sửa

Nhấn nút “Edit”. Soạn thư cho liên hệ được chọn: nhấn nút “Write”. Xóa liên hệ: xóa một hay nhiều liên hệ có trong danh sách

Chọn một hay nhiều liên hệ rồi nhấn nút Delete. Truy cập vào website cá nhân hay công ty của liên hệ:

Thoát: nhấn nút “Exit”.

Page 19: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 14

2.2.6 Màn hình thêm liên hệ(New contact). Tab Contact:

Tab Home – Work:

Ghi chú: màn hình này cho phép người dùng nhập các thông tin của một liên hệ.

Page 20: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 15

Người dùng thưc hiện các thao tác để thêm một liên hệ:

Contact: First name: Tên người dùng Last name: Họ và tên đệm Display: Tên hiển thị Chat name: Nick name của liên hệ Email: Địa chỉ email của liên hệ Additional Email: Địa chỉ email khác của liên hệ

Home: Address: Địa chỉ nhà của liên hệ Phone: ĐTDĐ hoặc điện thoại nhà. Fax: Số fax Website: Website riêng của liên hệ

Work: Company: Công ty của liên hệ Job: Nghề nghiệp Country: Quốc gia của liên hệ Website: Website của công ty của liên hệ.

2.2.7 Màn hình chỉnh sửa liên hệ

Ghi chú: màn hình chỉnh sửa liên hệ: cho phép người dùng thay đổi, chỉnh sửa thông tin cá nhân của 1 liên hệ.

Page 21: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 16

2.2.8 Màn hình tìm kiếm thư( Search).

Ghi chú: màn hình search cung cấp người dùng các tính năng: tìm kiếm thư theo từng mục riêng biệt(Tiêu đề, người gửi, người nhân, nội dung, ngày gửi), tìm kiếm nhiều điều kiện khi chọn “Match all of the followwing” hoặc “Match any of the following”, thoát khỏi của sổ.

Thoát: nhấn nút “Exit”.

Page 22: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 17

Ghi chú: người dùng có thể xem mail vừa tìm, trả lời thư đó, chuyển tiếp, xóa mail vừa xem, trên View.

Xem thư vừa tìm: nhấn vào mail. Trả lời thư tìm được: nhấn nút “Reply”. Chuyển tiếp: nhấn nút “Forward”. Xóa: nhấn nút “Delete”.

2.2.8 Màn hình đính kèm File(Attach).

Ghi chú: ở của số chính(Main) khi mail nào có file đính kèm sẽ hiển thị ra như hình.

Page 23: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 18

Người dùng có thể xem file đính kèm bằng cách click vào dòng “1 Attachment(s)” như trên hình. Sau đây là cửa sổ đính kèm(Attach):

Ghi chú: người dùng có thể biết được có bao nhiêu file đính kèm theo mail, xem file đính kèm, xóa file.

Xem số file: mục “Status”. Xem file: click vào tên file. Xóa file: chọn 1 hay nhiều file, nhấn nút “Delete”.

Page 24: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 19

2.2.8 Màn hình soạn thư(Write)

Ghi chú: người dùng sẽ thực hiện việc soạn mail, trả lời mail, chuyển tiếp mail trực tiếp trên cửa sổ Write. Cửa sổ này cung cấp cho người dùng các chức năng và thao tác như: soạn thư chỉ có text, thư có đính kèm file bất kỳ(trừ file *.exe), chèn hình ảnh vào thư, chèn link của một website,…

Khi thực hiện thao tác soạn thư mới người dùng thực hiện các thao tác sau: From: Địa chỉ email người dùng hiện tại To: Địa chỉ email của người nhận thư Cc: Danh sách địa chỉ email những người cùng được gửi(người nhận

biết là cùng nhận chung 1 email) Bcc: Danh sách địa chỉ email những người cùng được gửi(người nhận

chỉ biết họ nhận được email) Subject: Tiêu đề thư Phần soạn thảo nội dung thư Nhấn nút “Attach”: đính kèm file vào thư Nhấn nút “AttachFile(Web page…)”: đính kèm file( trang web) Nhấn nút “Remove Attach”: bỏ file đính kèm được chọn Nhấn nút “Save”: lưu thư vào thư nháp(Draft)

Page 25: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 20

Nhấn nút : chọn địa chỉ gửi mail có trong danh sách liên hệ

Nhấn nút “Send”: thực hiện việc gửi thư đi.

III. CẤU TRÚC CHƯƠNG TRÌNH. 1. Sơ đồ các module chính

Các file của chương trình như các hình dưới đây:

Main

Search Address Book New Account Write Setting About

Attach

New Contact

Page 26: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 21

2. Sơ đồ các lớp Ứng dụng Mail Client 1.0 của nhóm chúng em xây dựng dựa trên mô hình 3 lớp: MVC(Model - View - Controller). Gồm có các thư mục sau:

PresentationLayer: thư mục chứa các Form(Main, New Account, Contacts, newContact, SendMail, Search, Setting, Attach và About) thuộc lớp View trong mô hình MVC.

Data Access Layer: chứa các class thực hiện thao tác trực tiếp với Database: ConnectionDAO.cs, MailDAO.cs, ContactDAO.cs, , AccountDAO.cs, _AttachmentDAO.cs, AttachDatabase.cs.

Page 27: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 22

Business Layer: chứa các class thao truyền dữ liệu từ Presentation Layer

xuống Data Access Layer, và lấy dữ liệu từ Database do Data Access Layer trả về lên cho Presentation Layer: MailBLL.cs, ContactBLL.cs, AccountBLL.cs, _AttachmentBLL.cs.

Entities: chứa các class mô tả các đối tượng của ứng dụng và các class khác: Mail.cs, Contact.cs, CheckInternetConnect.cs, Account.cs, _Attachment.cs, HtmlToText.cs, Function.cs.

Page 28: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 23

3. Giao diện chương trình

3.1 Form Main.

Gồm có:

1: MenuStrip 4.1& 4.2: Hai ToolStrip:

Bên dưới:

Bên dưới: 2: TreeView hiển thị các tài khoản và các hộp thư 3: ListView thể hiện danh sách thư 5: WebBrowser xem nội dung thư 6: StatusStrip cho biết trạng thái, số thư, Sáu Label để hiển thị thông tin về người gửi,người nhận, tiêu đề mail,

trạng thái kết nối với server, 2 LinkLabel, 1 PictureBox. Tất cả các control này nằm trong 2 splitContainer.

Page 29: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 24

3.2 Form NewAccount. Gồm: 2 GroupBox : groupBox thứ nhất chứa 3 TextBox cho phép nhập tên, địa chỉ email, password, và một checkBox cho phép người dùng xem password. groupBox thứ hai chứa các thông tin về Server mail. Một StatusStrip và 2 button (OK, Cancel).

3.3 Form SendMail.

Form SendMail gồm có:

Một thanh MenuBar.

Page 30: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 25

Một thanh ToolStrip.

Một thanh “Định dạng”.

Nội dung của Email.

GroupBox chứa 5 TextBox dùng nhập các thông tin From, To, Cc,

Bcc, Subject. Và 1 listBox chứa danh sách file đính kèm.

3.4 Form Contacts.

Page 31: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 26

Form Contacts gồm có:

Một MenuStrip: Một TreeView:

Một ListView hiển thị danh sách các liên:

Ba groupBox hiển thị các thông tin: Company, Home, Work

3.5 Form newContact.

Page 32: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 27

Hai Button:OK(xác nhận thông tin nhập vào và thêm 1 địa chỉ liên lạc cùng thông tin),Cancel(Thoát Form).

Hai TabControl:Contact,Home-Work. Một Combobox hiển thị Personal Address Book(Danh bạ người

dùng do người dùng thêm vào) và Collection Address(Sau mỗi lần gửi mail thì sẽ tự thêm địa chỉ vào).

Các label hiển thị phần thông tin yêu cầu và các TextBox để nhập

thông tin.

3.6 Form Search.

Form Search gồm có:

Một thanh Tooltrip cùng các button:Rely,Forward,Delle,Exit Hai TabControl:Search(Tìm kiếm thư) và View(Khi tìm được thư ở

Search và nhấn vào thì View sẽ hiện nội dung của thư tìm được) Các Combobox hiển thị thông tin tìm kiếm:có thể tìm kiếm theo Body

hoặc Subject… Một listView hiển thị thư vừa tìm được.

Page 33: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 28

3.7 Form Setting.

Form Setting gồm có: Toolstrip với các button: Add Account,remove,exit. Các label, textbox hiển thị yêu cầu và nhập thông tin về tài khoản, cổng kết nối, server kết nối… Một combobox để lựa chọn các tài khoản đã add vào để cấu hình cho nó. Một NumericUpDown để cấu hình thời gian check mail của chương trình. Hai button: OK( xác nhận cấu hình vừa cài đặt), Cancel(thoát form).

Page 34: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 29

3.8 Form Attach.

Form Attach gồm có:

Hai label hiển thị Status, và số lượng file đính kèm. Một listView chứa danh sách các file đính kèm. Hai button: “Delete” xóa file đính kèm, “Cancel” thoát cửa sổ.

3.9 Form About.

Form About gồm:

Các label chứa các thông tin: tên ứng dụng, phiên bản, người phát triển, liện hệ và hỗ trợ kỹ thuật.

Một PictureBox: chứa ảnhbiểu tượng của email.

Page 35: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 30

4. Thuật toán mã hóa AES. Ứng dụng của nhóm có sử dụng thuật toán mã hóa AES( Advanced Encryption Standard hay Tiêu chuẩn mã hóa tiên tiến). AES là một thuật toán mã hóa khối được chính phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa. Giống như tiêu chuẩn tiền nhiệm DES, AES được kỳ vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ lưỡng. AES được chấp thuận làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và công nghệ quốc gia Hoa kỳ (NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm.

Các hàm của thuật toán:

Hàm mã hóa một mảng kiểu byte thành một mảng kiểu byte sử dụng Key và IV.

private byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV) { // Create a MemoryStream that is going to accept the encrypted bytes MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(clearData, 0, clearData.Length); cs.Close(); byte[] encryptedData = ms.ToArray(); return encryptedData; }

Page 36: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 31

Hàm trả về một chuỗi mã hóa sử dụng Rijndael (128,192,256 Bit). public string Encrypt(string Data, string Password, int Bits) { byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(Data); PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x00, 0x01, 0x02, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4 }); if (Bits == 128) { byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(16), pdb.GetBytes(16)); return Convert.ToBase64String(encryptedData); } else if (Bits == 192) { byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(24), pdb.GetBytes(16)); return Convert.ToBase64String(encryptedData); } else if (Bits == 256) { byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16)); return Convert.ToBase64String(encryptedData); } else { return string.Concat(Bits); } }

Hàm giải mã một mảng kiểu byte thành một mảng kiểu byte sử dụng

Key và IV private byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV) { MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(cipherData, 0, cipherData.Length); cs.Close(); byte[] decryptedData = ms.ToArray(); return decryptedData; }

Page 37: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 32

Hàm giải mã một chuỗi thành chuỗi password

public string Decrypt(string Data, string Password, int Bits) { //string Password = aeskey192; byte[] cipherBytes = Convert.FromBase64String(Data); PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x00, 0x01, 0x02, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4 }); if (Bits == 128) { byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(16), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else if (Bits == 192) { byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(24), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else if (Bits == 256) { byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else { return string.Concat(Bits); } }

Page 38: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 33

5. Thiết kế cơ sở dữ liệu

Ứng dụng sử hệ quản trị cơ sở dữ liệu Microsoft SQL Server Express 2008. Cấu trúc gồm có 4 bảng:

Bảng MAIL Khóa chính của bảng này là _idMail, các thành phần và kiểu dữ liệu thể hiện qua các ảnh sau:

Bảng User_Account:

Khóa chính của bảng là _idUser, các thành phần và kiểu dữ liệu như các hình sau:

Page 39: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 34

Bảng Attach

Khóa chính của bảng là _idAttach, các thành phần và kiểu dữ liệu như sau:

Bảng Contact

Khóa chính của bảng là _idContacts, các thành phần và kiểu dữ liệu như hình sau:

Quan hệ giữa các bảng trong Database:

Page 40: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 35

IV. SOURCE CODE CÁC MODULE CHÍNH.

1. Nhận mail

Ứng dụng của nhóm chúng em sử dụng thư viện Mail.dll của Limilabs để hỗ trợ

cho việc lấy mail về client, lấy các thành phần của mail như file đính kèm, header mail,.. Để sử dụng thư viện Mail.dll trước tiên phải vào trang chủ: http://www.limilabs.com/mail để tải về bộ cài đặt hoặc file Mail.Zip để sử dụng.

Lưu ý là bộ thư viện này phải mua, và nhóm đã kiếm ra được một License miễn phí nên có thể sử dụng bộ thư viện này.

Khai báo để sử dụng thư viện Mail.dll, đầu tiên file Mail.dll vào project tiến hành khai báo như sau:

using Limilabs.Client.POP3;//sử dụng để get mail với Pop3 using Limilabs.Mail.Headers; using Limilabs.Mail; using Limilabs.Mail.MIME; using Limilabs.Client.SMTP;

1.1 Đăng nhập và đăng nhập vào Mail Server tiến hành tải mail mới về client. using (Pop3 pop3 = new Pop3()) { try { // kết nối với máy chủ pop.google.com của google với tên server được lấy từ csdl pop3.ConnectSSL(account.Type_connect); //đăng nhập vào tài khoản google với username và password lấy từ csdl pop3.Login(account.User_account, account.Pass_account.Trim()); //tạo một MailBulder MailBuilder builder = new MailBuilder(); foreach (string uid in pop3.GetAll()) { //Khai báo môt biến Imail IMail email = builder.CreateFromEml(pop3.GetMessageByUID(uid)); //Thực hiện các thao tác lưu xuồng csdl } //lấy attachments về client foreach (MimeData mime in email.Attachments) { mime.Save(filePath + mime.SafeFileName); // Thực hiện việc lưu xuống database } } catch() {} pop3.Close();//đóng kết nối }

Page 41: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 36

1.2 Source code toolstripProcessBar chạy khi lấy mail về. Khai báo và cài đặt các thuộc tính cho 2 backgroundWorker và backgroundWorker1.

BackgroundWorker backgroundWorker = new BackgroundWorker(); BackgroundWorker backgroundWorker1 = new BackgroundWorker(); //cài đặt // hỗ trợ báo cáo tiến độ backgroundWorker.WorkerReportsProgress = true; // cho phép dừng tiến trình backgroundWorker.WorkerSupportsCancellation = true; backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted); //BackgroundWorker1 backgroundWorker1.WorkerReportsProgress = true; backgroundWorker1.WorkerSupportsCancellation = true; backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);

Tiến hành chạy processbar //Event click vào các tài khoản trên toolstrip lấy thư để get mail về theo từng tài khoản private void processtsMenuItem(object sender, EventArgs e) { backgroundWorker.RunWorkerAsync(); } // Các sự kiện của backgroundWorker private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { for (int j = 0; j < soluong; j++) { //gọi hàm đăng nhập và lấy mail về getMailBackground(User[j]); } } private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.toolStripProgressBar1.Value = e.ProgressPercentage; Application.DoEvents(); toolStripProgressBar1.Enabled = false; } private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.tsslblTrangthai.Text = ""; GetListView(_id, "td"); dkauto = true; timerGetMail.Enabled = true;

Page 42: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 37

tsMenuItemDeleteAccount.Enabled = true; } //BackgroundWorker1 private void processtsMenuItem1(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { getMailBackground(idUser); }

Hàm getMailBackground()

//Hàm Cho Backgroundworker private void getMailBackground(int ID) { account = accbll.GetAccountID(ID); //Decode password account.Pass_account = fun.Decrypt(account.Pass_account, account.User_account, 128); this.Invoke((MethodInvoker)delegate { tsslblTrangthai.Text = "Connecting " + account.Type_connect + ", and login with " + account.User_account + "."; }); using (Pop3 pop3 = new Pop3()) { try { pop3.ConnectSSL(account.Type_connect); pop3.Login(account.User_account, account.Pass_account.Trim()); MailBuilder builder = new MailBuilder(); int i = 0; int flag = 0; this.Invoke((MethodInvoker)delegate { if (pop3.GetAll().Count == 0) tsslblTrangthai.Text = "There are no new message for " + account.User_account + "."; else { this.toolStripProgressBar1.Maximum = pop3.GetAll().Count(); tsslblTrangthai.Text = "Downloading..."; } }); string filePath = Application.StartupPath + @"\Attach\"; foreach (string uid in pop3.GetAll()) { i++;

Page 43: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 38

IMail email = builder.CreateFromEml(pop3.GetMessageByUID(uid)); flag = email.Attachments.Count; Mail mail = new Mail(ID, email.Subject, email.From.ToString(), email.To.ToString(), email.Cc.ToString(), email.Bcc.ToString(), email.GetBodyAsHtml(), "td", email.Date.ToString(), 1, flag); // Lưu tất cả các Mail xuống database mailbll.insertMail(mail); if (flag != 0) { foreach (MimeData mime in email.Attachments) { mime.Save(filePath + mime.SafeFileName); attach.FileName = mime.SafeFileName; attach.LinkFile = filePath + mime.SafeFileName; attach.IdMail = mailbll.getMaxIdMail(); FileInfo fi = new FileInfo(attach.LinkFile); attach.Size = (int)fi.Length; //Lưu tên file và size xuống dtb attachbll.insertAttach(attach); } } this.Invoke((MethodInvoker)delegate { this.toolStripProgressBar1.Value = i; }); } //Gọi NotifyCation khi có new mail Notifi(i, account.User_account); pop3.Close();//đóng kết nối } catch (Exception ex) { MessageBox.Show(ex.Message, "Error!"); } this.Invoke((MethodInvoker)delegate { this.toolStripProgressBar1.Value = 0; this.tsslblTrangthai.Text = ""; }); } }

2. Tự động thông báo có thư mới.

2.1 Sử dụng timer để tự động lấy thư mới về .

Sử dụng một timer có các thông số như sau(timerGetMail) : timerGetMail.Interval = 20000 ;// tương đương với 20 giây timerGetMail.Enable = false ; Khi form Main_Load chạy thì timerGetMail.Enable = true ;

Page 44: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 39

Timer này muốn chạy được phải bắt sự kiện timerGetMail_Tick Các hàm trong timerGetMail_TickI chạy được khi biến điều kiện ‘dkauto = true ;’ Code timerGetMail_Tick :

private void timerGetMail_Tick(object sender, EventArgs e) { //tăng biến thời gian lên 0.5 sau 20s time += (float)0.5; //nếu tgian >5phut thì timer chạy if (time > (float)timecheckmail * 1.5) { if (dkauto) { dkauto = false; //Cho chạy processbar get Mail processtsMenuItem(this, e); //Vô hiệu hóa timer timerGetMail.Enabled = false; } time = 0;//sau khi chạy xong set lai cho time = 0 } }

2.2 Tự động thông báo khi có thư mới Sau khi chạy timerGetMail nếu có mail mới thì sẽ thông báo bằng hàm Notifi(int count, string user): Code Notifi():

//Notify thông báo có thư mới private void Notifi(int count, string user) { if (count > 0) { //gọi hàm mở file nhac *.wav trong Class Function fun.PlayMusic("Coca.wav"); if (count == 1) notifyNewMail.BalloonTipText = user + " received " + count.ToString() + " new message"; else notifyNewMail.BalloonTipText = user + " received " + count.ToString() + " new messages"; notifyNewMail.BalloonTipTitle = "New message."; notifyNewMail.ShowBalloonTip(3000); } }

3.Chức năng xem mail nhanh. Dùng control ToolTip của Windows Form để thực hiện chức năng này. Và bắt Event ListViewItem_MoveHover. ToolTip tool = new ToolTip(); //cho luôn xem

Page 45: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 40

tool.ShowAlways = true; tool.UseAnimation = true; //có dấu mũi nhọn khi chỉ vào Item tool.IsBalloon = true; tool.StripAmpersands = true; tool.InitialDelay = 0; tool.ReshowDelay = 5; tool.OwnerDraw = true; if (htmltoText.Convert(mail.Message).Length > 200) { temp = htmltoText.Convert(mail.Message).Substring(0, 200) + "....."; } else temp = htmltoText.Convert(mail.Message);//Sử dụng class HtmlToText.cs để chuyển //class HtmlToText.cs dùng lại của Jonathan Wood trên trang // http://www.blackbeltcoder.com/Legal/Licenses/CPOL. //show nội dung và ngày gửi mail đi của mail đó tool.SetToolTip(lstvDsThu, "Received: " + mail.Date + "\n" + "Message: \n\n" + temp);

4. Soạn và gửi mail.

4.1 Thư viện sử dụng và cách khai báo: Trong file SendMail.cs

Sử dụng 2 thư viện EaSendMail và mshtml vừa add vào reference. EASendMail hỗ trợ cho việc gửi email với các thao tác xử lí đơn giản. MSHTML được gọi là Trident hỗ trợ chỉnh sữa và truy cập web bất cứ ở môi trường nào nên body thư ta sử dụng Webrowser để thuận tiện cho việc định dạng. Bằng việc sử dụng thư viện mshtm.dll các sự kiện từ bộ điều khiển trình duyệt web cũng có thể được sử dụng.

Page 46: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 41

Bên cạnh đó cần sử dụng 2 class “MailAddress” và “MailPriority” của của thư viện system.Net.Mail để hỗ trợ cho việc tạo các địa chỉ trong gửi mail và gửi mail với độ ưu tiên cao.

4.2 Hàm gửi mail và các thao tác định dạng. Vì Form SendMail tập trung vào quá trình tạo một Email và các thao tác trên email nên nhóm tập trung vào các đoạn code liên quan tới email cũng như các thao tác định dạng đi kèm theo. Đầu tiên chúng ta sẽ đi vào tìm hiểu hoạt động của hàm chịu trách nhiệm tạo một email cùng việc áp dụng các định dạng cũng như đính kèm hay nhúng hình ảnh vào Email. //Ham gui mail private void sendMail() { //khởi tạo một email sử dụng key bản quyền. var myMail = new SmtpMail("ES-AA1141023508-00919-5AAEC214295D654645E2B1C542DBB8E2"); //Tạo đối tượng kết nối smtp var mySmtp = new EASendMail.SmtpClient(); try { myMail.From = new EASendMail.MailAddress(txtFrom.Text.Trim()); //Địa chỉ gửi đến,có thể cùng lúc gửi nhiều địa chỉ if (txtTo.Text.Trim() != string.Empty) { string[] toAddress = txtTo.Text.Trim().Split(';'); for (int i = 0; i < toAddress.Length; i++) { myMail.To.Add(new EASendMail.MailAddress(toAddress[i].ToString())); } } //Tạo địa chỉ cc để gửi mail if (txtCc.Text.Trim() != string.Empty) { string[] ccMail = txtCc.Text.Trim().Split(';'); for (int i = 0; i < ccMail.Length; i++) { myMail.Cc.Add(new EASendMail.MailAddress(ccMail[i].ToString())); } } //Tạo địa chỉ bcc để gửi mail if (txtBcc.Text.Trim() != string.Empty) {

Page 47: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 42

string[] bccMail = txtBcc.Text.Trim().Split(';'); for (int i = 0; i < bccMail.Length; i++) { myMail.Bcc.Add(new EASendMail.MailAddress(bccMail[i].ToString())); } } //Tiêu đề của 1 email myMail.Subject = txtSubject.Text; //Trả lời mail của 1 người khác myMail.ReplyTo = new EASendMail.MailAddress(txtTo.Text.Trim()); // dùng charset để có thể gửi mail bằng tiếng việt myMail.Charset = _vietnamese[0, 1] = "utf-8"; //để lấy địa chỉ tương đối của đường dẫn ta dùng "Application.ExecutablePath;" string basepath = Application.ExecutablePath; int pos = basepath.LastIndexOfAny("/\\".ToCharArray()); if (pos != -1) basepath = basepath.Substring(0, pos); // nội dung của mail được chuyển về kiểu html để gửi file có định dạng string myBody = _mhtmldoc.body.innerHTML; //phần đầu mail được định dạng theo kiểu html có thêm phần charset để chuyển về kiểu tiếng việt unicode(utf-8) string htmlheader = String.Format("<html><title>{0}</title><meta HTTP-EQUIV=\"Content-Type\" Content=\"text-html;charset={1}\"><META content=\"MSHTML 6.00.2900.2769\" name=GENERATOR><body>", myMail.Subject, myMail.Charset); myBody = myBody.Insert(0, htmlheader); myBody = temp + myBody + "</body></html>"; //Gửi mail có kèm ảnh; chuyển về kiểu html để gửi mail myMail.ImportHtml(myBody, Application.ExecutablePath, ImportHtmlBodyOptions.ImportLocalPictures); //gửi mail với chất lượng được ưu tiên myMail.Priority = (EASendMail.MailPriority)MailPriority.High; //Thêm files đính kèm vào email int flag = 0;//co cho biet co file dinh kem hay ko? string sFile; // lstfiles.Items.AddRange(dlgopenFile.FileNames); flag = lstfiles.Items.Count; //lưu xuống DataBase Mail mail1 = new Mail(account.Id_user, txtSubject.Text, account.User_account, txtTo.Text, "", "", temp + webHtml.DocumentText, "tg", DateTime.Now.ToString(), 0, flag);

Page 48: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 43

mailbll.insertMail(mail1); flag = lstfiles.Items.Count; if (lstfiles.Items.Count > 0) { for (int i = 0; i < lstfiles.Items.Count; i++) { lstfiles.SelectedIndex = i; sFile = lstfiles.Text; FileInfo fi = new FileInfo(sFile); if (sFile != string.Empty) { myMail.AddAttachment(sFile); attach.FileName = nameFile[i]; attach.LinkFile = sFile; MessageBox.Show(attach.FileName); attach.IdMail = mailbll.getMaxIdMail(); attach.Size = (int)fi.Length; //Lưu tên file và size xuống dtb attbll.insertAttach(attach); } } } mySmtp.OnSendingDataStream += new EASendMail.SmtpClient.OnSendingDataStreamEventHandler(OnSendingDataStream); //Tạo server smtp dùng để gửi mail sử dụng gmail với port 25 var myServer = new SmtpServer("smtp.gmail.com", 25) { User = account.User_account, Password = account.Pass_account, ConnectType = SmtpConnectType.ConnectSSLAuto }; //Gửi đi email vừa tạo kèm theo sever kết sử dụng gửi mail mySmtp.SendMail(myServer, myMail); //Lưu biến cho biết đã gửi thư send = true; MessageBox.Show("Sent!", "Message" + this.txtSubject.Text + " sent"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error); } }

Page 49: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 44

EaSendMail là một thư viện hỗ trợ cho gửi mail có đi kèm html.Nhưng nó không hoàn toàn miễn phí cho bất kì ai sử dụng.Khi sử dụng thư viện này,nó đòi hỏi phải có chuỗi key bản quyền của thư viện hoặc chuỗi cho phép dung thử do nhà cung cấp tạo ra và chúng ta phải tuân theo.Vì vậy khi lập trình với thư viện EASendMail khi chúng ta khởi tạo một SmtpMail thì cần kèm theo chuỗi key như dòng code dưới đây. var myMail = new SmtpMail("ES-AA1141023508-00919-5AAEC214295D654645E2B1C542DBB8E2"); Gửi mail với giao thức SMTP hoàn toàn rất đơn giản.Nó giống với một hành động mà chúng ta vẫn hay bắt gặp thường ngày.Đó là khi chúng ta viết và gửi một lá thư bằng tay và gửi nó qua bưu điện cho một ai đó. Đầu tiên thì chúng ta có một phong bì thư và sẽ phải viết vào đó địa chỉ người gửi, địa chỉ người nhận myMail.From = new EASendMail.MailAddress(txtFrom.Text.Trim()); //Địa chỉ gửi đến if (txtTo.Text.Trim() != string.Empty) { string[] toAddress = txtTo.Text.Trim().Split(';'); for (int i = 0; i < toAddress.Length; i++) { myMail.To.Add(new EASendMail.MailAddress(toAddress[i].ToString())); } } Thực tế khi gửi thư viết tay thì mỗi lá thư chúng ta chỉ gửi được cho một người.Nếu muốn gửi nhiều người thì phải viết nhiều là thư.Còn trong email chúng ta chỉ việc tạo 1 lá thư và cùng lúc có thể gửi tới nhiều chịa chí như trong đoạn code trên.Chúng ta sẽ nhập vào một dãy nhiều địa chỉ ngăn cách nhau bởi dấu “;” và hàm Split sẽ cắt dãy địa chỉ đó thành từng địa chỉ riêng biệt.Sau đó vòng for sẽ add từng địa chỉ đó vào email. Tương tự với địa chỉ CC và BCC được add vào cũng như vậy. if (txtCc.Text.Trim() != string.Empty) { string[] ccMail = txtCc.Text.Trim().Split(';'); for (int i = 0; i < ccMail.Length; i++) { myMail.Cc.Add(new EASendMail.MailAddress(ccMail[i].ToString())); } } //Tạo địa chỉ bcc để gửi mail if (txtBcc.Text.Trim() != string.Empty) { string[] bccMail = txtBcc.Text.Trim().Split(';'); for (int i = 0; i < bccMail.Length; i++) {

Page 50: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 45

myMail.Bcc.Add(new EASendMail.MailAddress(bccMail[i].ToString())); } } Tiếp theo là tiêu đề của một lá thư sẽ lấy từ textbox myMail.Subject = txtSubject.Text; Phần nội dung lá thư cùng với định dạng html // dùng charset để có thể gửi mail bằng tiếng việt myMail.Charset = _vietnamese[0, 1] = "utf-8"; //để lấy địa chỉ tương đối của đường dẫn ta dùng "Application.ExecutablePath;" string basepath = Application.ExecutablePath; int pos = basepath.LastIndexOfAny("/\\".ToCharArray()); if (pos != -1) basepath = basepath.Substring(0, pos); // nội dung của mail được chuyển về kiểu html để gửi file có định dạng string myBody = _mhtmldoc.body.innerHTML; //phần đầu mail được định dạng theo kiểu html có thêm phần charset để chuyển về kiểu tiếng việt unicode(utf-8) string htmlheader = String.Format("<html><title>{0}</title><meta HTTP-EQUIV=\"Content-Type\" Content=\"text-html;charset={1}\"><META content=\"MSHTML 6.00.2900.2769\" name=GENERATOR><body>", myMail.Subject, myMail.Charset); myBody = myBody.Insert(0, htmlheader); myBody = temp + myBody + "</body></html>"; //Gửi mail có kèm ảnh; chuyển về kiểu html để gửi mail myMail.ImportHtml(myBody, Application.ExecutablePath, ImportHtmlBodyOptions.ImportLocalPictures); Add file đính kèm vào một Email : int flag = 0;//co cho biet co file dinh kem hay ko? string sFile; // lstfiles.Items.AddRange(dlgopenFile.FileNames); flag = lstfiles.Items.Count; //lưu xuống DataBase Mail mail1 = new Mail(account.Id_user, txtSubject.Text, account.User_account, txtTo.Text, "", "", temp + webHtml.DocumentText, "tg", DateTime.Now.ToString(), 0, flag); mailbll.insertMail(mail1); flag = lstfiles.Items.Count; if (lstfiles.Items.Count > 0) { for (int i = 0; i < lstfiles.Items.Count; i++)

Page 51: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 46

{ lstfiles.SelectedIndex = i; sFile = lstfiles.Text; FileInfo fi = new FileInfo(sFile); if (sFile != string.Empty) { myMail.AddAttachment(sFile); attach.FileName = nameFile[i]; attach.LinkFile = sFile; MessageBox.Show(attach.FileName); attach.IdMail = mailbll.getMaxIdMail(); attach.Size = (int)fi.Length; //Lưu tên file và size xuống dtb attbll.insertAttach(attach); } } } File đính kèm là những file chúng ta đã sữ dụng opendialog để chọn và bỏ vào lisbox.Đoạn code trên sẽ đếm số lượng file đã bỏ vào listbox,nếu số Item đếm được bằng 0 tức là không có file đính kèm nào được lưu địa chỉ vào listbox thì chương trình sẽ không add file nào vào Email hết, còn nếu Item trong listbox đếm được >0 thì có file đính kèm chương trình sẽ nhận ra và sẽ lấy từng file trong listbox ra và add từng file vào thân của email thông qua class Attachment và gửi đi cùng với Email. Cuối cùng là việc tạo đối tượng,sever,cổng kết nối và gửi Email đi: //Tạo đối tượng kết nối smtp var mySmtp = new EASendMail.SmtpClient(); /Tạo server smtp dùng để gửi mail sử dụng gmail với port 25 var myServer = new SmtpServer("smtp.gmail.com", 25) { User = account.User_account, Password = account.Pass_account, ConnectType = SmtpConnectType.ConnectSSLAuto }; //Gửi đi email vừa tạo mySmtp.SendMail(myServer, myMail); Ở đây sử dung server của gmail để gửi thư với cổng kết nối là port 25 và dùng socket mã hóa kết nối để đảm bảo tính bảo mật và an toàn cho Email ,Sever cần xác nhận người gửi tin thông qua đặc trưng riêng biệt là tài khoản và mật khẩu để biết chắc rằng chính tài khoản đó gửi email đi. Về thao tác định dạng trong form SendMail sử dụng thư viện MSHTML.dll Để sử dụng được thư viện MSHTML.dll vào định dạng ta cần thêm vào dòng lệnh dưới đây vào. private mshtml.IHTMLDocument2 _mhtmldoc = null;

Page 52: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 47

Hàm trên tạo một đối tượng thuộc lớp IHTMLDocument2 chịu trách nhiệm về các thao tác định dạng.Nó chứa đựng thông tin về các tài liệu cho phép sửa đổi các yếu tố liên quan đến HTML trong văn bản.Đối tượng dịnh dạng ban đầu được gán là rỗng vì nó chưa chứa đựng một thao tác nào. Sau đây là hàm sử dụng đối tượng _mhtml thuộc lớp IHTML để gọi hàm chịu trách nhiệm trong định dạng văn bản. Ví dụ hàm định dạng căn lề trái căn lề phải và giữa. _mhtmldoc.execCommand("JustifyLeft", false, null); webHtml.Focus(); _mhtmldoc.execCommand("JustifyRight", false, null); webHtml.Focus(); _mhtmldoc.execCommand("JustifyCenter", false, null); webHtml.Focus(); Ở đây chúng ta nhận thấy việc định dạng cho văn bản với với Class IHTMLDocument2 thật sự rất ngắn gọn.Đối tượng _mshtml gọi tới hàm execCommand() sẽ chứa đựng chuỗi đối tượng cần định dạng thành.Qua 3 hàm trên chúng ta thấy từng thao tác định dạng gần như giống nhau chỉ khác nhau về chuỗi đối tượng định dạng.Căn lề trái thì sử dụng chuỗi "JustifyLeft" còn căn lề phải sử dụng "JustifyRight" và giữa "JustifyCenter".Các chuỗi này đã dược định nghĩa sẵn trong thư viện MSHTML.dll khi chúng ta gọi một chuỗi đối tượng khác có trong thư viện thì thao tác định dạng sẽ thay đỗi.Tương tự các thao tác định dạng khác trong form SendMail như:chữ in đậm, in nghiêng, gạch chân,màu chữ ,màu nền,sao chép,cắt,dán… cũng sử dụng hàm trên chỉ thay đổi chuỗi đối tượng định dạng và thêm một số thao tác cơ bản.Sau khi đã gọi thao tác định dạng thì Webrowser sẽ gọi hàm Focus() để áp dụng định dạng vào và hiển thị lên.Vì ở đây sử dụng Webrowser trong form,chúng ta cũng có thể sử dụng với cái khác.

Page 53: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 48

5. Danh sách và chức năng chính của các Class.

Folder Entities Class Mail.cs

Class có chức năng chính là khai báo và định nghĩa đối tương Mail.

Class Account.cs Class có chức năng chính là khai báo và định nghĩa đối

tương Account. Class Contact.cs

Class có chức năng chính là khai báo và định nghĩa đối tương Contact.

Class _Attachment.cs Class có chức năng chính là khai báo và định nghĩa đối tương Attach.

Class Function.cs Class chứa các hàm xử lý cắt chuỗi, mã hóa password, trả về tên hộp thư.

Class CheckInternetConnect.cs Class này có chức năng chủ yếu là kiểm tra xem máy tính của người dùng có kết với Internet hay không? Nếu có thì chạy ứng dụng ở chế độ online, ngược lại thì chạy ở chế độ offline. Với chế độ offline, người dùng chỉ có thể xem mail đã lấy về. soạn thư và lưu vào thư nháp.

HtmlToText.cs Class có chức năng chuyển một chuỗi mã Html sang dạng

string bình thường. Class này được sử dụng để chuyển phần Body mail lấy từ database lên thể hiện trên nội dung của ToolTip của chứa năng xem nhanh thư.

Folder Data Access Layer Class MailDAO.cs

Chứa các hàm thao tác với database: như lấy thư, thêm, xóa, sửa mail.

Class AccountDAO.cs Chứa các hàm thao tác với database: như lấy thư, thêm, xóa, sửa Account.

Class ContactDAO.cs Chứa các hàm thao tác với database: như lấy thư, thêm, xóa, sửa Contact.

Class _AttachmentDAO.cs Chứa các hàm thao tác với database: như lấy thư, thêm, xóa, sửa Attach.

Page 54: Báo cáo Ứng dụng mail client

Báo cáo đồ án Lập Trình Windows—WINP1.D27 – ThS.Phạm Thi Vương. 49

Class AttachDatabase.cs Có nhiệm vụ chinh là kiểm tra xem database đã có trong SqlServer chưa, nếu chưa thì attach database trong thư mục Debug vào, nếu có rùi thì chạy bình thường.

Class ConnectionDAO.cs Chứa các hàm có dùng để kết nối, đóng kết nối với database và lấy dữ liệu trả về DataTable.

Folder Business Layer Class MailBLL.cs

Chứa các hàm gọi lại các hàm trong Class MailDAO.cs, để đưa và lấy dữ liệu từ database lên và ngược lại.

Class AccountBLL.cs Chứa các hàm gọi lại các hàm trong Class AccountDAO.cs, để đưa và lấy dữ liệu từ database lên và ngược lại.

Class ContactBLL.cs Chứa các hàm gọi lại các hàm trong Class ContactDAO.cs, để đưa và lấy dữ liệu từ database lên và ngược lại.

_AttachmentBLL.cs Chứa các hàm gọi lại các hàm trong Class _AttachmentDAO.cs, để đưa và lấy dữ liệu từ database lên và ngược lại.

V. TÀI LIỆU THAM KHẢO

Nguồn: Internet [1] http://diendan.congdongcviet.com [2] http://www.codeproject.com [3] http://msdn.microsoft.com [4] http://www.blackbeltcoder.com/Articles/strings/convert-html-to-text [5] http://tunghuynh.com/atbmtt/soft/?id=13 …… Tiếng Việt: [1]. Các giải pháp lập trình C# - Nguyễn Ngọc Bình Phương, Thái Thanh Phong, Nxb Giao thông vận tải. Tiếng Anh: [1]. Microsoft Visual C# 2010 Step by Step – Microsoft.