Mục Lục Lời cảm ơn........................................................................................2 Chương I: Cơ Sở Lý Thuyết ..........................................................3 1.1 Lý do chọn đề tài ............................................................................................3 1.2 Cơ sở lập trình ................................................................................................3 1.3 Giới thiệu về Python .......................................................................................3 1.4 Giới thiệu về ClientServer..............................................................................4 1.5 Giới thiệu về TCPIP.......................................................................................5 1.6 Giới thiệu về HTML và BOOTSTRAP...........................................................6 Chương II: Quy trình và lưu đồ thuật toán .........................................6 2.1 Yêu cầu đề tài..................................................................................................6 2.2 Các thư viện và class được sử dụng trong chương trình ..................................7 2.3 Quy trình ........................................................................................................7 2.4 Lưu đồ thuật toán ............................................................................................8 Chương III: Viết chương trình....................................................................9 3.1 Phân tích chức năng ........................................................................................9 3.2 Thiết kế..........................................................................................................10 Chương IV: Kết quả ......................................................................................13 4.1 Kết quả...........................................................................................................13 4.2 Hướng dẫn sử dụng chương trình .................................................................14 Tài Liệu Tham Khảo ....................................................................16 LỜI CẢM ƠN Trong thời gian làm bài tập lớn “Tìm hiểu giao thức và thiết kế ứng dụng gửi thư điện tử”, chúng em đã nhận được nhiều sự giúp đỡ, đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô. Em xin gửi lời cảm ơn chân thành đến TS. Bồ Quốc Bảo, giảng viên bộ môn Lập Trình Mạng – Trường Đại học Công Nghiệp Hà Nội người đã tận tình hướng dẫn, chỉ bảo chúng em trong suốt quá trình làm bài tập lớn. Em cũng xin chân thành cảm ơn các thầy cô giáo trong Khoa Điện Tử đã dạy dỗ cho em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp em có được cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ em trong suốt quá trình học tập. Trong quá trình trình bày khó tránh khỏi sai sót, rất mong các thầy, cô bỏ qua. Đồng thời do trình độ lý luận cũng như kinh nghiệm còn hạn chế nên bài báo cáo không thể tránh khỏi những thiếu sót, chúng em rất mong nhận được ý kiến đóng góp thầy, cô để em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt hơn trong những bài báo cáo sau. Chúng em xin chân thành cảm ơn Chương I: Cơ Sở Lý Thuyết 1.1 Lý do chọn đề tài Hiện nay mạng Internet toàn cầu đã phát triển rất mạnh, đáp ứng rất tốt các nhu cầu về thông tin khoa học, giải trí, liên lạc, mua bán, quảng cáo v.v... của con người. Internet đã trở thành một thành phần không thể thiếu với cuộc sống hiện đại. Về bản chất, Internet là một hệ thống mạng, liên kết các máy tính trên toàn thế giới lại theo những chuẩn chung của nó. Với phạm vi nhỏ hơn nhưng cũng rất tương tự, có những mạng khác đó là WAN, LAN.., mỗi mô hình đó đều được ứng dụng rất nhiều tiện ích khác nhau. Với mục tiêu để cho các sinh viên ra trường với một kiến thức tốt về mạng, về lập trình ứng dụng trên mạng để có thể làm được nhiều việc khác nhau, bộ môn Lập Trình Mạng ra đời. Vì vậy, để áp dụng kiến thức đã học và muốn làm ra một ứng dụng có thể áp dụng trong thực tế chúng em đã tìm được đề tài với tên “Tìm hiểu giao thức và thiết kế ứng dụng gửi thư điện tử 1.2 Cơ sở lập trình Ứng dụng hoạt động dựa vào giao thức IPTCP để truyền dữ liệu giữa hai máy khác nhau, cụ thể ở đây là một máy server để cung cấp dịch vụ và nhiều máy client sử dụng dịch vụ do máy server cung cấp để cho người dùng sử dụng. Ngôn ngữ lập trình ở đây là ngôn ngữ Python (Phiên bản 3.7) vì Python là ngôn ngữ có thể được sử dụng để viết ứng dụng chạy trên hầu hết các thiết bị (ở đây ta quan tâm tới thiết bị có hỗ trợ mạng). Trọng điểm, có mấy khả năng nổi trội do Python cung cấp mà ta có thể sử dụng là : Lập trình đa tuyến trình (Cùng 1 ứng dụng nhưng có thể chạy nhiều tiến trình song song với nhau thay vì cứ phải tiến trình này đợi tiến trình kia kết thúc mới có thể thực hiện) Python là một nền tảng có thể chạy trên nhiều loại thiết bị với nhiều hệ điều hành khác nhau nên có phạm vi ứng dụng rất rộng rãi. Lập trình mạng. Lớp quan trọng nhất mà ta sử dụng là lớp Socket và ServerSocket. 1.3 Giới thiệu về Python Python là một ngôn ngữ lập trình bậc cao, thông dịch, hướng đối tượng, đa mục đích và cũng là một ngôn ngữ lập trình động. Cú pháp của Python là khá dễ dàng để học và ngôn ngữ này cũng mạnh mẽ và linh hoạt không kém các ngôn ngữ khác trong việc phát triển các ứng dụng. Python hỗ trợ mẫu đa lập trình, bao gồm lập trình hướng đối tượng, lập trình hàm và mệnh lệnh hoặc là các phong cách lập trình theo thủ tục. Python không chỉ làm việc trên lĩnh vực đặc biệt như lập trình web và đó là tại sao ngôn ngữ này là đa mục đích bởi vì nó có thể được sử dụng với web, enterprise, 3D CAD, … Bạn không cần sử dụng các kiểu dữ liệu để khai báo biến bởi vì kiểu của nó là động, vì thế bạn có thể viết a=15 để khai báo một giá trị nguyên trong một biến. Với Python, việc phát triển ứng dụng và debug trở nên nhanh hơn bởi vì không cần đến bước biên dịch và chu trình edittestdebug của Python là rất nhanh. Dưới đây là một số đặc điểm chính của Python: ⁺ Dễ dàng để sử dụng: Python là một ngôn ngữ bậc cao rất dễ dàng để sử dụng. Python có một số lượng từ khóa ít hơn, cấu trúc của Python đơn giản hơn và cú pháp của Python được định nghĩa khá rõ ràng, … Tất cả các điều này là Python thực sự trở thành một ngôn ngữ thân thiện với lập trình viên. ⁺ Bạn có thể đọc code của Python khá dễ dàng. Phần code của Python được định nghĩa khá rõ ràng và rành mạch. ⁺ Python có một thư viện chuẩn khá rộng lớn. Thư viện này dễ dàng tương thích và tích hợp với UNIX, Windows, và Macintosh. ⁺ Python là một ngôn ngữ thông dịch. Trình thông dịch thực thi code theo từng dòng (và bạn không cần phải biên dịch ra file chạy), điều này giúp cho quá trình debug trở nên dễ dàng hơn và đây cũng là yếu tố khá quan trọng giúp Python thu hút được nhiều người học và trở nên khá phổ biến. ⁺ Python cũng là một ngôn ngữ lập trình hướng đối tượng. Ngoài ra, Python còn hỗ trợ các phương thức lập trình theo hàm và theo cấu trúc. Ngoài các đặc điểm trên, Python còn khá nhiều đặc điểm khác như hỗ trợ lập trình GUI, mã nguồn mở, có thể tích hợp với các ngôn ngữ lập trình khác, … 1.3 Giới thiệu về ClientServer Server được hiểu là máy chủ, thường là một hệ thống máy lớn, có bộ xử lý mạnh, có khả năng hoạt động đáng tin cậy, có khả năng lưu trữ dữ liệu lớn, nó chuyên quản lý tài nguyên (chủ yếu là cơ sở dữ liệu), cung cấp các dịch vụ mạng cho các máy khách (client) sử dụng. Bình thường nó chạy suốt thời gian thực và sẵn sàng chấp nhận các yêu cầu kết nối và các yêu cầu dịch vụ khác từ máy khách. Client là máy khách, nó thường được sử dụng bởi người dùng cuối. Nó hoạt động dựa trên việc sử dụng dịch vụ mà máy server cung cấp để thực hiện các công việc mà người dùng cuối mong muốn. Quy trình hoạt động của mô hình này lặp lại 2 quá trình như sau : Client gửi yêu cầu lên server. Server nhận được yêu cầu thì sẻ xử lý thích hợp và trả lời lại client. Mô hình ClientServer 1.5 Giới thiệu về TCPIP +) Giới thiệu về TCP Giao thức TCP (Transmission Control Protocol) là giao thức hướng kết nối (connectionoriented), nó đòi hỏi thiết lập kết nối trước khi bắt đầu gửi dữ liệu và kết thúc kết nối khi việc gửi dữ liệu hoàn tất theo đúng thứ tự: thiết lập kết nối, truyền dữ liệu và kết thúc kết nối. +) Giới thiệu về IP. IP là địa chỉ của một máy tính trên mạng, dựa vào địa chỉ IP giao thức TCP có thể truyền dữ liệu chính xác từ một máy này qua máy kia thông qua hệ thống mạng. Ở trên mạng, một máy tính sẻ có một địa chỉ IP khác nhau, từ địa chỉ IP có thể biết được máy nào trên mạng và ngược lại. +) Giới thiệu về cổng Port. Với IP, giao thức TCP chỉ mới có thể truyền dữ liệu chính xác từ máy này qua máy kia mà chưa thể truyền chính xác đến từng ứng dụng trên máy được. Hiện nay, các hệ thống máy thông thường hoạt động theo chế độ đa nhiệm, nghĩa là có nhiều ứng dụng chạy cùng một lúc và trong đó có thể có nhiều ứng dụng sử dụng dịch vụ mạng. Yêu cầu, khi máy chủ A truyền dữ liệu cho một ứng dụng u trên máy B thì trên máy B phải đảm bảo dữ liệu đó phải đến được ứng dụng u, chứ không phải ứng dụng v. Để thực hiện điều đó thì máy chủ A khi truyền dữ liệu đi thì trên dữ liệu đó có một thành phần thông tin giúp máy B xác định được đúng ứng dụng u. Phần thông tin đó chính là địa chỉ port trên máy B, nó có thể hiểu là lỗ cắm ảo trên máy B mà ứng dụng u đã đăng ký để độc quyền sử dụng nhằn nhận dữ liệu từ máy chủ A. Trên thực tế, địa chỉ port là một số nguyên 2 byte có giá trị từ 0 đến 65535. Nó có đặc điểm : Giá trị từ 0 đến 1023 là các cổng phổ biến dành cho các ứng dụng thông dụng như http: 80, mail : 25, ftp : 21, Telnet 23.... Các giá trị còn lại có thể được sử dụng linh hoạt. Mỗi cổng trong mỗi thời điểm được sử dụng cho tối đa là 1 ứng dụng. Ví dụ như một ứng dụng nào đó đã sử dụng cổng 55 thì ứng dụng khác không thể sử dụng cổng 55 đó nữa chừng nào ứng dụng trước đó chưa có đóng cổng 55 lại. 1.6 Giới thiệu về HTML và BOOTSTRAP + HTML và BOOSTRAP HTML( Hyper Text Markup Language) ngôn ngữ lập trình siêu văn bản: là một trong những ngôn ngữ được sử dụng rộng rãi và phổ biến nhất với đa số những người muốn tạo lập trang web cá nhân hay tổ chức. Có thể nói HTML chính là xương sống của một trang web. BOOSTRAP: Bootstrap là một framework cho phép thiết kế website reponsive nhanh hơn và dễ dàng hơn + Bootstrap là bao gồm các HTML templates, CSS templates và Javascript tao ra những cái cơ bản có sẵn như: typography, forms, buttons, tables, navigation, modals, image carousels và nhiều thứ khác. Trong bootstrap có thêm các plugin Javascript trong nó. Giúp cho việc thiết kế reponsive của bạn dễ dàng hơn và nhanh chóng hơn. Lịch sử Bootstrap Bootstrap là dược phát triển bởi Mark Otto và Jacob Thornton tại Twitter. Nó được xuất bản như là một mã nguồn mở vào tháng 8 năm 2011 trên GitHub. Tính ra đến thời điểm mình viết bài viết này nó cũng đã phát triển được 3 năm rồi. Bản bootstrap mới nhất bây giờ là bootstrap 3. Chương II: Quy trình và lưu đồ thuật toán 2.1 Yêu cầu đề tài Thiết kế chương trình và giao điện để mọi người có thể gửi thư điện tử cho một hay nhiều người một cách dễ dàng cho nhau bao gồm gửi ảnh, file và các tệp . Các thư gửi được sẽ được thông báo là đã gửi thành công . 2.2 Các thư viện và class được sử dụng trong chương trình + Thư viện CGI • CGI (là viết tắt của Common Gateway Interface) là một tập hợp các chuẩn mà định nghĩa cách thông tin được trao đổi giữa Web Server và một Custom Script. • Trong ứng dụng của chúng em thì thư viện CGI dùng để lấy dữ liệu từ phía client về server để xử lí + Thư viện smtplib và email.mime 2 thư viện trên là những thư viện hỗ trợ cho việc gửi email. Email.mime dùng để tạo một đối tượng email Giao thức gửi thư đơn giản (SMTP) là một giao thức xử lý việ
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA ĐIỆN TỬ
BÁO CÁO ĐỀ TÀI
ĐỀ TÀI:
Tìm hiểu giao thức
và thiết kế ứng dụng gửi thư điện tử
Giảng viên hướng dẫn : TS Bồ Quốc Bảo
LỚP: Truyền thông mạng máy tính 1
Sinh viên thực hiện:
Nguyễn Thế Cường – 1141150052
Phùng Quang Huy – 1141150009
Nguyễn Khắc Mạnh – 1141150012
Vũ Anh Quyền – 1141150030
Mục Lục
Trang 2Lời cảm ơn 2
Chương I: Cơ Sở Lý Thuyết 3
1.1 Lý do chọn đề tài 3
1.2 Cơ sở lập trình 3
1.3 Giới thiệu về Python 3
1.4 Giới thiệu về Client/Server 4
1.5 Giới thiệu về TCP/IP 5
1.6 Giới thiệu về HTML và BOOTSTRAP 6
Chương II: Quy trình và lưu đồ thuật toán 6
2.1 Yêu cầu đề tài 6
2.2 Các thư viện và class được sử dụng trong chương trình 7
2.3 Quy trình 7
2.4 Lưu đồ thuật toán 8
Chương III: Viết chương trình 9
3.1 Phân tích chức năng 9
3.2 Thiết kế 10
Chương IV: Kết quả 13
4.1 Kết quả 13
4.2 Hướng dẫn sử dụng chương trình 14
Tài Liệu Tham Khảo 16
LỜI CẢM ƠN
Trang 3Trong thời gian làm bài tập lớn “Tìm hiểu giao thức và thiết kế ứng dụng gửi thư điện tử”, chúng em đã nhận được nhiều sự giúp đỡ, đóng góp ý kiến và chỉ bảo
nhiệt tình của thầy cô
Em xin gửi lời cảm ơn chân thành đến TS Bồ Quốc Bảo, giảng viên bộ môn Lập Trình Mạng – Trường Đại học Công Nghiệp Hà Nội người đã tận tình hướng dẫn, chỉ bảo chúng em trong suốt quá trình làm bài tập lớn
Em cũng xin chân thành cảm ơn các thầy cô giáo trong Khoa Điện Tử đã dạy dỗ cho em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp em
có được cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ em trong suốt quá trình học tập
Trong quá trình trình bày khó tránh khỏi sai sót, rất mong các thầy, cô bỏ qua Đồng thời do trình độ lý luận cũng như kinh nghiệm còn hạn chế nên bài báo cáo không thể tránh khỏi những thiếu sót, chúng em rất mong nhận được ý kiến đóng góp thầy, cô để em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt hơn trong những bài báo cáo sau
Chúng em xin chân thành cảm ơn!
Chương I: Cơ Sở Lý Thuyết
Trang 41.1 Lý do chọn đề tài
Hiện nay mạng Internet toàn cầu đã phát triển rất mạnh, đáp ứng rất tốt các nhu cầu về thông tin khoa học, giải trí, liên lạc, mua bán, quảng cáo v.v của con người Internet đã trở thành một thành phần không thể thiếu với cuộc sống hiện đại Về bản chất, Internet là một hệ thống mạng, liên kết các máy tính trên toàn thế giới lại theo những chuẩn chung của nó Với phạm vi nhỏ hơn nhưng cũng rất tương tự, có những mạng khác đó là WAN, LAN , mỗi mô hình đó đều được ứng dụng rất nhiều tiện ích khác nhau
Với mục tiêu để cho các sinh viên ra trường với một kiến thức tốt về mạng, về lập trình ứng dụng trên mạng để có thể làm được nhiều việc khác nhau, bộ môn Lập Trình Mạng ra đời Vì vậy, để áp dụng kiến thức đã học và muốn làm ra một ứng
dụng có thể áp dụng trong thực tế chúng em đã tìm được đề tài với tên “Tìm hiểu giao thức và thiết kế ứng dụng gửi thư điện tử
1.2 Cơ sở lập trình
Ứng dụng hoạt động dựa vào giao thức IP/TCP để truyền dữ liệu giữa hai máy khác nhau, cụ thể ở đây là một máy server để cung cấp dịch vụ và nhiều máy client
sử dụng dịch vụ do máy server cung cấp để cho người dùng sử dụng
Ngôn ngữ lập trình ở đây là ngôn ngữ Python (Phiên bản 3.7) vì Python là ngôn ngữ
có thể được sử dụng để viết ứng dụng chạy trên hầu hết các thiết bị (ở đây ta quan tâm tới thiết bị có hỗ trợ mạng) Trọng điểm, có mấy khả năng nổi trội do Python cung cấp mà ta có thể sử dụng là :
- Lập trình đa tuyến trình (Cùng 1 ứng dụng nhưng có thể chạy nhiều tiến trình song song với nhau thay vì cứ phải tiến trình này đợi tiến trình kia kết thúc mới có thể thực hiện)
- Python là một nền tảng có thể chạy trên nhiều loại thiết bị với nhiều hệ điều hành khác nhau nên có phạm vi ứng dụng rất rộng rãi
- Lập trình mạng Lớp quan trọng nhất mà ta sử dụng là lớp Socket và ServerSocket
1.3 Giới thiệu về Python
Python là một ngôn ngữ lập trình bậc cao, thông dịch, hướng đối tượng, đa mục đích và cũng là một ngôn ngữ lập trình động
Cú pháp của Python là khá dễ dàng để học và ngôn ngữ này cũng mạnh mẽ và linh hoạt không kém các ngôn ngữ khác trong việc phát triển các ứng dụng Python hỗ trợ mẫu đa lập trình, bao gồm lập trình hướng đối tượng, lập trình hàm và mệnh lệnh hoặc là các phong cách lập trình theo thủ tục
Python không chỉ làm việc trên lĩnh vực đặc biệt như lập trình web và đó là tại sao ngôn ngữ này là đa mục đích bởi vì nó có thể được sử dụng với web, enterprise, 3D CAD, …
Trang 5Bạn không cần sử dụng các kiểu dữ liệu để khai báo biến bởi vì kiểu của nó là động, vì thế bạn có thể viết a=15 để khai báo một giá trị nguyên trong một biến Với Python, việc phát triển ứng dụng và debug trở nên nhanh hơn bởi vì không cần đến bước biên dịch và chu trình edit-test-debug của Python là rất nhanh
Dưới đây là một số đặc điểm chính của Python:
⁺ Dễ dàng để sử dụng: Python là một ngôn ngữ bậc cao rất dễ dàng để sử dụng Python có một số lượng từ khóa ít hơn, cấu trúc của Python đơn giản hơn và
cú pháp của Python được định nghĩa khá rõ ràng, … Tất cả các điều này là Python thực sự trở thành một ngôn ngữ thân thiện với lập trình viên
⁺ Bạn có thể đọc code của Python khá dễ dàng Phần code của Python được định nghĩa khá rõ ràng và rành mạch
⁺ Python có một thư viện chuẩn khá rộng lớn Thư viện này dễ dàng tương thích và tích hợp với UNIX, Windows, và Macintosh
⁺ Python là một ngôn ngữ thông dịch Trình thông dịch thực thi code theo từng dòng (và bạn không cần phải biên dịch ra file chạy), điều này giúp cho quá trình debug trở nên dễ dàng hơn và đây cũng là yếu tố khá quan trọng giúp Python thu hút được nhiều người học và trở nên khá phổ biến
⁺ Python cũng là một ngôn ngữ lập trình hướng đối tượng Ngoài ra, Python còn hỗ trợ các phương thức lập trình theo hàm và theo cấu trúc
Ngoài các đặc điểm trên, Python còn khá nhiều đặc điểm khác như hỗ trợ lập trình GUI, mã nguồn mở, có thể tích hợp với các ngôn ngữ lập trình khác, …
1.3 Giới thiệu về Client/Server
Server được hiểu là máy chủ, thường là một hệ thống máy lớn, có bộ xử lý mạnh, có khả năng hoạt động đáng tin cậy, có khả năng lưu trữ dữ liệu lớn, nó chuyên quản lý tài nguyên (chủ yếu là cơ sở dữ liệu), cung cấp các dịch vụ mạng cho các máy khách (client) sử dụng Bình thường nó chạy suốt thời gian thực và sẵn sàng chấp nhận các yêu cầu kết nối và các yêu cầu dịch vụ khác từ máy khách
Client là máy khách, nó thường được sử dụng bởi người dùng cuối Nó hoạt động dựa trên việc sử dụng dịch vụ mà máy server cung cấp để thực hiện các công việc mà người dùng cuối mong muốn
Quy trình hoạt động của mô hình này lặp lại 2 quá trình như sau :
- Client gửi yêu cầu lên server
- Server nhận được yêu cầu thì sẻ xử lý thích hợp và trả lời lại client
Mô hình Client/Server
1.5 Giới thiệu về TCP/IP
Trang 6+) Giới thiệu về TCP
Giao thức TCP (Transmission Control Protocol) là giao thức hướng kết nối (connection-oriented), nó đòi hỏi thiết lập kết nối trước khi bắt đầu gửi dữ liệu
và kết thúc kết nối khi việc gửi dữ liệu hoàn tất theo đúng thứ tự: thiết lập kết nối, truyền dữ liệu và kết thúc kết nối
+) Giới thiệu về IP.
IP là địa chỉ của một máy tính trên mạng, dựa vào địa chỉ IP giao thức TCP
có thể truyền dữ liệu chính xác từ một máy này qua máy kia thông qua hệ thống mạng Ở trên mạng, một máy tính sẻ có một địa chỉ IP khác nhau, từ địa chỉ IP
có thể biết được máy nào trên mạng và ngược lại
+) Giới thiệu về cổng Port.
Với IP, giao thức TCP chỉ mới có thể truyền dữ liệu chính xác từ máy này qua máy kia mà chưa thể truyền chính xác đến từng ứng dụng trên máy được Hiện nay, các hệ thống máy thông thường hoạt động theo chế độ đa nhiệm, nghĩa là có nhiều ứng dụng chạy cùng một lúc và trong đó có thể có nhiều ứng dụng sử dụng dịch vụ mạng Yêu cầu, khi máy chủ A truyền dữ liệu cho một ứng dụng u trên máy B thì trên máy B phải đảm bảo dữ liệu đó phải đến được ứng dụng u, chứ không phải ứng dụng v
Để thực hiện điều đó thì máy chủ A khi truyền dữ liệu đi thì trên dữ liệu đó
có một thành phần thông tin giúp máy B xác định được đúng ứng dụng u Phần thông tin đó chính là địa chỉ port trên máy B, nó có thể hiểu là lỗ cắm ảo trên máy B mà ứng dụng u đã đăng ký để độc quyền sử dụng nhằn nhận dữ liệu từ máy chủ A
Trên thực tế, địa chỉ port là một số nguyên 2 byte có giá trị từ 0 đến 65535
Nó có đặc điểm :
- Giá trị từ 0 đến 1023 là các cổng phổ biến dành cho các ứng dụng thông dụng như http: 80, mail : 25, ftp : 21, Telnet 23 Các giá trị còn lại có thể được sử dụng linh hoạt
- Mỗi cổng trong mỗi thời điểm được sử dụng cho tối đa là 1 ứng dụng Ví dụ như một ứng dụng nào đó đã sử dụng cổng 55 thì ứng dụng khác không thể
sử dụng cổng 55 đó nữa chừng nào ứng dụng trước đó chưa có đóng cổng 55 lại
1.6 Giới thiệu về HTML và BOOTSTRAP
Trang 7+ HTML và BOOSTRAP HTML( Hyper Text Markup Language) ngôn ngữ lập trình siêu văn bản: là một trong những ngôn ngữ được sử dụng rộng rãi và phổ biến nhất với đa số những người muốn tạo lập trang web cá nhân hay tổ chức Có thể nói HTML chính là xương sống của một trang web BOOSTRAP: Bootstrap là một framework cho phép thiết kế website reponsive nhanh hơn và dễ dàng hơn + Bootstrap là bao gồm các HTML templates, CSS templates và Javascript tao
ra những cái cơ bản có sẵn như: typography, forms, buttons, tables, navigation, modals, image carousels và nhiều thứ khác Trong bootstrap có thêm các plugin Javascript trong nó Giúp cho việc thiết kế reponsive của bạn dễ dàng hơn và nhanh chóng hơn Lịch sử Bootstrap Bootstrap là dược phát triển bởi Mark Otto và Jacob Thornton tại Twitter Nó được xuất bản như là một mã nguồn mở vào tháng 8 năm
2011 trên GitHub Tính ra đến thời điểm mình viết bài viết này nó cũng đã phát triển được 3 năm rồi Bản bootstrap mới nhất bây giờ là bootstrap 3
Chương II: Quy trình và lưu đồ thuật toán 2.1 Yêu cầu đề tài
Thiết kế chương trình và giao điện để mọi người có thể gửi thư điện tử cho một
hay nhiều người một cách dễ dàng cho nhau bao gồm gửi ảnh, file và các tệp Các thư gửi được sẽ được thông báo là đã gửi thành công
2.2 Các thư viện và class được sử dụng trong chương trình
+ Thư viện CGI
CGI (là viết tắt của Common Gateway Interface) là một tập hợp các chuẩn
mà định nghĩa cách thông tin được trao đổi giữa Web Server và một Custom Script
Trong ứng dụng của chúng em thì thư viện CGI dùng để lấy dữ liệu từ phía client về server để xử lí
+ Thư viện smtplib và email.mime
2 thư viện trên là những thư viện hỗ trợ cho việc gửi email
Email.mime dùng để tạo một đối tượng email
Giao thức gửi thư đơn giản (SMTP) là một giao thức xử lý việc gửi e-mail và định tuyến e-mail giữa các máy chủ thư
Trang 8Python cung cấp mô-đun smtplib, định nghĩa một đối tượng phiên máy khách SMTP có thể được sử dụng để gửi thư đến bất kỳ máy Internet nào có trình nền trình nghe SMTP hoặc ESMTP
+ Thư viện os
Dùng để thao tác với file, thư mục
+ Thư viện http.server
Để sử dụng do_GET và do_PORT ta phải kế thừa từ class BaseHTTPRequestHandler
HTTPServer ((host, port), phương thức được kế thừa từ BaseHTTPRequestHandler) để khi chạy chương trình nó sẽ chạy trên địa chỉ với host và port đã cho
+ class encoders (import từ thư viện email)
Dùng để mã hóa các tệp tin mà người dùng muốn gửi sang dạng base64 sau đó được gửi tới người nhận
2.3 Quy trình
Bước 1 : Tìm hiểu về send mail sử dụng ngôn ngữ python
Bước 2 : Kết hợp send mail với Web Server
Bước 3 : Tạo giao diện người dùng ( HTML + Bootrap) và tích hợp vào bước
2.2 Lưu đồ thuật toán
Trang 9LƯU ĐỒ THUẬT TOÁN CỦA CHƯƠNG TRÌNH
Begin
Nhập dữ liệu cho the
input
Click SEND
Đúng kiểu dữ liệu input
Gửi dữ liệu vể server
Gửi thành công
Hiển thị
trang
sendfs.html
Hiển thị trang sendss.html
End
Trang 10Chương III: Viết chương trình 3.1 Phân tích chương trình
B1 : Để gửi mail sử dụng python chúng ta cần import thư viện hỗ trợ gửi mail (smtplib) và các class (MIMEText, MIMEMultipart, MIMEBase)
Đầu tiên là hàm create_email_message
create_email_message(from_address, to_address, subject, msg_body, files=None) Các tham số truyền vào :
- from_address : địa chỉ Email của người gửi
- to_address : địa chỉ Email của người nhận
- subject : tiêu đề của thư
- msg_body : nội dung thư
- files : gửi các file đính kèm (nếu có)
Đầu ra : là một đối tượng MIMEMultipart đã chứa các thông tin cần thiết để gửi mail
B2 : Kết hợp send mail với Web Server
class Serv(BaseHTTPRequestHandler):
def do_GET(self):
# code
def do_POST(self):
# code
Import class hỗ trợ cho Web Server (HTTPServer, BaseHTTPRequestHandler) từ thư viện http.server , Import cgi (hỗ trợ lấy data từ các input bên phía Client trả về)
- Tạo một class có tên Serv dùng để kế thừa các phương thức như do_GET, do_POST từ class BaseHTTPRequestHandler
- do_GET có nhiệm vụ trả ra các view về phía client để người dùng nhập dữ liệu và gửi về cho server
- do_POST sẽ nhận các dữ liệu từ client để xử lý thông qua phương thức FieldStorage của thư viện cgi
B3 : Tạo giao diện người dùng sử dụng HTML + Bootstrap
Trang 113.2 Thiết kế
from http.server import HTTPServer, BaseHTTPRequestHandler
import cgi
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os
file_dir = "D: \\ local"
host = 'localhost'
port = 8080
def create_email_message(from_address, to_address, subject, msg_body,
files=None, html=None):
msg = MIMEMultipart()
msg['From'] = from_address
msg['To'] = ",".join(to_address)
msg['Subject'] = subject
msg.attach(MIMEText(msg_body, 'plain'))
if html is not None:
msg.attach(MIMEText(html, 'html'))
if files is not None:
for file in files:
try:
attachment = open(file, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
file_name_sended = file.split(" \\ ")[-1]
part.add_header('Content-Disposition', "attachment; filename= " + file_name_sended)
msg.attach(part)
except Exception as ex:
print("could not attache file")
print(ex)
return msg
def handler_send_mail(self, form, lst_email, msg):
try:
Trang 12with smtplib.SMTP('smtp.gmail.com', port=587) as smtp_server:
smtp_server.ehlo()
smtp_server.starttls()
smtp_server.login(str(form['Email'].value), str(form['Password'].value)) smtp_server.sendmail(str(form['Email'].value), lst_email, msg.as_string()) print('send mail Success !!')
self.path = '/sendss.html'
file_to_open = open(self.path[1:]).read()
self.send_response(200)
self.wfile.write(bytes(file_to_open, 'utf-8'))
except Exception as e:
print(e)
self.path = '/sendfs.html'
file_to_open = open(self.path[1:]).read()
self.send_response(200)
self.wfile.write(bytes(file_to_open, 'utf-8'))
er = "<h3 style=text-align:center;color:red;"">Error : %s</h3>" % str(e) self.wfile.write(bytes(er, "UTF-8"))
print('send mail Fail !')
def send_multiple_files(fileitem, lst_file_name):
fn = os.path.basename(fileitem.filename)
if fileitem.filename:
open(file_dir + fn, 'wb').write(fileitem.file.read())
lst_file_name.append(file_dir + fn)
print(" ONE - FILE " + fn + " upload success ! \n ")
else:
print("upload fail file "+fn+" ! \n ")
class Serv(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.path = '/index.html'
try:
file_to_open = open(self.path[1:]).read()
self.send_response(200)
except:
print("exception !!")
file_to_open = "File not found"
self.send_response(404)
self.end_headers()
self.wfile.write(bytes(file_to_open, 'utf-8'))
def do_POST(self):
if self.path == '/index.html':
form = cgi.FieldStorage(
fp=self.rfile,