SMTP被用來(lái)在因特網(wǎng)上傳遞電子郵件的原理-為了忘卻的紀念$bestmost->...
SMTP被用來(lái)在因特網(wǎng)上傳遞電子郵件。文件RFC821規定了該協(xié)議的所有細節。但是你只須記住下面的內容--該協(xié)議的基本命令和方法就行了。
協(xié)議的原理很簡(jiǎn)單。無(wú)非是一個(gè)客戶(hù)端計算機向服務(wù)器發(fā)送命令,然后服務(wù)器向客戶(hù)端計算機返回一些信息??头慷税l(fā)送的命令以及服務(wù)器的回應都是字符串,你并不需要特別的軟件就能讀出它們。如果你仔細看過(guò)WinsockTerminal示例程序的源代碼,你就會(huì )發(fā)現這一點(diǎn)?,F在讓我們用這個(gè)示例程序來(lái)向自己發(fā)一封電子郵件吧。
運行示例程序,單擊"Connect"按鈕,在"Connectto"對話(huà)框中輸入你的電子郵件服務(wù)器的地址,選擇SMTP選項。最后按"Connect"按鈕。如果連接成功,Winsock控件會(huì )產(chǎn)生Connected事件,在狀態(tài)欄中也可看到連接成功的信息。在主文本窗口中你將看到從服務(wù)器返回的文本。該文本包含一個(gè)三位數的代碼及描述,例如:
220-ns.cinfo.ruSendmail8.6.12/8.6.9readyatWed,22Apr199822:54:41+0300
220ESMTPspokenhere
不必太過(guò)留意這些描述。因為這些描述可能會(huì )因服務(wù)器而異。你只須要知道代碼所代表的意思就行了。代碼220表示成功建立連接,服務(wù)器等待你的第一個(gè)命令。
向服務(wù)器傳遞的第一個(gè)命令是HELO.該命令包含一個(gè)參數,即你的郵箱名。
HELOoleg
注意:在RFC821中,HELO是一個(gè)可選擇性命令,如果服務(wù)器不要求該命令的話(huà),你可以把它忽略掉。
如果命令成功,服務(wù)器會(huì )返回一個(gè)代碼為250的回應。下一步用MAILFROM命令告訴服務(wù)器你想發(fā)一封郵件。該命令以發(fā)信人的郵件地址為參數。
MAILFROM:oleg@vbip.com
發(fā)完命令后,如果服務(wù)器返回一個(gè)代碼為250回應,你就可以向服務(wù)器發(fā)送RCPTTO命令了。該命令以收信人地址為參數,一看便知是告訴服務(wù)器你想將郵件發(fā)到收信人地址處。
RCPTTO:somebody@domain.com
如果你想將郵件發(fā)給多個(gè)收件人的話(huà)。你需要多次使用RCPTTO命令,對每個(gè)命令,服務(wù)器都會(huì )返回代碼為250的回應。
現在你可以向服務(wù)器發(fā)送郵件正文了。用DATA命令告訴服務(wù)器以下的內容為郵件正文。在你從服務(wù)器收到代碼為354的回應后,你就可以發(fā)送郵件正文了。郵件按行發(fā)送,每行郵件以一個(gè)無(wú)回車(chē)的換行符結束(在VB中就是vbLf)示例程序知道何時(shí)使用換行符,何時(shí)使用回車(chē)加換行符。所以你只須按回車(chē)鍵就行了。下面是一個(gè)例子:
Subject:Myfirste-mailmessage.
Firstlineofamessage.
Secondline.
.
注意上面最后一行的最后一個(gè)字符是一個(gè)小數點(diǎn)。這是正文結束的標志。用VB代碼表示就是vbLf&"."&vbCrLf.服務(wù)器收到這個(gè)標志后,就會(huì )立即向你返回一個(gè)代碼為250的回應以及該郵件的唯一ID號。
250WAA10568Messageacceptedfordelivery
任務(wù)完成了,你可以繼續發(fā)送下封郵件,也可以斷開(kāi)同服務(wù)器的連接。如果要斷開(kāi)同服務(wù)器的連接就用QUIT命令。在這種情況下,服務(wù)器會(huì )返回一個(gè)代碼為221的回應并斷開(kāi)連接。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。