IV. ĐẶ CT SMTP Ả
A. Nh ngl nh SMTP ữệ (Commands SMTP) 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 đĩ hồ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 saử ữ u 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 đĩ 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 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 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 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
Đầ ộ ộ đổ ả ệ ệ
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ữ ệ ể ượ ề ầ