Muốn trao đổi thư điện tử giữa các máy khách trước tiên trên các máy khách chúng ta phải có các chương trình đọc và viết thư. Thông thường với các dịch vụ webmail người ta thường sử dụng yahoomail hay gmail hoặc hotmail để nhận và gửi thư. Các dịch vụ mail trên desktop phải kể đến Microsoft outlook 2000 hoặc các phiên bản mới hơn. Các thư điện tử được soạn thảo có cấu trúc chuẩn gọi là MIME, tiếp đó nhờ giao thức truyền thư đơn giản SMTP được chuyển và lưu trên hộp thư, tại đây nhờ vào giao thức POP3 hoặc IMAP thư điện tử sẽ được truyền đến đúng địa chỉ cần gửi, cuối cùng phải có một chương trình để đọc thư (chẳng hạn IE của window hay naescape hoặc mozilla …) trên máy khách. Như vậy quá trình gửi và nhận một thư điện tử được mô tả như sau:
Trên Internet các máy khách (Client) muốn gửi và nhận thư ngoài việc sử dụng các giao thức truyền nhận thư như SMTP với POP3 hay IMAP… còn cần đến các máy chủ (mail server). Nhiệm vụ của các mail server là lưu trữ và nhận yêu cầu kết nối từ máy khách để truyền và phát thư theo đúng địa chỉ đã
yêu cầu. Mô hình yêu cầu – phục vụ thư điện tử được thể hiện rõ trong hình vẽ dưới đây:
Hình 4.5 : Mô hình gửi nhận thư điện tử sử dụng giao thức truyền nhận thư
Đặc điểm của dịch vụ thư điện tử là không tức thời (off-line) - tất cả các yêu cầu gửi đi không đòi hỏi phải được xử lý ngay lập tức. Khi người sử dụng gửi một bức thư, hệ thống sẽ chuyển thư này vào một vùng riêng (gọi là spool) cùng với các thông tin về người gửi, người nhận, địa chỉ máy nhận... Hệ thống sẽ chuyển thư đi bằng một chương trình không đồng bộ. Chương trình gửi thư này sẽ xác định địa chỉ IP máy cần gửi tới, tạo một liên kết với máy đó. Nếu liên kết thành công, chương trình gửi thư sẽ chuyển thư tới vùng spool của máy nhận. Nếu không thể kết nối với máy nhận thì chương trình gửi thư sẽ ghi lại những thư chưa được chuyển và sau đó sẽ thử gửi lại một lần khi nó hoạt động.
4.4.3 Ví dụ về gửi nhận thư điện tử qua Internet bằng Mail Client
1. Người dùng A1 sử dụng mail client của mình để soạn thảo một tin nhắn gửi đến người nhận có địa chỉ email xác định thuộc một miền nào đó (chẳng hạn từ thompt@wru.edu.vn gửi đến người nhận A2
có địa chỉ mail là thom43th.dhtl@gmail.com ) khi hành động gửi
thư diễn ra mail client mà mà A1 sử dụng sẽ sử dụng giao thức truyền thư SMTP để gửi tin nhắn đến máy chủ của thư điện tử của mình (trong trường hợp này là mail.wru.edu.vn được cung cấp từ dịch vụ Internet của A1).
2. Máy chủ sẽ đọc địa chỉ mail của người nhận (thom43th.dhtl@gmail.com) dựa vào phần tên miền nó sẽ tìm hỏi địa chỉ của tên miền này, nơi có máy chủ sẽ nhận gửi thư đến, thông qua hệ thống tên miền
3. Máy chủ DNS (domain name Server) của người nhận A2 sẽ trả lời về một bản tin trao đổi thư từ, đây là bản ghi chỉ ra cách thức làm thế nào để định tuyến cho email này. Trong ví dụ thì pop3.gmail.com là máy chủ từ dịch vụ cung ứng Internet của
thom43th.dhtl@gmail.com
4. Mail.wru.edu.vn sẽ gửi mẫu thông tin tới pop3.gmail.com nhờ giao thức SMTP, điều này sẽ phân phối lá thư của A1 tới hộp thư của A2
5. Khi đọc thư A2 kích hoạt nhận thư trên client của mình điều này tạo ra việc lấy mẫu về thông tin bằng cách áp dụng giao thức POP3.
4.4 Javamail và các các hỗ trợ gửi nhận thư điện tử
4.4.1 Tổng quan về ngôn ngữ java
Giống như hầu hết những ngôn ngữ lập trình hướng đối tượng khác, Java bao gồm: một ngôn ngữ, một môi trường, một giao diện ứng dụng Java và nhiều lớp thư viện. Những lớp riêng này có đặc tính riêng là tái sử dụng lại, đây cũng là điểm mạnh mà Java khác với ngôn ngữ khác. Ngoài những tính năng trên Java còn có khả năng xử lý đa luồng. Ngôn ngữ này thật sự cơ động nên nó rất thích hợp cho các ứng dụng trên mạng và một số ứng dụng desktop khác. Ngoài ra nó còn có các đặc tính cần thiết như: Hỗ trợ chuỗi, đồ hoạ, kiểm soát lỗi, đa phương tiện, làm việc theo mô hình client/server, linh động và hiệu quả… các tính năng trên thực sự là những gì mà các doanh nghiệp và tổ chức hiện nay đang cần, để đáp ứng chính xác các yêu cầu xử lý thông tin của họ.
- Java có một sức mạnh đầy ấn tượng và là chủ đề đang được tranh luận
nhiều nhất hiện nay. Java có những tính năng vượt trội hơn so với các ngôn ngữ khác như sau.
o Là một ngôn ngữ chạy trên môi trường độc lập, mã nguồn mở do
hãng Sun cung cấp.
o Chiếm rất ít dung lượng lưu trữ so với các ngôn ngữ khác.
o Là một ngôn ngữ lập trình đơn giản, hướng đối tượng, an toàn, độc
lập với cấu trúc, dễ di chuyển, hiệu suất cao, đa luồng, và có tính động.
- Java là một môi trường độc lập, đó là một lợi thế quan trọng cho phép
Java hơn hẳn những ngôn ngữ khác, đặc biệt là cho những hệ thống cần làm việc trên nhiều môi trường khác nhau, Java là một môi trường độc lập ở cả trên nền hệ thống lẫn dưới mức thấp như hệ xử lý nhị phân. Nó có khả năng chuyển từ hệ thống máy tính này sang hệ thống máy tính khác không phụ thuộc vào cấu trúc của máy hay hệ điều hành hoạt động trên máy.
- Tuy nhiên Java có nhược điểm là thực thi chương trình chậm (do phải thông dịch lại và chạy trên một máy ảo) khi cài đặt các ứng dụng Java thường rất phức tạp. Vì thế sức cạnh tranh trong các ứng dụng trên máy tính rất thấp.
Nhưng với những ưu điểm tuyệt vời trên nên Java rất mạnh trong các thiết bị điện tử cầm tay và trên máy chủ như các hỗ trợ tương đối với các trình khách từ các thư viện riêng điển hình như Javamail thì việc lựa chọn ngôn ngữ java là rất xác đáng.
Javamail
Javamail cung cấp một API chuẩn và thông dụng để quản lí thư điện tử. Nó cho phép các nhà cung cấp dịch vụ cung cấp các cho người dùng một giao diện chuẩn cho các hệ thống tin nhắn sử dụng ngôn ngữ lập trình java dựa trên các chuẩn hoặc các đặc quyền. Sử dụng API này các ứng dụng có thể truy cập tới các kho chứa tin nhắn và soạn các tin nhắn để gửi đi.
Javamail được xây dựng trên một tập các lớp ảo. Các lớp này tạo nên một mô hình là tập hợp các mảnh của hệ thống thư chuẩn. Những lớp này bao gồm:
- Tin nhắn: Lớp ảo thể hiện một tin nhắn thư điện tử. Javamail thực hiện chuẩn nhắn tin MIME Internet và RFC822. Lớp MIMEMessage mở rộng lớp Message để diễn tả một tin nhắn điện tử kiểu MIME.
- Lưu trữ: lớp ảo này thể hiện một cơ sở dữ liệu các tin nhắn được được
duy trì bởi một máy chủ thư điện tử (Mail server) và được nhóm lại bởi người dùng. Mỗi Store sử dụng một phương thức truy cập riêng có thể là POP3, IMAP hay SMTP.
- Folder: lớp ảo này cung cấp một cách thức để các tin nhắn được tổ chức theo cấu trúc phân cấp. Mỗi Folder(cây thư mục) có thể chứa nhiều tin nhắn hay có thể chứa các Folder khác. Một máy chủ thư điện tử cung cấp cho mỗi người dùngmột Folder (thư mục) mặc định và người dùng có thể tạo thêm các thư mục con cũng như các file trong thư mục đó.
- Trasport: lớp ảo này thể hiện một phương thức giao vận nhất định. Một đối tượng Transport dùng một giao thức giao vận riêng để gửi tin nhắn. Mỗi nhà cung cấp dịch vụ, thực thi các lớp phải theo hệ thống hay giao
thức cụ thể của mình. Ví dụ một nhà cung cấp IMAP thực thi Javamail API sử dụng giao thức IMAP4. Các máy khách sử dụng thực thi này để thao tác với thư điện tử.
IMAP SMTP
Hình vẽ: chỉ ra một máy khách sử dụng thực thi IMAP4 để đọc thư điện tử và một thực thi SMTP để gửi thư đi. (chúng có thể từ một hay nhiều nhà cung cấp khác nhau)
4.4.2 Cấu trúc của môt Message
Lớp Message mô phỏng một tin nhắn thư điện tử. nó là một lớp trừu tượng thực thi một giao diện Part.
Lớp Message định nghĩa một tập các thuộc tính và nội dung cho một tin nhắn thư điện tử. Các thuộc tính, các cặp giá trị tên, xác định các thông tin định địa chỉ và định nghĩa cấu trúc nội dung của một tin nhắn điện tử (kiểu nội dung của một tin nhắn). Tin nhắn có thể chứa một đối tượng nội dung đơn lẻ hoặc gián tiếp là một đối tượng đa nội dung khác. Trong trường hợp nào thì nội dung cũng đuợc chứa trong một đối tượng DataHandler.
Mỗi tin nhắn có một nội dung riêng. Nội dung này được gói gọn trong một đối tượng DataHandler
Hình 3: Cấu trúc của một tin nhắn đơn giản (Simple Message) Bên cạnh cấu trúc đơn giản, tin nhắn cũng có thể chứa nhiều đối tượng nội dung. Trong trường hợp này đối tượng DataHandler chứa một đối tượng MultiPart thay vì chỉ đơn thuần là một khối dữ liệu nội dung đơn lẻ.
Một đối tượng MultiPart chứa nhiều đối tượng BodyPart. Cấu trúc của một đối tượng Message bởi vì chúng đều sử dụng giao diện Part.
Mỗi đối tượng BodyPart chứa các thuộc tính và nội dung nhưng các thuộc tính của một đối tượng BodyPart bị giới hạn bởi các thuộc tính được định nghĩa bởi giao diện Part. Một thuộc tính quan trọng là kiểu nội dung của phần này của nội dung tin nhắn. Nội dung của một BodyPart là một DataHandle có chứa dữ liệu hoặc một đối tượng MultiPart khác.
Lớp Message này sẽ là đối tượng chính được thao tác bởi người sử dụng trong chương trình Mail Client của em. Chi tiết về chương trình được trình bày trong chương V của đồ án này.
Chương V: Chương trình Email client và chức năng lọc thư rác tự động bằng giải thuật Naive Bayes
Chức năng lọc thư rác của chương trình MailClient mà tôi xây dựng được mô hình hóa như hình vẽ sau: các messge được lấy về từ server sẽ qua bộ lọc Bayes và được chứa trong (yellow mail) tại đây nó có thể được loại bỏ một lần nữa qua các dấu hiệu về sender và subject, cuối cùng nó sẽ được phân bổ vào hai thư mục Spam và Ham, trong đó Ham là thư mục chứa các thư hợp lệ, còn Spam là thư mục chứa các thư rác
Ham
Sp
a
5.1 Cơ sở dữ liệu cho chương trình5.1.1 Tài khoản người sử dụng 5.1.1 Tài khoản người sử dụng
Để thực hiện được chức năng gửi nhận thư chương trình cần một bộ dữ liệu đầu vào đó là thông tin về người sử dụng các thông tin đó bao gồm:
o Tên người sử dụng
o Địa chỉ mail
o Incoming server: đây là địa chỉ của máy chủ nơi chứa các thư điện
tử trong hòm thư có địa chỉ mail tương ứng ở trên (POP3 server)
o Outcoming server đây là tên máy chủ đảm nhận việc chuyển thư
điện tử đến địa chỉ cần gửi (SMTP server)
o Password người sử dụng: mật khẩu đảm bảo tính bảo mật trong hòm
thư của người sử dụng
Các thông tin này trong chương trình thiết kế sẽ yêu cầu người dùng nhập từ bàn phím và được lưu lại trong một file text có tên là user.prf trong đó user là tên của người sử dụng
5.1.2 Bộ dữ liệu mẫu
(Đây là cơ sở để bộ lọc Bayes hoạt động).
Để phân loại thư rác ban đầu người sử dụng cần phải cung cấp một bộ dữ liệu mẫu bao gồm: một số thư điện tử mà họ cho là thư rác và một số thư điện tử coi là thư hợp lệ (những thư điện tử này sẽ được chứa trong hai folder là HAM và SPAM).
Khi chức năng Bayes được kích hoạt thì chức năng phân loại thư rác được áp dụng. Công việc này không đơn giản, ban đầu căn cứ vào bộ dữ liệu mẫu bộ lọc sẽ xây dựng một tập các đặc trưng bao gồm các xác suất hiện của các từ mẫu có trong cả hai lớp mail rác và mail hợp lệ. Từ đó làm cơ sở để phân loại các thư sau. Mỗi lần chức năng Bayes được kích hoạt thì tập các đặc trưng lại được xây dựng lại vì thế hiệu quả phân loại thư rác sẽ lớn dần lên, quá trình
này gọi là khả năng tự học của bộ lọc Bayes.
Việc xây dựng các tập đặc trưng dựa trên tập mẫu ban đầu diễn ra như sau:
o Ban đầu mỗi thư điện tử sẽ được phân tách thành tập các từ (tất nhiên là
đã có sự giảm bớt các từ thường xuyên xuất hiện trong các thư điện tử và những từ có thể coi là tần số xuất hiện thấp). Sau đó sẽ tiến hành xác
định xác suất xuất hiện của mỗi từ đó trên mỗi lớp văn bản ta sẽ tìm được một tập đặc trưng mẫu. Các đặc trưng này sẽ được lưu vào một
file có tên là feature.txt để làm tiêu chuẩn đánh giá các thư điện tử tiếp
theo.
o Các thư điện tử sau cũng được biểu diễn thành vector các từ dựa trên
các tập đặc trưng đó.
o Bước tiếp theo là việc sử dụng công thức Bayes để xác định xác suất
một thư điện tử mới là thư rác hay thư hợp lệ.
o Cuối cùng để xác định thư điện tử là thư rác hay thư hợp lệ ta sẽ định ra
một ngưỡng xác suất nhất định (0.9) chẳng hạn. Nếu xác suất vừa tính được >0.9 thì thư điện tử đó sẽ được coi là thư rác và chuyển vào folder SPAM ngược lại nó sẽ được chuyển vào folder HAM.
Vector biểu diễn thư điện tử
Vector biểu diễn một thư điện tử là một tập các từ hay cụm từ xuất
hiện trong thư điện tử đó với số lần xuất hiện tương ứng. Còn vector đặc
trưng là một tập các từ hay cụm từ xuất hiện trong toàn bộ tập thư. Với xác suất xuất hiện tương ứng của từ hay cụm từ đó trong hai lớp thư hợp lệ và lớp thư rác. Các thư điện tử sau sẽ được biểu diễn thông qua tập đặc trưng này. Sau đó sử dụng luật xác suất Naive Bayes để xác định khả năng thư đó có phải là thư rác hay không.
Quá trình biểu diễn một thư điện tử thành vector :
Thư điện tử khi nhận về từ server có nhiều thành phần khác nhau như tiêu đề, địa chỉ người gửi, phần nội dung của thư… Phương pháp Bayes chỉ sử dụng đến nội dung của thư. Trong chương trình của tôi nội dung của các thư khi nhận về từ server sẽ được lưu vào máy client để là dữ liệu phục vụ cho việc lọc các thư tiếp theo. Ban đầu khi chưa có tập đặc trưng các thư lấy về sẽ được coi là các thư hợp lệ (và lưu cả vào thư mục HamMail trên máy client). Hiển thị trên màn hình qua note HAM của cây thư mục Localhost phía trái màn hình. Người sử dụng sẽ có một lựa chọn Move các thư điện tử (coi là thư rác) sang note SPAM của cây thư mục. Như thế folder SpamMail trong máy client sẽ có thêm một lượng mẫu nhất định. Việc xây dựng tập đặc trưng bắt đầu bằng việc biểu diễn nội dung của một thư điện tử được mô tả như sau:
Biểu diễn loại stopwords đếm spamword
Sau khi biểu diễn các thư điện tử, công việc tiếp theo là đi xây dựng tập các đặc trưng từ các mẫu thư ban đầu. Tập đặc trưng này phụ thuộc rất nhiều vào số lượng mẫu thư có trong hai folder SpamMail và HamMail trong máy client. Và cũng phụ thuộc nhiều vào độ ngắn dài của một bức thư. Vector đặc trưng chứa các từ hay cụm từ được phân tách từ nội dung của các thư điện tử với xác suất xuất hiện tương ứng của các từ đó trên cả hai lớp thư rác và thư hợp lệ. Ví dụ một phần tử trong vector đặc trưng :
Từ (cụm từ)
Xác suất xuất hiện trong lớp thư hợp lệ
Xác suất xuất hiện trong lớp thư rác
Free 0.012 0.25