簡單郵件傳輸協(xié)議
1.什么是簡單郵件傳輸協(xié)議[1]
簡單郵件傳輸協(xié)議是指TPTCP/IP網(wǎng)絡(luò)在MTA之間傳遞郵件的協(xié)議。SMTP是目前使用最廣泛的郵件協(xié)議,UA向MTA發(fā)送電子郵件也使用SMTP。
2.簡單郵件傳輸協(xié)議的內(nèi)容[1]
SMTP使用的TCP端口號是25,接收端在TCP的25號端口等待發(fā)送端來的E-mail,發(fā)送端向接收方(即服務(wù)器)發(fā)出連接要求,一旦連接成功,即進(jìn)行郵件信息交換,郵件傳遞結(jié)束后釋放連接。圖1列出了SMTP協(xié)議的常用命令。
- 圖1SMTP協(xié)議的常用命令
下面給出一個用SMTP傳遞郵件的典型過程。例如,我們假定一個名叫unix.ict.a(chǎn)c.cn的計算機(jī)(作為域ict.a(chǎn)c.cn的郵件服務(wù)器)要發(fā)送下列信件:
Date:Sat 27 April 2002 13:26:3l BJ
From:lu@ ict.a(chǎn)c.cn
TO:liu @ cnc.a(chǎn)c.cn
Subject:meetinq
Let us get together Monday at lpm
首先要注意的是,根據(jù)SMTP標(biāo)準(zhǔn)(RFC822),信件必須用純ASCII碼發(fā)送。該標(biāo)準(zhǔn)還規(guī)定了諸如郵件頭、空一行、然后是信件本體這樣的通用結(jié)構(gòu)。詳細(xì)定義的郵件頭中行的語法,由關(guān)鍵字(keyword)及隨后的具體值(value)兩部分組成。在我們的例子中,收件人由liu @ cnc.a(chǎn)c.cn表示,它簡單地對應(yīng)計算機(jī)xenix.cnc.a(chǎn)c.cn(作為域cnc.a(chǎn)c.cn的郵件服務(wù)器)上的用戶liu;發(fā)件人由1u @ ict.ac.cn表示,它對應(yīng)計算機(jī)unix.ict.a(chǎn)c.cn上的用戶1u。
發(fā)送方郵件軟件從本地計算機(jī)的通信主機(jī)登記表(在UNIX操作系統(tǒng)上,主機(jī)表放在/etc/hosts文件中)或網(wǎng)上的名字服務(wù)器那里得知xenix.cnc.a(chǎn)c.cn的IP地址是128.6.4.2,然后郵件程序打開一個連接到128.6.4.2的25號端口。unix和xenix都是多用戶操作系統(tǒng),雙方計算機(jī)的郵件服務(wù)都位于本地主機(jī)。25號是眾所周知的接收郵件的端口號。一旦連接建立,發(fā)送方郵件程序就開始發(fā)送命令。下面列出的是典型會話:
每行開頭都標(biāo)出該行信息是從unix還是從xenix發(fā)出的。在我們的例子中是unix主動發(fā)起連接的。按照標(biāo)準(zhǔn),命令都使用普通正文。在示例會話中,命令HELO、MAIL、RCPT、DATA和QUIT都足標(biāo)準(zhǔn)ASCII命令,這樣就給觀察和診斷帶來方便,可以將每個會話的軌跡放在一個記錄文件中,以供檢查,標(biāo)準(zhǔn)還規(guī)定,應(yīng)答都以數(shù)字開頭,并限定可以使用的應(yīng)答格式。使用數(shù)字保證用戶程序的應(yīng)答無二義性。應(yīng)答數(shù)字的后面輔以正文,通常只是為了供人閱讀和記錄,對于程序的操作沒有影響。可能已經(jīng)注意到了,會話以HELO起始,它給出啟動連接的發(fā)送端郵件服務(wù)器的域名,然后描述發(fā)送者和接收者。如果郵件要發(fā)給多個用戶,則可以有多個RCPT命令。最后發(fā)送數(shù)據(jù)。要注意,郵件的正文用僅包含一個句點“·”的行結(jié)束。
需要強(qiáng)調(diào)的是,SMTP規(guī)定了對任一給定命令可以發(fā)送的應(yīng)答。以2開頭的應(yīng)答表示成功,以3開頭的應(yīng)答表明需要有進(jìn)一步的動作。4和5開頭表示錯誤:4開頭是暫時性錯誤,比如磁盤滿;5開頭則是永久性錯誤,例如接收用戶不存在。圖2列出了SMTP協(xié)議的應(yīng)答代碼。這些應(yīng)答代碼分類如圖3所示。
- 圖2SMTP協(xié)議的應(yīng)答代碼
- 圖3SMTP應(yīng)答代碼分類
從上面的例子可以看出,郵件傳遞分五大部分:第一部分是建立郵件連接,第二部分是標(biāo)識發(fā)送者,第三部分是標(biāo)識接收者,第四部分是傳遞郵件數(shù)據(jù),第五部分是結(jié)束郵件連接。