SMTP協議原理
SMTP-簡單郵件傳輸協議(Simple Mail Transfer Protocol),是定義郵件傳輸的協議,它是基于TCP服務的應用層協議,由RFC0821所定義。SMPT協議規定的命令是以明文方式進行的。為了說明SMTP的工作原理,我們以向www.linuxaid.com.cn發送郵件為實例進行說明。
在linux環境下,使用"telnet www.linuxaid.com.cn 25"連接www.linuxaid.com.cn的25號端口(SMTP的標準服務端口);在windows下使用telnet程序,遠程主機指定為www.linuxaid.com.cn,而端口號指定為25,然后連接www.linuxaid.com.cn:交互過程如下:
[lix@ns lix]$ telnet www.linuxaid.com.cn 25 |
其中黑體部分是輸入的命令,其他內容是對方郵件服務器輸出的狀態信息。
這里,HELO是客戶向對方郵件服務器發出的標識自己的身份的命令,這里假設發送者為ideal;MAIL FROM命令用來表示發送者的郵件地址;RCPT TO:標識接收者的郵件地址,這里表示希望發送郵件給ideal@linuxaid.com.cn,如果郵件接收者不是本地用戶,例如RCPT TO:ideal@btamail.net.cn,則說明希望對方郵件服務器為自己轉發(Relay)郵件,若該機器允許轉發這樣的郵件,則表示該郵件服務器是OPEN RELAY的,否則說明該服務器不允許RELAY;DATA表示下面是郵件的數據部分,輸入完畢以后,以一個"."開始的行作為數據部分的結束標識;QUIT表示退出這次會話,結束郵件發送。
這就是一個簡單的發送郵件的會話過程,其實當使用outlook express等客戶軟件發送時,后臺進行的交互也是這樣的,當然,SMTP協議為了處理復雜的郵件發送情況如附件等等,定義了很多的命令及規定,具體可以通過閱讀RFC821來獲得。
當你的一個朋友向你發送郵件時,他的郵件服務器和你的郵件服務器通過SMTP協議通信,將郵件傳遞給你郵件地址所指示的郵件服務器上(這里假設你的本地郵件服務器是Linux系統),若你通過telnet協議直接登錄到郵件服務器上,則可以使用mail等客戶軟件直接閱讀郵件,但是若你希望使用本地的MUA(Mail User Agent,如outlook express等客戶軟件)來閱讀郵件,則本地客戶端通過POP3或IMAP協議與郵件服務器交互,將郵件信息傳遞到客戶端(如:win98系統)。而如果你向你的朋友回復一封信件時,你所使用的MUA也是通過SMTP協議與郵件服務(一般為發送郵件地址對應的email地址)器通信,指示其希望郵件服務器幫助轉發一封郵件到你朋友的郵件地址指定的郵件服務器中。若本地郵件服務器允許你通過它轉發郵件,則服務器通過SMTP協議發送郵件到對方的郵件服務器。這就是接受和發送郵件的全部過程。
什么是mail Relay
郵件服務器一般具有一個或若干個域名(這些域名應該出現在某個配置文件內),郵件服務器在運行時將監聽25號端口,等待遠程的發送郵件的請求。網絡上其他的mail服務器或者請求發送郵件的MUA(Mail User Agent,如outlook express、foxmail等等)會連接郵件服務器的25號端口,請求發送郵件,SMTP會話過程一般是從遠程標識自己的身份開始,過程如下:
HELO remote.system.domainname
250 qmailserver.domain
MAIL FROM:user@somewherer.net
250 OK
RCPT TO: user1@elsewhere.net
郵件的接收者user1@elsewhere.net中的域名并不一定是郵件接受服務器的所具有的本地域名,也就是說郵件目的可能不是上面協議交互中的接收方,而是郵件發送者希望接收郵件服務器幫助其轉發郵件。這時候本地系統可能有兩種回答,接受它:
250 OK
或者拒絕接受它:
553 sorry,.that domain isnot in my domain list of allowed recphosts
第一種情況下,本地郵件服務器是允許relay的,它接收并同意傳遞一個目的地址不是本地的郵件;而第二種情況則不接收非本地郵件。
為什么不能配置郵件服務器為open relay?
如果系統管理員將自己的郵件服務器設置為open relay,將會導致一些垃圾郵件發送者將你的郵件服務器作為轉發自圾郵件的中繼站,這將使垃圾郵件的接收者將矛頭對準你,可能會導致報復性的郵件炸彈;垃圾郵件還能消耗你大量的資源,占用你的帶寬。更為糟糕的事情可能是你的名字可能會上了黑名單,成為其他郵件接收者共同抵制的目標,你的郵件將被這些接收者所拒絕。
因此,系統管理員應當注意不要使自己的郵件服務器是open relay的。