You are on page 1of 25

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍNH MINH

ĐẠI HỌC KHOA HỌC TỰ NHIÊN THÀNH PHỐ HỒ CHÍ MINH


——‫ﻩ‬¤¤‫——ﻩ‬

KHOA CÔNG NGHỆ THÔNG TIN




ĐỒ ÁN THỰC HÀNH
SOCKET
MÔN: MẠNG MÁY TÍNH
GIẢNG VIÊN: LÊ HÀ MINH

Thành viên: MSSV:


Đinh Đức Thiện 22120343
Phạm Chí Thuần 22120358
Phan Văn Tài 22120316

TP Hồ Chí Minh, tháng 12 năm 2023


MỤC LỤC

I. Bảng phân công công việc ……………………………………….3


II. Kịch bản giao tiếp của chương trình……………………………4
1. Giao thức trao đổi giữa Client và Server…………………………..4
2. Cấu trúc dữ liệu của thông điệp…………………………………….5
2.1 Email SMTP………………………………………………….5
2.2 Email POP3…………………………………………………..6
3. Tổ chức cơ sở dữ liệu…………………………………………………7
III. Môi trường lập trình và các framework hỗ trợ……………….9
1. Môi trường lập trình………………………………………………....9
2. Các framework hỗ trợ………………………………………………..9
IV. Hướng dẫn sử dụng……………………………………………..9
1. Khởi động chương trình……………………………………………..9
2. Các chức năng chính………………………………………………..13
a. Gửi mail………………………………………………………14
b. Xem mail……………………………………………………..15
c. Xử lí mail BCC……………………………………………….19
d. Chủ động di chuyển mail sang thư mục khác……………..21
e. Các thông tin thêm…………………………………………..23
V. Tài liệu tham khảo……………………………………………..24
I. Bảng phân công công việc

Công việc Người phụ trách Công việc chưa Mức độ hoàn
hoàn thành thành công việc
Gửi được Email với TO, CC và Phạm Chí Thuần Không có 100%
BCC
Gửi được attached file (dung Phạm Chí Thuần, Không có 100%
lượng dưới 3mb) Phan Văn Tài

• Gửi được file *.txt:


• Gửi được các định dạng
file như: *.docx, *.pdf,
*.jpg, *.zip,...
• Gửi được nhiều file đính
kèm trong cùng 1 email

Có giới hạn dung lượng file gửi:

Tải được các email về mail Phan Văn Tài, Đinh Không có 100%
client từ mailbox của Server Đức Thiện

• Tải nội dung email không


kèm file
• Tải nội dung email có kèm
file

Tải nội dung email có kèm file, có


lưu file xuống máy cục bộ của
client

Quản lý trạng thái email (đã Phan Văn Tài Không có 100%
đọc/ chưa đọc)

Xử lý lọc email Phan Văn Tài, Đinh Không có 100%


Đức Thiện
• Lọc email dựa trên địa chỉ
người gửi
• Lọc email dựa trên subject
• Lọc email dựa trên nội
dung
Di chuyển email vào thư mục cụ
thể/ Spam
Xử lý tự động tải email từ Phạm Chí Thuần Không có 100%
Mailbox theo thời gian cấu
hình trong config file

Tổ chức file config: Có sử dụng Đinh Đức Thiện Không có 100%


file config dạng file có cấu trúc
(*.xml, *.sql, *.json,...)
Báo cáo Đinh Đức Thiện Không có 100%
Giao diện Phan Văn Tài Không có 100%

II. Kịch bản giao tiếp của chương trình


1. Giao thức trao đổi giữa Client và Server: SMTP để gửi email từ Client tới
Server và POP3 để nhận email từ Mail Server về Client. Cơ chế hoạt động: gồm 2
bước chính
a. Client kết nối với Server thông qua giao thức SMTP, xử lí và gửi dữ liệu.
B1: Mở kết nối: Mail Client mở kết nối tới Mail Server thông qua giao thức TCP
B2: Xác nhận chào mừng: Server đáp lại bằng 1 thông điệp chào mừng, thường bắt
đầu bằng mã 220
B3: Gửi lệnh EHLO hoặc HELO
B4: Gửi thư
+ Client thông báo với Server về người gửi bằng cách sử dụng lệnh MAIL FROM
+ Server phản hồi xác nhận.
B5: Chỉ định người nhận
+ Client thông báo với Server về người nhận bằng cách sử dụng lệnh RCPT TO.
+ Server phản hồi xác nhận.
B6: Truyền thông điệp
+ Client thông báo với Server rằng nó sẽ gửi nội dung email bằng cách sử dụng lệnh
DATA.
+ Server phản hồi với mã 354 và yêu cầu nội dung email.
+ Client truyền nội dung email và kết thúc bằng một dòng trống kèm theo một dấu
chấm.
B7: Kết thúc và đóng kết nối.
b. Client thiết lập kết nối với Server sử dụng giao thức POP3 để truy vấn email
và thực hiện các tác vụ yêu cầu.
B1: Kết nối và xác thực
+ Mail Client mở kết nối tới Mail Server thông qua giao thức TCP.
+ Client đăng nhập vào tài khoản email của người dùng bằng username và password.
B2: Nhận email và thực hiện các tác vụ yêu cầu, ví dụ:
+ Lệnh “RETR” để lấy email từ Server về máy cá nhân.
+ Lệnh “DELE” để xóa email
+ Lệnh “STAT” được sử dụng để lấy thông tin tổng quan về hộp thư, bao gồm số
lượng email và tổng kích thước của chúng.
B3: Đóng kết nối
+ Client thông báo với Server muốn đóng kết nối thông qua lệnh “QUIT”.
+ Server xác nhận và đóng kết nối

2. Cấu trúc dữ liệu của thông điệp


2.1 Email SMTP
a. Header (Phần đầu)
Bao gồm:
- From: Địa chỉ email của người gửi.
- To: Địa chỉ email của người nhận.
- Subject: Chủ đề (tiêu đề) của email.
- Date: Thời điểm gửi email.
- Other Headers: Các trường khác như CC (Carbon Copy), BCC (Blind Carbon Copy),
Reply-To,…
b. Body (Nội dung):
Bao gồm:
- Text Content: Nội dung văn bản của email.
- Attachments: Các file đính kèm (nếu có).
- HTML Content: Nếu email có dạng HTML. (ở trong đồ án này tụi em không hỗ trợ)

2.2 Email POP3


Khi email được truyền từ Server POP3 về Client, cấu trúc thường giữ nguyên thông
tin được gửi từ SMTP. Tuy nhiên, thông tin này có thể được chuyển đổi sang định
dạng có thể hiểu bởi Client. Trong đồ án, bọn em sử dụng định dạng MIME -
Multipurpose Internet Mail Extensions.
Cấu trúc dữ liệu của MIME gồm:
MIME Headers:
- Content-Type: Xác định loại nội dung (text/plain, text/html, image/jpeg,
application/pdf,...).
- Content-Disposition: Xác định cách nội dung sẽ được hiển thị hoặc xử lý: hiển thị
trực tiếp (inline) hoặc đính kèm dưới dạng file đính kèm (attachment).
MIME Body Parts:
- Text Part: Nội dung văn bản.
- Binary Part: Dữ liệu nhị phân, chẳng hạn như hình ảnh hoặc file đính kèm.

3. Tổ chức cơ sở dữ liệu
- Các email sẽ được lưu vào trong thư mục username@gmail.com, bên trong sẽ chứa
các thư mục “Inbox, Important,..” là nơi mà các email sẽ được lưu trữ cùng với một
file username.json như hình để hỗ trợ việc xử lí.
III. Môi trường lập trình và các framework hỗ trợ
1. Môi trường lập trình

- Hệ điều hành: Windows

- Môi trường phát triển tích hợp: Microsoft Visual Studio Code

- Ngôn ngữ lập trình: Python

2. Các framework hỗ trợ

- Thư viện: socket, threading, time, datetime, email, byteparser, MIME, tkinter, re,
threading, os, base64

- Compiler: Trình biên dịch ngôn ngữ lập trình Python thành ngôn ngữ máy của
Microsoft Visual Studio Code

IV. Hướng dẫn sử dụng các tính năng của chương trình

1. Khởi động chương trình

- Để sử dụng chương trình thì cần có file test_mail_server_1.0.jar, cách tải đã có trong
file hướng dẫn đồ án.

- Chạy file test test_mail_server_1.0.jar, để port SMTP là 2500, port POP3 là 1100

- Tải file 22120343_22120358_22120316.zip về và giải nén.

- Bài làm gồm 3 tệp tin, mỗi tệp có chức năng riêng
+ email_functions_client.py: chứa các hàm thực thi yêu cầu: gửi, nhận, lọc dữ liệu,…

+ email_interface_main.py: chứa các hàm để tạo UI cho người dùng tương tác

+ config.json: chỉnh sửa các thông tin người dùng, chứa địa chỉ IP Server, số port của
SMTP và POP3, chỉ số Autoload và các trường hợp để lọc mail.

- Để chạy chương trình, trong Visual Studio Code nhấn nút hình tam giác ở góc trên
bên phải màn hình:

- Nếu sử dụng CMD, gõ đúng đường link chứa file thực thi và ghi thêm: python
filename.py và nhấn enter
- Giao diện như sau sẽ được hiện ra.
- Nhập username và password và nhấn login. Một màn hình mới được hiện ra, khi này
đồng thời trong file config.json, trường username và password sẽ được cập nhật thành
thông tin đã nhập.
2. Các chức năng chính

+ Send Mail: gửi email cho email khác, có thể gửi cho chính mình

+ Received Mail: hiển thị các folder chứa các mail được gửi đến; cho phép xem các
mail được gửi đến, tải mail, xóa mail, di chuyển mail đến folder mong muốn.

+ Quit: Thoát và kết thúc chương trình


a. Gửi mail

- Để gửi mail, nhấn vào nút “Send Mail”. Màn hình sau hiện ra và bạn cần cung cấp
các thông tin gồm:

+ To: Địa chỉ Email của người nhận chính

+ CC: Địa chỉ Email của người nhận CC (nếu có)

+ BCC: Địa chỉ Email của người nhận BCC (nếu có)

+ Subject: Chủ đề của bức thư (nếu có)

+ Context: Nội dung thư

+ Số lượng file đính kèm: số nguyên không âm, nếu lớn hơn 0 thì sẽ hiện ra cửa sổ và
các khung bằng số lượng file vừa nhập . Bạn cần nhập vào đường dẫn file và file có
dung lượng dưới 3MB

+ Bấm proceed. Màn hình sau hiện ra chứng tỏ bạn nhập file thành công.
b. Xem mail

- Để xem các mail đã gửi cho mình, bạn đăng nhập vào email muốn xem, bấm vào
“Received Mail”
- Màn hình sau hiện ra. Chọn thư mục muốn xem:
- Nếu trong thư mục trống sẽ hiện ra như sau:

- Nếu thư mục có email bên trong sẽ hiển thị như sau:

- Nhập số thứ tự mail để xem nội dung, ở đây mình bấm số 1


- Nội dung thư như sau. Lưu ý sẽ không hiển thị người được nhận BCC nếu bạn là TO
hoặc CC; nếu bạn là BCC thì sẽ thấy TO và CC nhưng không thấy BCC khác:

- Muốn xóa thư nhấn nút delete

- Thư sau khi được đọc sẽ chuyển trạng thái từ <chưa đọc> thành <đã đọc>
- Nếu thư có file đính kèm sẽ hiển thị như sau:

- Nhấp chuột vào file đính kèm và chọn đường dẫn sau đó nhấn “download” để lưu
file về máy

c. Xử lí mail BCC

- Chúng ta gửi BCC cho thuan và lengocson


- Đây là từ góc nhìn mail của người nhận thuan; thuan sẽ thấy người nhận TO, CC
nhưng không thấy BCC khác (lengocson).
- Đây là góc nhìn từ người nhận lengocson; lengocson sẽ thấy người nhận TO, CC
nhưng không thấy người nhận BCC khác (thuan)

d. Chủ động di chuyển mail sang thư mục khác

- Để chủ động di chuyển mail sang thư mục khác. Vào mail bạn muốn di chuyển
- Chọn “Move mail to other folder”

- Chọn thư mục bạn muốn di chuyển mail đến, ví dụ ở đây chọn thư mục “Project”
- Kiểm tra lại trong thư mục “Project

e. Các thông tin thêm:

+ Trong lúc bạn chạy chương trình thì hệ thống sẽ tự động tải email mới về máy mỗi
10s một lần.
+ Chương trình sẽ tự động tạo 1 file username.json (ví dụ: thuan@gmail.com.json)
trong thư mục chứa các thư mục Inbox, Important,.. để dễ dàng kiểm tra và phục vụ
cho các chức năng như đọc mail,…

- Khi muốn nhập nhiều mail trong khi gửi, mỗi mail được phân tách bởi dấu “,” và
một dấu cách “ “. Cần nhập đúng cú pháp. Ví dụ:

+ Cú pháp đúng: thien@gmail.com, thuan@gmail.com

+ Cú pháp sai: thien@gmail.com,thuan@gmail.com; thien@gmail.com


thuan@gmail.com;...

- Chương trình cho phép gửi content và subject bằng tiếng việt có dấu,

V. Tài liệu tham khảo


1. Giáo trình mạng máy tính
2. Chat OpenAI: https://chat.openai.com
3. StackOverFlow: stackoverflow.com
4. https://www.computer-networking.info/1st/html/application/email.html
5. https://www.geeksforgeeks.org/multipurpose-internet-mail-extension-mime-
protocol/
6. https://mailtrap.io/blog/smtp/
7. https://mailtrap.io/blog/smtp-commands-and-responses/
8. https://electrictoolbox.com/pop3-commands/
9. https://kb.datamotion.com/?ht_kb=how-to-utilize-pop3-protocol-to-access-
datamotion-securemail-and-direct-accounts
10. https://gist.github.com/RamonWill/0422b061464097a7a0162f33e4c13a2e

You might also like