Đánh giá mức độ hoàn thành ST T Yêu cầu Mức hoàn thành độ Ghi chú 1 Gửi được email dùng giao thức SMTP: To, CC, BCC khi gửi BCC thì những người nhận liên quan To, CC sẽ không biết là có
Trang 1TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - ĐHQG TP.HCM KHOA CÔNG NGHỆ THÔNG TIN
MÔN: MẠNG MÁY TÍNH
BÁO CÁO ĐỒ ÁN
LẬP TRÌNH SOCKET
Giáo viên hướng dẫn: Chung Thuỳ Linh
Lớp: 22CTT4
hiện( nhóm 9)
Nguyễn Minh Nhã 22120242 Trần Ngọc Nhân 22120249 Nguyễn Thanh Phong 22120265
Trang 2Phụ 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
Trang 31 Thông tin nhóm
ST
T MSSV Họ và tên Email
1 221202
42 Nguyễn Minh Nhã Minhnha1101@gmail.com
2 221202
49 Trần Ngọc Nhân tranngocnhannt2004@gmail.com
3 221202
65 NguyễnPhong Thanh ngthanhphong0817@gmail.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
Phong Gửi mail không kèm file đính kèm.
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
Trang 4Lư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
T Yêu cầu Mức hoàn thành độ Ghi chú
1 Gửi được email (dùng
giao thức SMTP): To, CC,
BCC (khi gửi BCC thì
những người nhận liên
quan (To, CC) sẽ không
biết là có gửi BCC), gửi
file đính kèm email
đúng các yêu cầu, chưa phát hiện ra lỗi
2 Tải được email từ Mail
server (dùng giao thức
POP3): Tải đủ và đúng
Không tải lại những
email đã tải trước đó,
đảm bảo yêu cầu này cả
khi tắt/ mở lại Mail
Client
đúng các yêu cầu, chưa phát hiện ra lỗi
3 Cho phép người dùng
phân loại email vào các
folder cụ thể theo cấu
hình của file config
(phân loại theo địa chỉ
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
đúng các yêu cầu, chưa phát hiện ra lỗi
Trang 5nếu không phù hợp bất
kỳ kết quả filter nào
4 Cho phép lọc các từ
khóa spam từ subject và
nội dung email, di
chuyển các spam email
vào thư mục Spam khi
lấy email về từ Mailbox
của Server
đúng các yêu cầu, chưa phát hiện ra lỗi
5 Quản lý được trạng thái
email (đã đọc/ chưa
đọc), đảm bảo vẫn đúng
khi tắt/mở chương trình
Mail Client của mình
đúng các yêu cầu, chưa phát hiện ra lỗi
6 Tự động tải email trong
mailbox về mỗi 10s một
lần, cấu hình thời gian
tự động tải email này
trong file config
đúng các yêu cầu, chưa phát hiện ra 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
Trang 6a 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 “;”
Trang 7Sau đó 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
Trang 8Sau 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ề
Trang 9Sau 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.
Trang 10Mail 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 “.”
Trang 11Phầ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;
Trang 12đượ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
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
Trang 13-B5: Kết thúc phiên.
Trang 14Khi 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 <số lượng thư> <tổng
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 <số thứ tự thư> <kích thước thư>.
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 <số thứ tự thư> Mail
Server trả về thông tin, nội dung email
Trang 15- 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
Trang 167 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