IV. ĐẶC TẢ SMTP
A. Những lệnh SMTP (Commands SMTP) 1 Ngữ nghĩa lệnh :
1. Ngữ nghĩa lệnh :
Những lệnh SMTP định nghĩa sự truyền mail hay chức năng của hệ thống mail được yêu cầu bởi user. Những lệnh SMTP là những chuỗi ký tự kết thúc bằng
<CRLF>. Bản thân mã lệnh là những ký tự chữ kết thúc bởi chuỗi <SP> nếu cĩ
những tham số theo sau và <CRLF> khác. Cú pháp của những mailbox phải tuân
theo những thoả hiệp phía người nhận. Những reply SMTP được bàn đến trong phần
B.
Một sự giao dịch mail bao gồm vài đối tượng dữ liệu được giao tiếp khi
những đối số cho các lệnh khác nhau. Reverse-path là đối số của lệnh MAIL.
Forward-path là đối số của lệnh RCPT. Và mail data là đối số của lệnh DATA. Ba đối số và những đối tượng dữ liệu được duy trì cho đến khi xác nhận truyền xong
bởi sự chỉ định kết thúc của mail data thì thật sự kết thúc giao dịch. Mơ hình cho nĩ là những buffer riêng biệt được cung cấp để giữ kiểu của đối tượng dữ liệu. Một số
lệnh đặc trưng sinh ra thơng tin được gắn vào một buffer đặc trưng, hay làm cho
một hay nhiều buffer bị xố.
HELLO (HELO) : Lệnh này dùng định danh Sender-SMTP đến Receiver-
SMTP. Trường đối số chứa host name của Sender-SMTP. Receiver-SMTP định danh nĩ đến Sender-SMTP trong trả lời bắt tay cho việc kết nối, và trong câu trả lời
cho lệnh này.Lệnh này và một reply OK để xác nhận cả hai Sender-SMTP và Receiver-SMTP đang trong tình trạng khởi động, điều đĩ là: Khơng cĩ một giao
dịch mail nào đang tiến hành và tất cả các bảng trạng thái và buffer đã được xố.
MAIL : Lệnh này được dùng khởi tạo một giao dịch mail trong đĩ mail data được phân phối đến một hay nhiều mailbox. Feild đối số chứa một reverse-path. Reverse-path bao gồm một danh sách các host tuỳ ý và mailbox của user. Khi danh sách các host hồn tất nĩ là một lộ trình nguồn “trở về” và chỉ định mail đĩ được
chia ca thơng qua mỗi host trên danh sách đĩ (host đầu tiên trong list là host chia ca gần nhất). List này được dùng như một lộ trình nguồn để trả về người gửi những
thơng báo khơng thể phân phát. Tại mỗi host chia ca nĩ thêm phần định danh của
bản thân vào chổ bắt đầu của list đĩ và phải dùng tên của nĩ được biết trong IPCE nơi nĩ sẽ chia ca mail đến đĩ, đúng hơn là ICPE cĩ mail đến từ đĩ (nếu chúng khác
nhau). Trong một số loại message thơng báo lỗi (ví dụ thơng báo mail khơng thể
phân phát) reverse-path cĩ thể là null.
RECIPIENT (RCPT) : Lệnh này dùng định danh một người nhận mail riêng lẻ,
nhiều recipient được đặc tả bằng nhiều lệnh này. Forward-path bao gồm một danh sách các host tuỳ ý và một mailbox đích được yêu cầu. Khi danh sách host đĩ hoàn tất. Nĩ là một lộ trình nguồn và chỉ định mail phải được chia ca đến host kế tiếp trên
list đĩ. Nếu Receiver-SMTP khơng thực thi chức năng chia ca nĩ cĩ thể dùng được
reply này và sẽ cho một unknown local user (550). Khi mail được chia ca, host chia
ca phải chuyển phần định danh nĩ từ chổ bắt đầu forward-path và đặt vào chổ bắt đầu của reverse-path. Khi mail trải ra tới đích cuối cùng (forward-path chỉ chứa
một mailbox đích) receiver-SMTP chèn nĩ vào trong mailbox đích trong sự đồng ý
với thoả hiệp host mail của nĩ.
Ví dụ mail được nhận tại host chia ca A với những đối số:
FROM:<USERX@HOSTY.ARPA>
TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA> Sẽ được chia ca đến host B với đối số
FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA> TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.
Lệnh này sinh ra đối số forward-path của nĩ được gắn vào forward-path buffer. DATA(DATA) : Receiver-SMTP xử lý những dịng theo sau lệnh này khi mail từ Sender-SMTP đến. Nĩ làm cho mail data từ lệnh này được ghi vào data buffer. Mail data này cĩ thể chứa những ký tự của 128 mã ACSII. Data mail được kết thúc
bằng một dịng chỉ chứa một dấu chấm. Đĩ là một dãy ký tự "<CRLF>. <CRLF>"
(xem phần 4.D.2). Và đĩ là chỉ định kết thúc của mail data.
Sự chỉ định kết thúc một chuổi địi hỏi người nhận phải xử lý việc lưu trữ
những thơng tin giao dịch mail ngay lập tức. Quá trình xử lý này dùng thơng tin trong reverse-path buffer, forward-path buffer, mail data buffer, và khi hồn tất
lệnh này những buffer đĩ sẽ bị xĩa, những message được chia ca sẽ cĩ nhiều dịng
đánh dấu thời gian.
Khi một Receiver-SMTP tạo ra “final delivery” của một message nĩ chèn vào chổ bắt đầu của mail data một dịng return-path. Dịng return-path đĩ bảo quản
thơng tin trong “reverse-path” từ lệnh mail. Ơ đây deliver final cĩ nghĩa là message
đĩ rời khỏi thế giới SMTP. Thơng thường cĩ nghĩa là nĩ đã được chuyển đến user đích, nhưng trong một số trường hợp nĩ cĩ thể được xử lý nữa và và được giao
chuyển bởi hệ thống mail khác.
Cĩ thể cho mailbox trong return-path là khác biệt với mailbox thật sự của
Sender-SMTP, ví dụ như nếu những trả lời error được dùng phân phát một lỗi đặc
biệt điều khiển mailbox.
Hai đoạn trước ý nĩi mail data cuối cùng sẽ bắt đầu với một dịng return- path theo sau là một hay nhiều dịng đánh dấu thời gian , sau những dịng này sẽ là phần header và body của mail data [2].
Sự đề cập đặc biệt cần thiết cho sự trả lời (response) và sự hành động tiếp
nữa được yêu cầu khi quá trình xữ lý theo sau sự chỉ định kết thúc mail data là sự
thành cơng cục bộ. Điều này cĩ thể phát sinh nếu sau khi chấp nhận một vài người
nhận và data mail của receiver-SMTP thấy mail data đĩ cĩ thể được phân phát đến
một số người thành cơng nhưng lại khơng thể đến những người khác (ví dụ như xảy
ra vấn đề về việc chỉ định vị trí của mailbox). Trong tình trạng như vậy câu trả lời
cho lệnh DATA phải là một reply OK. Nhưng receiver-SMTP phải soạn và gửi về nơi xuất xứ của message đĩ một message thơng báo “undelivered mail”. Một thơng báo đơn liệt kê tất cả các recipient khơng nhận được message, hay những message
thơng báo riêng lẽ phải được gửi cho từng recipient một , tất cả những thơng báo
mail khơng thể phân phát được gửi dùng lệnh MAIL (ngay cả nếu kết quả đĩ từ quá
trình xử lý một lệnh SEND, SOML, hay SAML ).
Ví dụ cho đường dẫn trả về và nhận đánh dấu thời gian nhận:
Return-Path:
<@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA> Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST Date: 27 Oct 81 15:01:01 PST
From: JOE@ABC.ARPA
Subject: Improved Mailing System Installed
To: SAM@JKL.ARPA This is to inform you that ...
SEND (SEND) : Lệnh này dùng khởi tạo một giao dịch mail trong đĩ mail data được phân phát đến một hay nhiều terminal. Trường đối số chứa một reverse- path. Lệnh này thành cơng nếu message được phân phát đến một terminal.
Reverse-path bao gồm một list các host và mailbox người gửi tuỳ ý khi list đĩ hồn tất, nĩ là một lộ trình nguồn “trở về” và chỉ định mail đã được chia ca thơng qua các host trong list đĩ (host đầu tiên trong list là host chia ca gần nhất) danh sách này được dùng như một lộ trình nguồn để trả về cho người gửi những
thơng báo về việc khơng phân phát được. Khi mỗi host chia ca thêm phần định
danh vào trong vị trí bắt đầu của list , nĩ phải dùng tên mà nĩ được biết đến trong IPCE nơi nĩ sẽ chia ca mail tới đĩ , đúng hơn là IPCE cĩ mail tới từ đĩ.
Lệnh này xố reverse-path buffer, forward-path buffer và mail data buffer và chèn thơng tin reverse-path từ lệnh này vào trong reverse-path buffer.
END OR MAIL (SOML) : Lệnh này dùng khởi tạo một giao dịch mail trong đĩ mail data được phân phát đến một hay nhiều terminal hay mailbox. Cho từng recipient, data mail được phân phát đến terminal của người nhận nếu người nhận đĩ đang hoạt động trên host đĩ (và chấp nhận những terminal message ), mặt khác là
đến mailbox của những người nhận đĩ. Trường đối số chứa một reverse-path . Lệnh
này thành cơng khi message được phân phát đến một terminal hay mailbox.
Reverse-path bao gồm một danh sách các host tuỳ ý và mailbox của người
gửi. Khi danh sách các host đĩ hoàn tất, nĩ là một lộ trình nguồn “trở về” và chỉ định mail đĩ đã được chia ca thơng qua các host trên danh sách (host đầu tiên trong danh sách là host chia ca gần nhất). Danh sách này được dùng như một lộ trình nguồn trả về cho người gửi những thơng báo về việc khơng thể phân phát. Khi mỗi
host chia ca thêm phần định danh nĩ vào chổ bắt đầu của danh sách đĩ, nĩ phải dùng tên được biết đến trong IPCE nơi nĩ sẽ chia ca mail đến đĩ đúng hơn là IPCE cĩ mail đến từ đĩ(nếu chúng khác nhau).
Lệnh này xố reverse-path buffer, forward-path buffer và mail data buffer và chèn thơng tin reverse-path từ lệnh này vào trong reverse-path buffer.
SEND AND MAIL (SAML) : Lệnh này dùng khởi tạo một giao dịch mail trong đĩ mail data được phân phát đến một hay nhiều terminal và các mailbox. Cho từng người nhận mail được phân phát đến terminal của người nhận nếu người nhận đĩ đang hoạt động trên host đĩ (và chấp nhận những terminal message ) và cho tất
cả recipient thì đến mailbox của các recipient đo. Trường đối số chứa một reverse- path. Lệnh này thành cơng khi message được phân phát đến mailbox.
Reverse-path bao gồm một danh sách các host tuỳ ý và mailbox của người
gửi. Khi danh sách hoàn tất nĩ là một lộ trình nguồn “trở về” và chỉ định mail đã
được chia ca thơng qua các host trong danh sách đĩ(host đầu tiên trong danh sách là host chia ca gần nhất ) Danh sách này được dùng như một lộ trình nguồn trả về cho người gửi những thơng báo về việc khơng thể phân phát. Khi mỗi host chia ca thêm phần định danh nĩ vào chổ bắt đầu của danh sách đĩ nĩ phải dùng tên mà nĩ được
biết đến trong IPCE mà nĩ sẽ chia ca mail đến đĩ đúng hơn là IPCE mà mail đến
từ đĩ (nếu chúng khác nhau).
Lệnh này xố reverse-path buffer, forward-path buffer và mail data buffer và chèn thơng tin reverse-path từ lệnh này vào trong reverse-path buffer.
RESET (RSET) : Lệnh này định rõ giao dịch mail hiện hành bị huỷ bỏ. Các người gửi, recipient, mail data đã lưu sẽ bị huỷ bỏ và tất cả các bảng trạng thái, các
buffer bị xố. Receiver phải gửi một reply OK.
VERIFY (VRFY) : Lệnh này yêu cầu receiver xác nhận đối số định danh
một user. Nếu nĩ là một user name, full name của user đĩ (nếu receiver biết) và
mailbox đặc tả đầy đủ được trả về.Lệnh này khơng ảnh hưởng đến reverse-path buffer, forward-path buffer và data mail buffer.
EXPAND (EXPN) : Lệnh này yêu cầu receiver xác nhận một mailing list (danh sách địa chỉ) và trả về một thành phần trong danh sách đĩ. Full name của các
user (nếu biết) và những mailbox được đặc tả đầy đủ được trả về trong một reply
nhiều dịng.
Lệnh này khơng ảnh hưởng đến reverse-path buffer, forward-path buffer và data mail buffer.
HELP (HELP) : Lệnh này làm cho receiver thơng tin giúp đỡ cho người gửi
lệnh HELP. Lệnh này cĩ thể nhận một đối số (cĩ thể là tên lệnh) và trả về thơng tin
chi tiết.
Lệnh này khơng ảnh hưởng đến reverse-path buffer, forward-path buffer và data mail buffer.
NOOP (NOOP) : Lệnh này khơng ảnh hưởng các tham số hay các lệnh được đưa vào trước nĩ, nĩ đặc tả khơng cĩ một hành động nào khác hơn là receiver gửi một
reply OK.
Lệnh này khơng ảnh hưởng đến reverse-path buffer, forward-path buffer và data mail buffer.
QUIT (QUIT) : Lệnh này định rõ receiver phải gửi một reply OK và sau đĩ đĩng kênh giao dịch . Receiver sẽ khơng đĩng kênh giao dịch cho đến khi nĩ nhận
và trả lời cho lệnh QUIT (ngay cả nếu cĩ một lỗi xãy ra). Người gửi sẽ khơng đĩng
kênh giao dịch cho đến khi nĩ gửi một lệnh QUIT và nhận reply đĩ (ngay cả nếu cĩ
một lỗi trả lời cho lệnh trước đĩ). Nếu kết nối bị đĩng trước thời gian mong muốn
receiver sẽ làm việc như vừa nhận được một lệnh RSET (bỏ tất cả các giao dịch đang treo mà chưa làm, nhưng khơng “undo” những giao dịch đã hồn tất trước đĩ) người gửi sẽ hành động như nếu lệnh hay giao dịch đĩ trong quá trình xử lý nhận được một lỗi tạm thời (4xx).
TURN (TURN) : Lệnh này định rõ Receiver-SMTP phải gửi một trong hai reply sau: (1) reply OK và sau đĩ nhận vai trị của một Sender-SMTP, hay (2) gửi
một reply từ chối và giữ lại vai trị một Receiver-SMTP.
Nếu program-A hiện tại là một Sender-SMTP gửi một lệnh TURN và nhận
một reply OK (250) thì program-A trở thành Receiver-SMTP sau đĩ program-A sẽ
trong trạng thái khởi động chỉ nếu kênh giao chuyển đã được mở, sau đĩ nĩ chờ
nhận một chào hỏi dịch vụ đã sẵn sàng 220.
Để từ chối thay đổi vai trị Receiver-SMTP gửi một reply 502.
Cĩ sự hạn chế trong trật tự khi dùng những lệnh này.
Đầu tiên trong một cuộc trao đổi phải là lệnh HELLO, lệnh này cĩ thể được dùng sau đĩ trong một cuộc trao đổi khác. Nếu đối số trong lệnh HELLO khơng được chấp nhận một reply failure 501 phải được trả về và Receiver-SMTP đĩ phải ở
trong trạng cũ.
Những lệnh NOOP, HELP, EXPAND và VRFY cĩ thể được dùng nhiều lần
trong một cuộc giao dịch.
Các lệnh MAIL, SEND, SOML, và SAML bắt đầu một giao dịch mail. Khi
bắt đầu một giao dịch mail bao gồm một lệnh khởi tạo giao dịch , một hay nhiều
lệnh RCPT, và một lệnh DATA đĩ là một trật tự . một giao dịch mail cĩ thể được
bỏ qua bởi một lệnh RSET cĩ thể cĩ hay khơng cĩ nhiều giao dịch trong một cuộc trao đổi (session).
Nếu đối số của lệnh khởi động giao dịch khơng thể chấp nhận một reply
failure 501 phải được trả về và Sender-SMTP phải nằm trong trạng thái cũ. Nếu
những lệnh trong cuộc giao dịch khơng đúng trật tự một reply failure 503 được trả
về và Receiver-SMTP đĩ phải nằm trong trạng thái cũ.
Lệnh cuối cùng trong cuộc trao đổi phải là lệnh QUIT và lệnh QUIT khơng
thể được dùng nhiều lần trong một cuộc trao đổi.