Simple Mail Transfer
Protocol (SMTP) là giao thức truyền tải e-mail qua mạng, SMTP cho phép chuyển
thông điệp mail từ mail server của người gửi đến mail server của người nhận. Thông
điệp mail ở định dạng ASCII 7 bit. SMTP được định nghĩa trong RFC 821, điều
chỉnh trong RFC 1123 và mở rộng trong RFC 2821 với tên gọi ESMTP (Extended
SMTP). SMTP sử dụng cổng 25 trên nền TCP.
Trong RFC 822 định nghĩa tiêu chuẩn của định dạng
thông điệp maill, gồm 2 phần: dòng tiêu đề (header) và phần thân (body).
-
Mỗi tiêu đề có
một dòng tiêu đề from,to, subject và
một số dòng tiêu đề khác từ lệnh SMTP. Sau tiêu đề là một dòng trống.
-
Phần thân chứa
các thông điệp định dạng ở mã ASCII. Mỗi dòng thông thông điệp được kết thúc
bằng một dấu chấm.
Một hệ thống e-mail
có ba thành phần chính: user agents, mail server và giao thức SMTP.
- User
agentcho phép người dùng đọc, trả lời, chuyển tiếp, lưu và soạn thông điệp mail.
User agent là những phần mềm gửi mail như Microsoft’s Outlook, Apple Mail
(những phần mềm này sử dụng giao diện GUI).
- Mail
server là thành phần cốt lỗi trong hạ tầng hệ thống e-mail. Khi người dùng soạn
xong thông điệp thì user agent sẽ gửi thông điệp đến mail server và thông điệp
được đặt trong hàng đợi (message queue), sau đó sẽ gửi đến mail server của
người dùng khác và được lưu tại mailbox.
- Giao
thức SMTP đảm nhiệm việc truyền tải thông điệp từ mail server của người gửi đến
mail server của người nhận. SMTP thiết lập kết nối TCP trên cổng 25.
Hình 1. Hệ thống email
Phương thức hoạt động của SMTP:
-
Để mô tả hoạt động cơ bản của giao thức SMTP một
cách dễ hiểu ta xem xét một hoạt cảnh phổ biến “An gửi thông điệp cho Bình” ở
hình
Hình 2. Hoạt cảnh gửi email của An và Bình
Ø
Bước 1: An khởi động useragent của mình, cung
cấp địa chỉ e-mail của Bình, soạn thông điệp và chỉ thị user agent gửi mail.
Ø
Bước 2: User agent của An gửi thông điệp đến
mail server của An và thông điệp được đặt trong hàng đợi.
Ø
Bước 3: SNMP client chạy trên mail server của An
phát hiện ra thông điệp trong hàng đợi và tiến hành mở kết nối TCP đến SMTP
server chạy trên mail server của Bình.
Ø
Bước 4: Sau khi thực hiện bắt tay chào hỏi
(handshaking), SMTP client của An sẽ gửi thông điệp của An đến kết nối TCP.
Ø
Bước 5: Tại mail server của Bình, SMTP server
nhận được thông điệp và lưu lại trên mailbox.
Ø
Bước 6: Khi Bình khởi động user agent của mình
thì sẽ thấy mail của An trong mailbox.
-
Lưu ý: SMTP không sử dụng các mail server trung
gian để gửi thư, mà chỉ sử dụng một kết nối TCP trực tiếp giữa hai mail server
ngay cả khi hai mail server cách nhau một khoản cách rất xa. Ví dụ: mail server
của An ở thành phố Hồ Chí Minh và mail server của Bình ởMát-xcơ-va (thủ đô của
Nga) thì chỉ có các kết nối TCP trực tiếp giữa hai mail server. Khi mail server
của Bình bận, thì thông điệp sẽ được lưu trong hàng đợi của mail server An và
chờ đợi để gửi lại tin nhắn.
SMTP
truyền thông điệp mail qua ba pha: handshaking (chào hỏi), truyền thông điệp,
đóng kết nối.
-
Pha handshaking: đầu tiên, SMTP client (chạy
trên mail server bên gửi) thiết lập kết nối TCP trên cổng 25 tới SMTP server
(chạy trên mail server bên nhận). Nếu SMTP server gặp sự cố thì client sẽ cố
gắng kết nối lại. Khi kết nối được thiết lập, SMTP server và SMTP client thực
hiện một số chào hỏi, SMTP client sẽ cho biết địa chỉ email của người gửi và
địa chỉ email của người nhận.
-
Pha truyền thông điệp: sau cuộc chào hỏi, SMTP
client tiến hành gửi thông điệp trên đường truyền tin cậy TCP.
-
Pha đóng kết nối: Nếu client muốn gửi tiếp tục
gửi thông điệp thì lặp lại quá trình trên trong cùng kết nối TCP, còn không thì
chỉ thị TCP đóng kết nối
Ví dụ về hoạt
cảnh của client (C) là An (với tải khoản anhutech@gmail.com) gửi thông điệp "Hi
Binh”,“How are you?” từ mail server gmail.com đến mail server yahoo.com của
server (S) là Bình (với tài khoản binhmoskva@yahoo.com)
S: 220 yahoo.com
C: HELO gmail.com
S: 250 Hello gmail.com, pleased to meet you
C: MAIL FROM: <anhutech@gmail.com>
S: 250 an@gmail.com... Sender ok
C: RCPT TO: <binhmoskva@yahoo.com>
S: 250 binh123@yahoo.com ... Recipient ok
C: DATA
S: 354 Enter mail, end with "." on
a line by itself
C: Hi Binh
C: How are you?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 yahoo.com closing connection
Client sử dụng
các lệnh: HELO (viết tắt cho HELLO), MAIL FROM, RCPT TO, DATA, và QUIT với ý
nghĩa giống tên của chúng. Server trả lời cho mỗi lệnh bằng một mã số trả lời
và một số (tùy chọn) giải thích bằng tiếng Anh. Mỗi thông điệp được client gửi
đi bắt đầu bằng lệnh HELO gmail.com và chỉ đưa ra QUIT sau khi tất cả các thông
điệp đã được gửi và server thực hiện đóng kết nối TCP
Khi cần thực hiện
cuộc thoại trực tiếp đến SMTP server, client có thể thực hiện lệnh
“telnet<serverName> 25”. Sau khi làm điều này client sẽ nhận được trả lời
220 của server. Client có thể thực hiện telnet đến mail server của mình hay các
mail server khác.
0 comments:
Post a Comment