SMTP Simple Mail Transfer Protocol 簡單郵件傳送協(xié)議
SMTP Simple Message Transfer Protocol 簡單消息傳送協(xié)議
SMTP:簡單郵件傳輸協(xié)議
(SMTP:Simple Mail Transfer Protocol)
SMTP 是一種提供可靠且有效電子郵件傳輸?shù)膮f(xié)議。 SMTP 是建模在 FTP 文件傳輸服務(wù)上的一種郵件服務(wù),主要用于傳輸系統(tǒng)之間的郵件信息并提供來信有關(guān)的通知。
SMTP 獨立于特定的傳輸子系統(tǒng),且只需要可靠有序的數(shù)據(jù)流信道支持。 SMTP 重要特性之一是其能跨越網(wǎng)絡(luò)傳輸郵件,即“ SMTP 郵件中繼”。通常,一個網(wǎng)絡(luò)可以由公用互聯(lián)網(wǎng)上 TCP 可相互訪問的主機、防火墻分隔的 TCP/IP 網(wǎng)絡(luò)上 TCP 可相互訪問的主機,及其它 LAN/WAN 中的主機利用非 TCP 傳輸層協(xié)議組成。使用 SMTP ,可實現(xiàn)相同網(wǎng)絡(luò)上處理機之間的郵件傳輸,也可通過中繼器或網(wǎng)關(guān)實現(xiàn)某處理機與其它網(wǎng)絡(luò)之間的郵件傳輸。
在這種方式下,郵件的發(fā)送可能經(jīng)過從發(fā)送端到接收端路徑上的大量中間中繼器或網(wǎng)關(guān)主機。域名服務(wù)系統(tǒng)(DNS)的郵件交換服務(wù)器可以用來識別出傳輸郵件的下一跳 IP 地址。
在傳輸文件過程中使用25號端口
SMTP協(xié)議原理 SMTP-簡單郵件傳輸協(xié)議(SimpleMailTransferProtocol),是定義郵件傳輸?shù)膮f(xié)議,它是基于TCP服務(wù)的應(yīng)用層協(xié)議,由RFC0821所定義。SMPT協(xié)議規(guī)定的命令是以明文方式進行的。為了說明SMTP的工作原理,我們以向www.oray.gz.cn發(fā)送郵件為實例進行說明。
在linux環(huán)境下,使用"telnet www.oray.gz.cn 25"連接www.oray.gz.cn的25號端口(SMTP的標準服務(wù)端口);在windows下使用telnet程序,遠程主機指定為www.oray.gz.cn,而端口號指定為25,然后連接www.oray.gz.cn:交互過程如下:
[lix@nslix]$telnetwww.oray.gz.cn25
Trying202.99.11.120...
Connectedtowww.oray.gz.cn.
Escapecharacteris''''^]''''.
HELOideal
220www.oray.gz.cnESMTPSendmail8.10.2/8.10.2;Mon,18Sep200013:40:44
+0800
250www.oray.gz.cnHello[210.12.114.130],pleasedtomeetyou
MAILFROM:ideal@btamail.net.cn
2502.1.0IDEAL@btamail.net.cn...Senderok
RCPTTO:ideal@oray.gz.cn
2502.1.5ideal@oray.gz.cn...Recipientok
DATA
354Entermail,endwith"."onalinebyitself
hello,Plstogettomeetu:)goodluck
.
2502.0.0e8I5j1M11204Messageacceptedfordelivery
QUIT
2212.0.0www.oray.gz.cnclosingconnection
Connectionclosedbyforeignhost.
其中黑體部分是輸入的命令,其他內(nèi)容是對方郵件服務(wù)器輸出的狀態(tài)信息。
這里,HELO是客戶向?qū)Ψ洁]件服務(wù)器發(fā)出的標識自己的身份的命令,這里假設(shè)發(fā)送者為ideal;MAILFROM命令用來表示發(fā)送者的郵件地址;RCPTTO:標識接收者的郵件地址,這里表示希望發(fā)送郵件給ideal@oray.gz.cn,如果郵件接收者不是本地用戶,例如RCPTTO:ideal@btamail.net.cn,則說明希望對方郵件服務(wù)器為自己轉(zhuǎn)發(fā)(Relay)郵件,若該機器允許轉(zhuǎn)發(fā)這樣的郵件,則表示該郵件服務(wù)器是OPENRELAY的,否則說明該服務(wù)器不允許RELAY;DATA表示下面是郵件的數(shù)據(jù)部分,輸入完畢以后,以一個"."開始的行作為數(shù)據(jù)部分的結(jié)束標識;QUIT表示退出這次會話,結(jié)束郵件發(fā)送。
這就是一個簡單的發(fā)送郵件的會話過程,其實當(dāng)使用outlookexpress等客戶軟件發(fā)送時,后臺進行的交互也是這樣的,當(dāng)然,SMTP協(xié)議為了處理復(fù)雜的郵件發(fā)送情況如附件等等,定義了很多的命令及規(guī)定,具體可以通過閱讀RFC821來獲得。
當(dāng)你的一個朋友向你發(fā)送郵件時,他的郵件服務(wù)器和你的郵件服務(wù)器通過SMTP協(xié)議通信,將郵件傳遞給你郵件地址所指示的郵件服務(wù)器上(這里假設(shè)你的本地郵件服務(wù)器是Linux系統(tǒng)),若你通過telnet協(xié)議直接登錄到郵件服務(wù)器上,則可以使用mail等客戶軟件直接閱讀郵件,但是若你希望使用本地的MUA(MailUserAgent,如outlookexpress等客戶軟件)來閱讀郵件,則本地客戶端通過POP3或IMAP協(xié)議與郵件服務(wù)器交互,將郵件信息傳遞到客戶端(如:win98系統(tǒng))。而如果你向你的朋友回復(fù)一封信件時,你所使用的MUA也是通過SMTP協(xié)議與郵件服務(wù)(一般為發(fā)送郵件地址對應(yīng)的email地址)器通信,指示其希望郵件服務(wù)器幫助轉(zhuǎn)發(fā)一封郵件到你朋友的郵件地址指定的郵件服務(wù)器中。若本地郵件服務(wù)器允許你通過它轉(zhuǎn)發(fā)郵件,則服務(wù)器通過SMTP協(xié)議發(fā)送郵件到對方的郵件服務(wù)器。這就是接受和發(fā)送郵件的全部過程。
什么是mailRelay 郵件服務(wù)器一般具有一個或若干個域名(這些域名應(yīng)該出現(xiàn)在某個配置文件內(nèi)),郵件服務(wù)器在運行時將監(jiān)聽25號端口,等待遠程的發(fā)送郵件的請求。網(wǎng)絡(luò)上其他的mail服務(wù)器或者請求發(fā)送郵件的MUA(MailUserAgent,如outlookexpress、foxmail等等)會連接郵件服務(wù)器的25號端口,請求發(fā)送郵件,SMTP會話過程一般是從遠程標識自己的身份開始,過程如下:
HELOremote.system.domainname
250qmailserver.domain
MAILFROM:user@somewherer.net
250OK
RCPTTO:user1@elsewhere.net
郵件的接收者user1@elsewhere.net中的域名并不一定是郵件接受服務(wù)器的所具有的本地域名,也就是說郵件目的可能不是上面協(xié)議交互中的接收方,而是郵件發(fā)送者希望接收郵件服務(wù)器幫助其轉(zhuǎn)發(fā)郵件。這時候本地系統(tǒng)可能有兩種回答,接受它:
250OK
或者拒絕接受它:
553sorry,.thatdomainisnotinmydomainlistofallowedrecphosts
第一種情況下,本地郵件服務(wù)器是允許relay的,它接收并同意傳遞一個目的地址不是本地的郵件;而第二種情況則不接收非本地郵件。
為什么不能配置郵件服務(wù)器為openrelay?
如果系統(tǒng)管理員將自己的郵件服務(wù)器設(shè)置為openrelay,將會導(dǎo)致一些垃圾郵件發(fā)送者將你的郵件服務(wù)器作為轉(zhuǎn)發(fā)自圾郵件的中繼站,這將使垃圾郵件的接收者將矛頭對準你,可能會導(dǎo)致報復(fù)性的郵件炸彈;垃圾郵件還能消耗你大量的資源,占用你的帶寬。更為糟糕的事情可能是你的名字可能會上了黑名單,成為其他郵件接收者共同抵制的目標,你的郵件將被這些接收者所拒絕。