














Preview text:
Phụ lục
1. Thông tin nhóm ......................................................................................................................... 3
2. Phân công công việc ................................................................................................................ 3
3. Đánh giá mức độ hoàn thành ............................................................................................... 4
4. Hướng dẫn sử dụng các tính năng chương trình ............................................................ 5
a. Chức năng SEND EMAIL ...................................................................................................... 5
b. Chức năng SEE LIST EMAIL ................................................................................................ 6
5. Kịch bản giao tiếp của chương trình ................................................................................... 8
a. Gửi email đi dùng giao thức SMTP ................................................................................. 8
b. Tải một email về từ Mail server dùng giao thức POP3. ...................................... 13
6. Môi trường lập trình và các framework hỗ trợ để thực thi ứng dụng .................. 14
7. Tài liệu tham khảo ................................................................................................................. 14 2 1. Thông tin nhóm ST MSSV Họ và tên Email T 1 221202 Nguyễn Minh Nhã Minhnha1101@gmail.com 42 2 221202 Trần Ngọc Nhân tranngocnhannt2004@gm 49 ail.com 3 221202 Nguyễn Thanh ngthanhphong0817@gmai 65 Phong l.com 2. Phân công công việc
STT Người thực hiện
Nội dung công việc 1 Trần Ngọc Nhân
Tạo sườn cho chương trình.
Tải các email không kèm file và có kèm file.
Quản lý trạng thái đọc file.
Lọc email và đưa vào các folder.
Tổ chức và xử lý file config phục vụ cho công việc lọc mail.
Tự động tải email mỗi 10s. 2 Nguyễn
Thanh Gửi mail không kèm file đính kèm. Phong
Gửi email kèm file đính kèm định dạng *.txt.
Giới hạn dung lượng file gửi.
Xử lý nội dung email tải về trên màn hình console.
Kiểm tra, phát hiện lỗi. 3
Nguyễn Minh Nhã Gửi email với CC và BCC.
Gửi email đính kèm file với nhiều định dạng khác nhau.
Gửi được nhiều file trong cùng 1 email. 3
Lưu file từ email tải về máy cục bộ.
Tổ chức và xử lý đọc file config chứa
thông tin User, Port, Mailserver,… Viết báo cáo.
3. Đánh giá mức độ hoàn thành ST Yêu cầu Mức độ Ghi chú T hoàn thành 1
Gửi được email (dùng 100% Hoàn thành giao thức SMTP): To, CC, đúng các yêu BCC (khi gửi BCC thì cầu, chưa những người nhận liên phát hiện ra quan (To, CC) sẽ không lỗi.
biết là có gửi BCC), gửi file đính kèm email. 2
Tải được email từ Mail 100% Hoàn thành server (dùng giao thức đúng các yêu
POP3): Tải đủ và đúng. cầu, chưa Không tải lại những phát hiện ra
email đã tải trước đó, lỗi.
đảm bảo yêu cầu này cả khi tắt/ mở lại Mail Client. 3 Cho phép người dùng 100% Hoàn thành phân loại email vào các đúng các yêu folder cụ thể theo cấu cầu, chưa hình của file config phát hiện ra
(phân loại theo địa chỉ lỗi. người gửi, theo subject, hoặc từ khóa trong nội dung email). Mặc định
email được tải về client luôn thuộc folder Inbox 4 nếu không phù hợp bất kỳ kết quả filter nào. 4
Cho phép lọc các từ 100% Hoàn thành khóa spam từ subject và đúng các yêu nội dung email, di cầu, chưa chuyển các spam email phát hiện ra vào thư mục Spam khi lỗi. lấy email về từ Mailbox của Server. 5
Quản lý được trạng thái 100% Hoàn thành email (đã đọc/ chưa đúng các yêu
đọc), đảm bảo vẫn đúng cầu, chưa
khi tắt/mở chương trình phát hiện ra Mail Client của mình. lỗi. 6
Tự động tải email trong 100% Hoàn thành mailbox về mỗi 10s một đúng các yêu
lần, cấu hình thời gian cầu, chưa tự động tải email này phát hiện ra trong file config. lỗi.
4. Hướng dẫn sử dụng các tính năng chương trình
Khi khởi động chương trình, màn hình sẽ hiện MENU với 3 lựa
chọn SEND EMAIL, SEND LIST EMAIL và EXIT. Người dùng sẽ
nhập số tương ứng để chọn chức năng. 5 a. Chức năng SEND EMAIL
Sau khi chọn chức năng SEND EMAIL, người dùng lần lượt
nhập các thông tin được yêu cầu( nếu không nhập thì bấm
Enter để bỏ qua) bao gồm:
- TO, CC, BCC: nhập địa chỉ email người nhận, các email
ngăn cách nhau bới dấu cách. - Subject: Tiêu đề email
- Content: Nội dung email, kết thúc nội dung với dấu “;” 6
Sau đó sẽ xuất hiện dòng chữ hỏi bạn có muốn gửi file đính
kèm không, nhấn “1” để gửi kèm file, “2” để chọn không.
Sau đó nhập số lượng file muốn gửi, tiếp đến nhập đường
dẫn tới file bạn cần gửi, tổng dung lượng các file phải nhỏ
hơn hoặc bằng 3MB, nếu không bạn sẽ được thông báo và
phải nhập lại đường dẫn các file. Thông báo hiện lên báo
hiệu việc gửi email đã thành công.
b. Chức năng SEE LIST EMAIL
Sau khi chọn chức năng SEE LIST EMAIL, sẽ xuất hiện các
folder, người dùng nhập số tương ứng để xem email trong
folder cần xem, nhập “0” để thoát ra MENU. 7
Sau khi chọn folder, danh sách email sẽ xuất hiện, bấm số
tương ứng để lựa chọn email muốn bạn muốn xem. Sau khi
chọn, nội dung email sẽ xuất hiện kèm thông báo có file
đính kèm hay không kèm sanh sách các file nếu có. Bạn
nhập “1” nếu muốn lưu các file hoặc “2” nếu không.
Nếu bạn chọn có lưu file, hãy nhập đường dẫn mà bạn muốn
file được lưu về và các file đính kèm sẽ được lưu về. 8
Sau khi đọc, mail của bạn sẽ được đánh dấu là đã đọc. Bạn
vẫn có thể tiếp tục lưu file vào thư mục khác.
5. Kịch bản giao tiếp của chương trình
a. Gửi email đi dùng giao thức SMTP - B1: Kết nối.
Mail Client thiết lập kết nối với Mail Server bằng Socket
thông qua cổng 2225 (hoặc cổng khác, tùy vào cấu hình).
- B2: Gửi lệnh EHLO. 9
Mail Client gửi thông báo đến Mail Server về sự hiện diện
của nó thông qua lệnh EHLO [127.0.0.1] (hoặc địa chỉ IP khác, tùy vào cấu hình).
- B3: Chuyển thông điệp.
Sau khi thiết lập kết nối và xác nhận danh tính, Mail
Client gửi tới Mail Server địa chỉ email của người gửi thông qua
lệnh MAIL FROM và RCPT TO.
- B4: Truyền nội dung.
Mail Client gửi tới Mail Server lệnh DATA để yêu cầu gửi
dữ liệu thư (văn bản, tệp đính kèm, vv.), sau khi nhận phản hồi
354 enter mail, end with line containing only “.”, Mail Client
bắt đầu gửi nội dung email từng dòng một, cấu trúc gồm 3
phần chính là phần đầu( chứa thông tin cơ bản của mail), phần
content( chứa nội dung của email), phần dữ liệu file( chứa nội
dung file đính kém đã được mã hóa). Phần dữ liệu này phải
được kết thúc bởi 1 dòng chỉ bào gồm “.” 10
Phần đầu gồm các dòng Message-ID( mã định danh duy
nhất của email), Date( giờ, ngày, tháng, năm gửi email), MIME-
Version( phiên bản MIME sử dụng), User-Agent( ứng dụng gửi
thư đang sử dụng), Content-Language( ngôn ngữ), To( địa chỉ
email người nhận, nếu nhiều sẽ ngăn cách bằng dấu “,”),
From( địa chỉ email người gửi), Subject( tiêu đề của email).
Nếu email được gửi có đính kèm file, một chuỗi kí tự( tự
quy định) được sử dụng để đặt ranh giới giữa các phần khác
nhau giúp máy chủ thư và các chương trình đọc thư hiểu cách
các phần của thư được tách biệt. Lúc này dòng đầu tiên được
gửi cho Mail Server sẽ là Content-Type: multipart/mixed;
boundary= “//Tự quy định//” , khi gửi dữ liệu, một dấu " --" 11
được thêm vào đầu mỗi boundary, và dấu "--" được thêm vào
cuối cùng để chỉ định sự kết thúc của email. Dòng This is a
multi-part message in MIME format thông báo cho Mail Server
rằng email đó chứa nhiều phần khác nhau.
Đối với phần nội dung email, phần header bao gồm
Content-Type:… xác định kiểu của nội dung gửi là văn bản,
Content-Transfer-Encoding: … xác định cách biểu diễn và
truyền tải nội dung email. Cách một dòng so với phần header
là phần nội dung email mà bạn muốn gửi đi.
Đối với phần file đính kèm, phần header bao gồm
Content-Type:… xác định kiểu của tệp đính kèm; Content-
Disposition:… xác định cách xử lý nội dung, bao gồm cả tên
tệp đính kèm; Content-Transfer-Encoding:… xác định phương
pháp mã hóa sử dụng để truyền tải dữ liệu của tệp đính kèm(ở
đây là base64). Cách một dòng sau đó là phần nội dung email
đã được mã hóa theo phương pháp base64. 12
-B5: Kết thúc phiên. 13
Khi quá trình truyền tải hoàn tất, kết nối giữa Mail Client
và Mail Server sẽ được đóng.
b. Tải một email về từ Mail server dùng giao thức POP3. - B1: Kết nối.
Mail Client thiết lập kết nối với Mail Server bằng Socket
thông qua cổng 3335 (hoặc cổng khác, tùy vào cấu hình). - B2: Chứng thực.
Người dùng cung cấp thông tin đăng nhập (tên người
dùng và mật khẩu) để xác thực thông qua lệnh USER và PASS.
Mail Server trả về +OK nếu xác thực thành công.
- B3:Bắt đầu phiên và lấy thông tin về các email.
Mail Client lấy số lượng thư và tổng kích thước của chúng
bằng bệnh STAT. Mail Server trả về +OK kích thước>
Mail Client sử dụng lệnh LIST để lấy danh sách các thư
kèm dung lượng của từng thư lần lượt theo số thứ tự. Mail
Server sẽ trả về lần lượt .
Chương trình sẽ kiểm tra và thực hiện lấy nội dung của
thư mới vừa nhận bằng lệnh RETR . Mail
Server trả về thông tin, nội dung email. 14
- B4: Kết thúc phiên.
Mail client kết thúc phiên và đăng xuất bằng lệnh QUIT.
6. Môi trường lập trình và các framework hỗ trợ để thực thi ứng dụng
Chương trình được viết bằng ngôn ngữ C++ trên hệ điều hành Windows. 15 7. Tài liệu tham khảo
Chat Openai: https://chat.openai.com
SMTP command: https://mailtrap.io/blog/smtp-commands-and- responses/
POP3 command: https://electrictoolbox.com/pop3-commands/
How to send email with an attachment from C++ through SMTP?
Cùng tìm hiểu về Base64 encoding
Json là gì? Những điều lập trình viên nên biết về Json File
C++ Network Programming Part 1: Sockets
C++ Network Programming Part 2: TCP & UDP 16