Chương 1: Giới thiệu tổng quan về SMTP, POP3, IMAP 1.1 Kiến trúc và hoạt động của thư điện tử Muốn gửi thư điện tử người gửi cần phải có một account trên một máy chủ thư. Một máy chủ có thể có một hoặc nhiều account. Mỗi account đều được mang một tên khác nhau (user). Mỗi account đều có một hộp thư riêng (mailbox) cho account đó.
Thông thường thì tên của hộp thư sẽ giống như tên của account. Ngoài ra máy vi tính đó phải được nối trực tiếp hoặc gián tiếp với hệ thống Internet nếu muốn gửi nhận thư điện tử toàn cầu. Người sử dụng máy vi tính tại nhà vẫn có thể gửi nhận thư điện tử bằng cách kết nối máy vi tính của họ với một máy vi tính khác bằng modem. Có một số nơi cấp phát account thư điện tử miễn phí cho các máy vi tính tại nhà có thể dùng modem để kết nối với máy vi tính đó để chuyển nhận thư điện tử như hotmail.com hoặc yahoo.
Ngoài ra, còn có rất nhiều cơ quan thương mại cung cấp dịch vụ hoặc account cho máy vi tính tại nhà nhưng người sử dụng phải trả tiền dịch vụ hàng tháng. Đường đi của thư Thư điện tử chuyển từ máy máy chủ thư điện tử này (mail server) tới máy chủ tư điện tử khác trên internet. Khi thư được chuyển đến đích thì nó được chứa tại hộp thư điện tử tại máy chủ thư điện tử cho đến khi nó được nhận bởi người nhận. Toàn bộ quá trình xử lý chỉ xảy ra trong vài phút, do đó nó cho phép nhanh chóng liên lạc với mọi người trên toàn thế giới một cánh nhanh chóng tại bất cứ thời điểm nào dù ngày hay đêm.
Gửi, nhận và chuyển thư Để nhận được thư điện tử bạn cần phải có một tài khoản (account) thư điện tử. Một trong những thuận lợi hơn với thư thông thường là chúng ta có thể nhận thư điện tử từ bất cứ đâu. Chỉ cần kết nối vào Server thư điện tử để lấy thư về máy tính của mình. Để gửi được thư cần phải có một kết nối vào internet và truy nhập vào máy chủ thư điện tử để chuyển thư đi.
Thủ tục tiêu chuẩn được sử dụng để gửi thư là SMTP (Simple Mail Transfer Protocol). Nó được kết hợp với thủ tục POP (Post Office Protocol) và IMAP để lấy thư. Mô hình của hệ thống máy chủ thư điện tử: Với một hệ thống máy chủ thư điện tử cung cấp cho một đơn vị vừa và nhỏ thì toàn bộ hệ thống thường được tích hợp vào một máy chủ. Và máy chủ đó vừa làm chức năng nhận, gửi thư, lưu trữ hộp thư và kiểm soát thư vào ra.
- Sử dụng thủ tục SMTP để chuyển, nhận thư giữa các máy chủ thư với nhau. - Sử dụng thủ tục SMTP để cho phép mail client gửi thư lên máy chủ. - Sử dụng thủ tục POP hoặc IMAP đển mail client nhận thư về.2 Giới thiệu về giao thúc SMTP Giới thiệu Mục tiêu của SMTP là để chuyển truyền email tin cậy và hiệu quả. SMTP không phụ thuộc hệ thống con và chỉ yêu cầu 1 kênh truyền dữ liệu đáng tin cậy.
Một tính năng quan trọng của SMTP của nó là khả năng relay(chuyển tiếp) mail qua môi trường dịch vụ truyền thông. Một dịch vụ truyền thông cung cấp một môi trường truyền thông giữa các tiến trình (IPCE). Một IPCE có thể bao gồm một mạng, một số mạng, hay một hệ thống mạng con. Có thể hiểu IPCE là môi trường cho phép một tiến trình có thể giao tiếp qua lại trực tiếp với một tiến trình khác.
Điều quan trọng là các IPCE không chỉ có quan hệ 1-1 trên các mạng. Một tiến trình có thể giao tiếp trực tiếp với nhiều tiến trình khác thông qua IPCE. Mail là một ứng dụng của truyền thông liên tiến trình. Mail có thể được truyền tải giữa các tiến trình trên nhiều IPCEs khác nhau 1 tiến trình được kết nối giữa hai (hay nhiều) IPCE.
Cụ thể hơn, email có thể được chuyển tiếp (relay) qua nhiều Host trên các hệ thống chuyển tải khác nhau qua các Host trung gian. Mô hình SMTP Các SMTP được thiết kế dựa trên các mô hình truyền thông sau: - Khi có các yêu cầu mail từ người sử dụng, phía SMTP-send sẽ thiết lập một kênh truyền hai chiều tới phía SMTP-receiver - SMTP-receiver ở đây có thể là đích đến cuối cùng hay chỉ là một địa chỉ trung gian. - SMTP-send gửi SMTP commands đến SMTP-receiver. SMTP-receiver đáp ứng SMTP commands bằng cách gửi trả cho SMTP-send các SMPT replies tương ứng Một khi kênh truyền đã được thiết lập, SMTP-sender sẽ gửi một MAIL command cho biết người gửi.
Nếu SMTP-receiver chấp nhận mail nó sẽ đáp ứng 1 OK reply. Sau đó SMTP-sender lại gửi một RCPT command cho biết là người sẽ nhận mail, nếu SMTP- receiver chấp nhận mail này cho người nhận đó thì nó reply lại là OK, nếu không nó sẽ reply lại là mail này bị loại bỏ. Nếu SMTP-receiver reply là OK thì SMTP-sender sẽ gửi dữ liệu mail tới phía nhận và kết thúc bằng một command đặc biệt nào đó. Nếu SMTP-receiver xử lý thành công dữ liệu mail này thì nó sẽ reply lại là OK.
- SMTP cung cấp nhiều kĩ thuật cách khác nhau để gửi mail: - Truyền thẳng khi host phía gửi và host phía nhận được kết nối tới cùng một dịch vụ truyền tải. Thông qua các máy chủ SMTP khi host phía gửi và host phía nhận không được kết nối tới cùng một dịch vụ truyền tải. Đối số cho mail command là 1 tuyến ngược (reverse-path), trong đó ghi rõ mail được gửi từ ai. Đối số cho RCPT command là một tuyến chuyển tiếp (forward-path), chỉ ra mail được gửi cho ai.
Tuyến chuyển tiếp là 1 tuyến nguồn, trong khi các tuyến ngược là 1 tuyến quay trở về (có thể được dùng để trả lại một thông báo cho người gửi khi một lỗi xảy ra với một message chuyển tiếp). Khi cùng một message được gửi đến nhiều người nhận, SMTP khuyến khích việc truyền tải chỉ có một bản sao của các dữ liệu cho tất cả các người nhận tại cùng một máy chủ đích. Các mail command và reply có một cú pháp cứng nhắc. Các reply cũng có 1 mã số.
Trong phần sau đây, mà xuất hiện các ví dụ thực tế sử dụng các mail command và reply, các danh sách đầy đủ các command và reply. Các command và reply không phải là trường hợp nhạy cảm. Tức là, một từ command hoặc reply có thể là chữ thường, hoa, hay hỗn hợp. Lưu ý rằng điều này là không đúng với tên người sử dụng hộp thư.
Vì đối với một số máy tên người sử dụng là trường hợp nhạy cảm, và các triển khai SMTP phải đưa trường hợp này ra để bảo vệ các trường hợp tên người dùng giống với các tham số trong mailbox. Tên máy chủ không phải là trường hợp nhạy cảm. Các command và reply là gồm các kí tự ASCII. Khi dịch vụ chuyển thư cung cấp 1 kênh truyền 1 byte 8bit (octet), mỗi kí tự 7 bit được đưa vào các bit thấp của octet, bit cao của octet xóa về 0.
Khi cụ thể hóa các dạng chung của mỗi lệnh và reply, 1 đối số sẽ được biểu diễn bằng 1 biến(hay 1 hằng) trong ngôn ngữ meta, chẳng hạn, “<string>” hoặc “<reverse-path>” Khi xác định các hình thức chung của một lệnh hoặc trả lời, một đối số. Ở đây các dấu ‘<’ cho biết đây là biến trong ngôn ngữ meta. MIME và SMTP MIME (Multipurpose Internet Mail Extensions) cung cấp thêm khả năng cho SMTP và cho phép các file có dạng mã hoá multimedia đi kèm với bức điện SMTP chuẩn. MIME sử dụng bảng mã Base64 để chuyển các file dạng phức tạp sang mã ASCII để chuyển đi.
MIME là một tiêu chuẩn mới như nó hiện đã được hỗ trợ bởi hầu hết các ứng dụng, và bạn phải thay đổi nếu chương trình thư điện tử của bạn không có hỗ trợ MIME. MIME được quy chuẩn trong các tiêu chuẩn RFC 2045-2049. S/MIME Là một chuẩn mới của MIME cho phép hỗ trợ cho các bức điện được mã hoá. S/MIME dựa trên kỹ thuật mã công cộng RSA và giúp cho bức điện không bị xem trộm.
Lệnh của SMTP SMTP sử dụng các câu lệnh ngắn để điều khiển bức điện. Bảng ở dưới là danh sách các lệnh của SMTP. Các lệnh của SMTP được xác định trong tiêu chuẩn RFC 821. Sử dụng để xác định người gửi điện.
Lệnh này này đi HELO kèm với tên của host gửi điện. Trong ESTMP (extended protocol), thì lệnh này sẽ là EHLO. Khởi tạo một giao dịch gửi thư. Nó kết hợp "from" để xác MAIL định người gửi thư.
RCPT Xác định người nhận thư. Thông báo bất đầu nội dung thực sự của bức điện (phần DATA thân của thư). Dữ liệu được mã thành dạng mã 128-bit ASCII và nó được kết RSET Huỷ bỏ giao dịch thư VRFY Sử dụng để xác thực người nhận thư. NOOP Nó là lệnh "no operation" xác định không thực hiện hành động gì QUIT Thoát khỏi tiến trình để kết thúc SEND Cho host nhận biết rằng thư còn phải gửi đến đầu cuối khác.
SMTP mở rộng (Extended SMTP) SMTP thì được cải thiệt để ngày càng đáp ứng nhu cầu cao của người dùng và là một thủ tục ngày càng có ích. Như dù sao cũng cần có sự mở rộng tiêu chuẩn SMTP và chuẩn RFC 1869 ra đời để bổ sung cho SMTP. Nó không chỉ mở rộng mà còn cung cấp thêm các tính năng cần thiết cho các lệnh có sẵn. Ví dụ: lệnh SIZE là lệnh mở rộng cho phép nhận giới hạn độ lớn của bức điện đến.
Không có ESMTP thì sẽ không giới hạn được độ lớn của bức thư. Khi hệ thống kết nối với một MTA, nó sẽ sử dụng khởi tạo thì ESMTP thay HELO bằng EHLO. Nếu MTA có hỗ trợ SMTP mở rộng (ESMTP) thì nó sẽ trả lời với một danh sách các lệnh mà nó sẽ hỗ trợ. Nếu không nó sẽ trả lời với mã lệnh sai (500 Command not recognized) và host gửi sẽ quay trở về sử dụng SMTP.
Sau đây là một tiến trình ESMTP: 220 esmtpdomain.com Server ESMTP Sendmail 8.8; Thu, 22 Jul 1999 09:43:01 EHLO host.com Hello host, pleased to meet you 250-EXPN 250-VERB 250-8BITMIME 250-SIZE 250-DSN 250-ONEX 250-ETRN 250-XUSR 250 HELP QUIT 221 Goodbye host.com SMTP Headers Có thể lấy được rất nhiều thông tin có ích bằng cách kiểm tra phần header của thư. Không chỉ xem được bức điện từ đâu đến, chủ đề của thư, ngày gửi và những người nhận. Bạn còn có thể xem được những điểm mà bức điện đã đi qua trước khi đến được hộp thư của bạn. Tiêu chuẩn RFC 822 qu y định header chứa những gì.