SMTP被用來在因特網上傳遞電子郵件。文件RFC821規定了該協議的所有細節。但是你只須記住下面的內容--該協議的基本命令和方法就行了。
協議的原理很簡單。無非是一個客戶端計算機向服務器發送命令,然後服務器向客戶端計算機返回一些信息。客房端發送的命令以及服務器的回應都是字符串,你並不需要特別的軟件就能讀出它們。如果你仔細看過Winsock Terminal示例程序的源代碼,你就會發現這一點。現在讓我們用這個示例程序來向自己發一封電子郵件吧。
運行示例程序,單擊"Connect"按鈕,在"Connect to..."對話框中輸入你的電子郵件服務器的地址,選擇SMTP選項。最後按"Connect"按鈕。如果連接成功,Winsock控件會產生Connected事件,在狀態欄中也可看到連接成功的信息。在主文本窗口中你將看到從服務器返回的文本。該文本包含一個三位數的代碼及描述,例如:
220-ns.cinfo.ru Sendmail 8.6.12/8.6.9 ready at Wed, 22 Apr 1998 22:54:41 +0300
220 ESMTP spoken here
不必太過留意這些描述。因為這些描述可能會因服務器而異。你只須要知道代碼所代表的意思就行了。代碼220表示成功建立連接,服務器等待你的第一個命令。
向服務器傳遞的第一個命令是HELO. 該命令包含一個參數,即你的郵箱名。
HELO oleg
注意: 在RFC821中,HELO是一個可選擇性命令,如果服務器不要求該命令的話,你可以把它忽略掉。
如果命令成功,服務器會返回一個代碼為250的回應。下一步用MAIL FROM命令告訴服務器你想發一封郵件。該命令以發信人的郵件地址為參數。
MAIL FROM: [email protected]
發完命令後,如果服務器返回一個代碼為250回應,你就可以向服務器發送RCPT TO命令了。該命令以收信人地址為參數,一看便知是告訴服務器你想將郵件發到收信人地址處。
RCPT TO: [email protected]
如果你想將郵件發給多個收件人的話。你需要多次使用RCPT TO命令,對每個命令,服務器都會返回代碼為250的回應。
現在你可以向服務器發送郵件正文了。用DATA命令告訴服務器以下的內容為郵件正文。在你從服務器收到代碼為354的回應後,你就可以發送郵件正文了。郵件按行發送,每行郵件以一個無回車的換行符結束(在VB中就是vbLf)示例程序知道何時使用換行符,何時使用回車加換行符。所以你只須按回車鍵就行了。下面是一個例子:
Subject: My first e-mail message.