Các trường header điển hình

Một phần của tài liệu Đề tài xây dựng ứng dụng webmail (Trang 39)

a. Trường RETURN-PATH

Trường thông tin này được hệ thống truyền tải thư tín cuối cùng (là hệ thống cuối cùng phát thư cho người nhận của nó) thêm vào phần header của thư. Nó được dùng

để chứa đựng những thông tin về địa chỉ trả về (return-address) của người gửi ban đầu.

b. Trường RECEIVED

<Received> = “Received-From” “:” domain

Một bản sao của trường thông tin này sẽ được thêm vào bởi mỗi một hệ thống

truyền tải thông điệp mà thư được chuyển qua. Thông tin ở trường này rất hữu ích

trong trường hợp xảy ra lỗi trong truyền thông.

Trường thông tin này dùng để xác định tên của máy chủ gửi (sending host), máy

chủ nhận và thời gian nhận được.

c. Trường FORWARD

<Forward> = “Forward-Path” “:” route-addr

Trường thông tin này được hệ thống truyền tải thư tín cuối cùng (là hệ thống cuối cùng phát thư cho người nhận của nó) thêm vào phần header của thư. Nó được dùng

để chứa đựng những thông tin về địa chỉ của người nhận thư.

d. Trường FROM

<From> = “From” “:” mailbox

Trường thông tin này chứa đựng thông tin về người gửi thư (sender). Quá trình gửi thư cần ngầm định trường này là đơn. Nó xác minh địa chỉ máy tính, xác nhận bên gửi là một người, hệ thống hay một tiến trình. Nếu công việc này không được thực

hiện thì phải thay thế bằng trường Sender

e. Trường DATE

f. Trường TO

<To> = “To” “:” mailbox

Trường này chứa đựng thông tin về người nhận thư (recipient) chính thức.

g. Trường CC

<cc> = “cc” “:” address

Trường này chứa đựng thông tin về người nhận thư thứ hai, có nghĩa đồng gửi

(carbon copy-cc).

h. Trường BCC

<bcc> = “bcc” “:” address

Trường này chứa đựng thông tin thêm về người nhận thư (blind carbon copy- bcc). Nội dung của trường này không chứa đựng trong bản sao thư gửi cho người nhận

thứ đầu tiên và người nhận thư hai.

i. Trường MESSAGE-ID

<Message-ID> = “Message-ID” “:” msg-id

Trường này chứa đựng thông tin định danh duy nhất về bức thư được gửi đi. Tính

duy nhất của trường này được bảo đảm bởi hệ thống sinh ra nó. Trường này được dùng

để dành riêng cho máy tính và không cần thiết đối với người sử dụng.

j. Trường SUBJECT

<Subject> = “Subject” “:” text

Date: 26 Aug 76 1430 EDT

From: George Jones <Group@Host> Sender: Secy@SHOST

To: ”Al Neuman”@Mad-Host,

Sam.Irving@Other-Host Message-ID: <some.string@SHOST>

Subject: Test ...

1.5. PHÂN TÍCH GIAO THỨC SMTP (RFC 821)

1.5.1. Giới thiệu chung

Mục đích của giao thức SMTP (Simple Mail Transfer Protocol) là để truyền thư đáng tin cậy và có hiệu quả.

SMTP đọc lập về hệ thống con truyền thông đặc biệt và các yêu cầu chỉ tin cậy

theo kênh luồng dữ liệu tuần tự.

Đặc tính quan trọng của SMTP là khả năng chuyển tiếp thư tín qua các môi trường dịch vụ truyền thông (transport service). Dịch vụ truyền thông cung cấp một môi trường truyền thông liên quá trình (interprocess communication environment - IPCE). IPCE có thể là một mạng, nhiều mạng hay một tập hợp con của một mạng. Điều quan trọng để nhận thấy rằng các hệ thống truyền thông (IPCEs) không phải là việc truyền thông tương ứng một tới một (one-to-one) với các mạng. Một tiến trình có thể truyền thông qua lại trực tiếp với một tiến trình khác thông qua bất kỳ một IPCE đã

chuyển tiếp qua một tiến tiến trình được kết nối tới hai hay nhiều IPCEs. Đặc biệt hơn

nữa, thư tín có thể được chuyển tiếp giữa các máy chủ (hosts) trên các hệ thống truyền

thông khác nhau bởi một máy chủ trên cả hai hệ thống truyền thông.

Giao thức SMTP định nghĩa cách để chuyển giao thư tín trực tiếp giữa các máy

tính trên mạng. Nó có hai vai trò là gửi (sender-SMTP) và nhận (receiver-SMTP) thư. Thông thường, bên gửi thiết lập một liên kết TCP với bên nhận, và bên nhận sử dụng

cổng truyền thông số 25 để cung cấp dịch vụ thư tín điện tử.

Trong một phiên giao dịch thư tín, bên gửi và bên nhận trao đổi tuần tự các lệnh

và các thông tin phản hồi.

1.5.2. Mô hình hoạt động phiên giao dịch

SMTP được thiết kế dựa trên mô hình truyền thông sau: khi người sử dụng

(user) gửi một yêu cầu dịch vụ thư tín, trước tiên Sender-SMTP thành lập một kênh truyền thông hai chiều tới Receiver-SMTP. Receiver-SMTP có thể là đích cuối cùng hoặc là một trạm trung gian. Sau đó, các lệnh của SMTP được sinh ra từ phía Sender- SMTP và gửi tới Receiver-SMTP. Receiver-SMTP sẽ thao tác trên các lệnh đó và gửi

trả kết quả về phía Sender-SMTP.

SMTP cung cấp cơ chế chuyển thư trực tiếp từ máy chủ của người gửi đến máy

chủ của người nhận khi hai máy chủ được kết nối trên cùng một dịch vụ truyền thông hoặc qua một hoặc nhiều Server-SMTP chuyển tiếp khi các máy chủ nguồn và máy chủ đích không cùng được kết nối tới cùng một dịch vụ truyền thông.

File System SMTP Commands / Replies Sender SMTP Receiver SMTP and Mail File System User

Để thực hiện được khả năng chuyển tiếp thư tín trên mạng, cần phải cung cấp tên của máy chủ cũng như tên của hộp thư (mailbox) cuối cùng cần gửi tới cho SMTP

Server.

SMTP cung cấp một tập các lệnh cho phép các máy tính trên mạng có thể trao đổi thực tiếp các thông tin theo một chuẩn qui định. Nhờ vào tập lệnh này, các hệ

thống thư tín khác nhau có thể trao đổi dữ liệu thư được với nhau. Mỗi lệnh đều có

cùng chiều dài bốn kí tự, hầu hết đều có tham số kèm theo.

Các lệnh sử dụng trong việc gửi/nhận thư tín tuân theo một cú pháp khắt khe. Đó

là các thông tin phản hồi luôn ở dạng mã số kèm theo là các mô tả về kết quả thực hiện

lệnh. Các lệnh và mã phản hồi không phân biệt chữ hoa và chữ thường. Điều này có nghĩa là một lệnh hoặc một thông báo phản hồi có thể ở dạng in hoa, in thường hoặc

trong bất kì một kiểu kết hợp nào giữa in hoa và in thường.

Lưu ý rằng điều này là không đúng với tên của ”user mailbox”. Với một số máy

chủ, user name là phân biệt chữ hoa, thường và việc thực hiện các lệnh SMTP cần phải quan tâm để đảm bảo sự thực hiện đúng đắn trong trường hợp này. Tên của máy chủ

cũng không phân biệt chữ hoa, thường.

Các lệnh và thông tin phản hồi được xây dựng bởi các kí tự từ bộ mã ASCII. Khi dịch vụ giao vận cung cấp kênh truyền thông 8 bit, mỗi kí tự truyền đi sẽ chỉ sử dụng

Mỗi phiên giao dịch SMTP phải trải qua một số giai đoạn. Các giai đoạn đó được

thực hiện thông qua các thủ tục SMTP, kèm theo đó là các thông tin phản hồi:

 Thủ tục MAIL.  Thủ tục FORWARDING.  Các thủ tục MAILING và SENDING.  Các thủ tục OPENING và CLOSING.  Các mã trả lời của lệnh SMTP. 1.5.3. Thủ tục Mail

Để bắt đầu một phiên giao dịch thư tín thì cần phải thực hiện thủ tục MAIL. Nó

bao gồm 3 bước:

 Lệnh MAIL được gửi đi kèm theo là tham số về địa chỉ người gửi thư.

 Lệnh RCPT được gửi đi kèm theo là tham số về địa chỉ người nhận thư. Có thể

thực hiện nhiều lần lệnh này trong trường hợp muốn gửi thư cho nhiều người.

 Lệnh DATA được gửi đi để xác nhận bắt đầu gửi dữ liệu của thư. Dưới đây là phần chi tiết về 3 lệnh trên.

a. Lệnh MAIL FROM <reverse-path>

Tham số: là một xâu ký tự định danh mailbox của người gửi thư.

Hạn chế: Chỉ có thể thực hiện khi chưa thực hiện chính lệnh này.

 Chi tiết: Lệnh này dùng để xác nhận người gửi thư đồng thời thiết lập một

phiên giao dịch SMTP với Receiver-SMTP (Server). Nó đưa ra đường dẫn

<reverse-path> để sử dụng trong trường hợp phiên giao dịch không thực hiện thành công. Ngược lại, thông tin về người gửi sẽ được lưu lại.

250 OK

Trường hợp còn lại bị lỗi.

Ví dụ:

S: MAIL FROM: <Smith@Alpha.edu> R: 250 OK

b. Lệnh RCPT TO <forward-path>

Tham số: là một xâu ký tự định danh mailbox của người nhận thư.

Hạn chế: Chỉ có thể thực hiện khi đã định danh người gửi thư bằng lệnh

MAIL.

Chi tiết: Lệnh này dùng để xác nhận người nhận thư được chỉ định trong tham

số <forward-path>. Nếu Receiver-SMTP chấp nhận thì thông tin về người gửi

sẽ được lưu lại. Lệnh này có thể thực hiện nhiều lần để xác nhận nhiều người

nhận thư.

Thông tin phản hồi:

250 OK

Trường hợp còn lại bị lỗi.

Ví dụ

S: RCPT TO: <Jones@Beta.gov> R: 250 OK

S: rcpt to: <Green@Beta.gov> R: 550 No such user here

c. Lệnh DATA

Tham số: không.

Chi tiết: Lệnh này dùng để xác nhận bắt đầu việc gửi nội dung thư. Nếu SMTP

Receiver chấp nhận, nó sẽ tiến hành nhận và lưu trữ tất cả các dòng văn bản được gửi đến. Để kết thúc việc gửi dữ liệu, SMTP Sender cần gửi một dòng chỉ chứa một dấu chấm ”.”. Lưu ý rằng phần dữ liệu sau lệnh DATA bao gồm

toàn bộ phần header của thư (như các trường Date, Subject, CC, From, ...) cũng như nội dung thư.

Thông tin phản hồi:

250 OK

Ví dụ:

S: DATA

R: 354 Start mail input; end with <CRLF>.<CRLF> S:. . . Sends body of mail message . . .

S: <CR><LF>.<CR><LF> R: 250 OK

S: QUIT

S: 221 Beta.gov Service Closing Transmission Channel

Sau đây là một ví dụ minh hoạ cho một phiên giao dịch thư tín SMTP. Phần thông tin phía Server được bắt đầu bằng R: và mã số, tiếp sau là thông tin. Phần phía

Client là các lệnh thực thi của SMTP bắt đầu bằng S:. Ta sẽ sử dụng dịch vụ Telnet để

kích hoạt dịch vụ thư tín trên cổng 25 (SMTP).

d. Ví dụ về một phiên giao dịch SMTP

R: 220 BERKELEY.ARPA Simple Mail Transfer Service Ready S: HELO USC-ISIF.ARPA

R: 250 BERKELEY.ARPA

S: RCPT TO: <fabry@BERKELEY.ARPA> R: 250 OK

S: RCPT TO: <eric@BERKELEY.ARPA>

R: 552 Recipient storage full, try again in another transaction S: DATA

R: 354 Start mail input; end with <CRLF>.<CRLF> S: Blah blah blah...

S: ...etc. etc. etc. S: .

R: 250 OK

S: MAIL FROM: <Postel@USC-ISIF.ARPA> R: 250 OK

S: RCPT TO: <eric@BERKELEY.ARPA> R: 250 OK

S: DATA

R: 354 Start mail input; end with <CRLF>.<CRLF> S: Blah blah blah...

S: ...etc. etc. etc. S: .

R: 250 OK S: QUIT

R: 221 BERKELEY.ARPA Service closing transmission channel

Trong một số trường hợp địa chỉ trong tham số <forward-path> bị sai, nhưng

SMTP Receiver lại biết chính xác địa chỉ đích thì các thông tin phản hồi có thể được

sử dụng để cho phép người gửi xác nhận lại địa chỉ đúng.

251 User not local; will forward to <forward-path>

Thông tin phản hồi này chỉ ra rằng mailbox của người nhận thuộc một máy chủ

(host) khác. Như vậy, SMTP Receiver sẽ chỉ ra <forward-path> chính xác để sử dụng

và nó sẽ chịu trách nhiệm gửi thư này.

551 User not local; please try <forward-path>

Thông tin phản hồi này chỉ ra rằng, SMTP Receiver biết được mailbox của người nhận thuộc một máy chủ khác. Nó sẽ đưa ra địa chỉ chính xác để sử dụng nhưng trong trường hợp này nó không thực hiện việc gửi thư đi. Chính vì vậy, người gửi cần

phải xác nhận lại các thông tin cho chính xác theo thông tin phản hồi của SMTP

Receiver hoặc trả lại thông báo lỗi cho người gửi ban đầu. Sau đây là ví dụ về cách sử dụng thủ tục này:

S: RCPT TO:<Postel@USC-ISI.ARPA> R: 251 User not local;

will forward to <Postel@USC-ISIF.ARPA> or

S: RCPT TO:<Paul@USC-ISIB.ARPA> R: 551 User not local;

please try <Mockapetris@USC-ISIF.ARPA>

SMTP chủ yếu cung cấp các chức năng phát thư đến mailbox của người sử dụng.

Tuy nhiên, nó cũng có một số các chức năng thực hiện việc chuyển thư đến terminal

của người sử dụng.

Việc phát thư đến mailbox của người sử dụng được gọi là ”mailing”, còn việc phát thư đến terminal được gọi là ”sending”. Dịch vụ sending là phần mở rộng của một

hệ thống thư tín điện tử.

Có ba dạng câu lệnh được định nghĩa để hỗ trợ cho các tùy chọn sending. Các

câu lệnh này được dùng trong các phiên giao dịch SMTP thay thế cho câu lệnh MAIL

và báo cho Receiver-SMTP biết ý nghĩa đặc biệt của phiên giao dịch này.

a. Lệnh SEND FROM <reverse-path>

Tham số: địa chỉ terminal của người nhận.

Chi tiết: Lệnh này yêu cầu dữ liệu của thư được phân phát tới terminal của

người sử dụng. Nếu người sử dụng chưa kích hoạt (hoặc không chấp nhận

kiểu giao dịch này) thì Receiver-SMTP sẽ gửi trả mã 450. Phiên giao dịch là thành công nếu thư được chuyển đến terminal của người sử dụng.

Thông tin phản hồi:

450 OK

b. Lệnh SOML FROM <reverse-path>

Tham số: địa chỉ terminal của người nhận.

Chi tiết: Lệnh này (viết tắt của chữ Send Or MaiL) yêu cầu dữ liệu của thư

được phân phát tới terminal của người sử dụng trong trường hợp người sử

dụng kích hoạt (và chấp nhận kiểu giao dịch này). Trong trường hợp ngược

lại, nghĩa là người sử dụng chưa kích hoạt thì dữ liệu của thư sẽ được chuyển đến mailbox của người nhận. Phiên giao dịch thành công nếu thư được chuyển đến terminal của người sử dụng.

Chi tiết: Lệnh này (viết tắt của chữ Send And MaiL) yêu cầu dữ liệu của thư được phân phát tới terminal của người sử dụng trong trường hợp người sử

dụng kích hoạt (và chấp nhận kiểu giao dịch này). Trong bất cứ trường hợp

nào thì dữ liệu của thư cũng sẽ được chuyển đến mailbox của người nhận.

Phiên giao dịch thành công nếu thư được chuyển đến mailbox của người sử

dụng.

1.5.6. Các thủ tục Opening và Closing

Khi một phiên giao dịch thư tín được mở, cần phải có sự trao đổi thông tin giữa

các máy chủ (host) để đảm bảo sự chính xác trong giao dịch. Có hai lệnh để thực hiện

việc đóng/mở một phiên giao dịch.

a. HELO <domain>

Tham số: tên domain của máy chủ thực hiện việc gửi thư (có thể không có).

Chi tiết: Lệnh này dùng để xác nhận domain máy chủ SMTP Sender.

Thông tin phản hồi:

250 <domain>

Ví dụ:

R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready S: HELO USC-ISIF.ARPA

R: 250 BBN-UNIX.ARPA

b. QUIT

Tham số: không.

250 CRLF

Ví dụ:

S: QUIT

R: 221 BBN-UNIX.ARPA Service closing transmission channel

1.5.7. Mã trả lời của các câu lệnh SMTP

Trong một phiên giao dịch SMTP, phía SMTP Sender gửi các lệnh yêu cầu còn phía SMTP Receiver sẽ gửi trả các thông tin phản hồi và các mã phản hồi.

Để đảm bảo tính thống nhất truyền thông trong quá trình truyền thư, đồng thời để đảm bảo phía SMTP Sender luôn biết được chính xác trạng thái của SMTP Receiver,

mọi câu lệnh yêu cầu đều phải được trả lời bằng các mã thông tin phản hồi chính xác.

Bảng Mã thông tin phản hồi của SMTP

Mã thông tin phản hồi Thông tin kèm theo

500 Syntax error or Command unregconized

501 Syntax error in parameters or arguments

503 Bad sequence of command

504 Command parameter not implement

211 System status or System help reply

214 Help message

221 Service closing transmission channel

421 Service not available, closing transmission channel

250 OK

251 User not local; will forward to <forward-path>

450 Mailbox unavailable (not found or no access)

551 User not local; please try <forward-path>

452 Insufficent system storage

552 Request mail action aborted

553 Mailbox name not allow (mailbox syntax incorrect)

354 Start mail input, end with <CRLF>.<CRLF>

554 Transaction failed

Một mã thông tin phản hồi là một số có 3 chữ số và tiếp theo là một chuỗi văn

bản mô tả về mã đó. Bảng trên đây sẽ trình bày chi tiết các thông tin phản hồi:

Truyền thông giữa Sender-SMTP và Receiver-SMTP được coi như một cuộc hội

thoại, được điều khiển bởi Sender-SMTP. Như vậy, Sender-SMTP đưa ra một lệnh

yêu cầu và Receiver- SMTP sẽ trả lại một mã thông tin phản hồi. Sau khi Sender-

Một phần của tài liệu Đề tài xây dựng ứng dụng webmail (Trang 39)