E-mail郵件協(xié)議的概述
認識E-mail協(xié)議:
一、E-mail的發(fā)送與接收涉及兩個協(xié)議:
1、簡單郵件傳遞協(xié)議(SMTP):負責(zé)傳遞郵件,是TCP/IP系列的協(xié)議.
2、郵政協(xié)議(POP3):接收互聯(lián)網(wǎng)上的郵件.
3、這里主要講解SMTP協(xié)議,POP3協(xié)議在上面的鏈接中.
二、工作原理:
1、客戶端發(fā)送程序-->SMTP1服務(wù)器(源SMTP)-->通過DNS服務(wù)尋找目標(biāo)SMTP服務(wù)器-->SMTP2服務(wù)器與建立連接并傳送郵件-->POP3服務(wù)器-->放入接收者電子信箱中并通知接收者。
2、通常情況下,個人用戶不是直接接收電子郵件,是由ISP(如:smtp.qq.com)的(SMTP服務(wù)器)主機負責(zé)接收電子郵件,再通知個人用戶。
路徑:個人用戶主機-->SMTP的主機-->SMTP目標(biāo)服務(wù)器-->收件人的SMTP主機-->POP3服務(wù)器-->通知收件人.
3、一般大公司專門有一臺SMTP服務(wù)器機器用來處理郵件.
三、關(guān)于ISP(互聯(lián)網(wǎng)服務(wù)提供商):
1、ISP的主機充當(dāng)著郵局的作用,管理眾多用戶的電子信箱,每個用戶的電子郵箱實際上就是它的賬號名。
2、由于每個電子郵箱都要占據(jù)ISP的硬盤空間,所以郵件數(shù)量是有限的。
四、關(guān)于互聯(lián)網(wǎng)郵件系統(tǒng):
1、每一臺互聯(lián)網(wǎng)PC在運行郵件程序(QQ郵箱)時,可自動確保郵件以標(biāo)準(zhǔn)格式選址和傳送,這個程序稱為“傳送受理程序”.
2、“傳送受理程序”遵守SMTP協(xié)議向外界發(fā)送郵件.
3、大多數(shù)“傳送受理程序”都在后臺運行,UNIX稱它為sendmail的智能程序.
電子郵件:
一、分為三個部分:
? ? ? ? ? ? ? ? ? ? ? ? ? 1)信頭(主題、收件人、發(fā)件人) ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? 2)信體(內(nèi)容)
? ? ? ? ? ? ? ? ? ? ? ? ? 3)簽名區(qū)
二、國際上常見的電子郵件格式:?? ?
????????????From:發(fā)信人地址????? ??????????????to:收信人地址 ?????????Subject:主題 ?????????content:內(nèi)容 ?????????????????結(jié)束標(biāo)志 ?????????????????簽名區(qū)
三、電子郵件地址通用格式:用戶標(biāo)識字符串@域名(123@qq.com)
四、郵件結(jié)構(gòu):
??????(1)From:user1@domain1.com?????????????????????????//發(fā)信人? ??????(2)??To:user2@domain1.com?????????????????????????//收件人 ??????(3)Subject:Hello,World????????????????????????????//主題 ??????(4)Date:Thu,1?Apr?2017.?14:00:00?GMT//時間日期 ??????(5)Hi,Jack????????????????????????????????????????//內(nèi)容部分 ??????(6)空行?????????????????????????????? ??????(7)How?Are?You? ??????(8)... ??????(9)Thanks ??????(10)Aaron
信頭:
在傳輸過程中,郵件被打包成一個數(shù)據(jù)結(jié)構(gòu),郵件的傳輸是根據(jù)信頭上的信息進行傳輸?shù)摹?/p>
舉例說明信封在傳遞過程中信頭的變化:
步驟一:客戶端程序發(fā)送郵件時:
? ? ? ? ? ? ? ?From:123@126.com ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?To:456@qq.com ? ? ? ? ? ??
? ? ? ? ? ? ? ?Date:Thu,1 Apr 2017. 14:00:00 GMT
? ? ? ? ? ? ? ?X-mailer:Sendmail 8.9.0
? ? ? ? ? ? ? ?Subject:Hello,World
步驟二:smtp.qq.com指向的SMTP服務(wù)器接收此郵件后,在信頭上增加一條以下內(nèi)容:
? ? ? ? ? ? ? Received:from 發(fā)信人主機名.126.com (發(fā)信人主機名.126.com [發(fā)件人IP地址]) by smtp.126.com (8.8.5) ?id ?004A21;Tue,Mar 18 1998 15:3 7:24 GMT
? ? ? ? ? ? ? From:123@126.com ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? To:456@qq.com ? ? ? ? ? ??
? ? ? ? ? ? ? Date:Thu,1 Apr 2017. 14:00:00 GMT
? ? ? ? ? ? ? X-mailer:Sendmail 8.9.0
? ? ? ? ? ? ? Subject:Hello,World
步驟三:QQ的SMTP服務(wù)器將郵件存儲下來,等待收件人閱讀,再次增加兩條以下的內(nèi)容:
? ? ? ? ? ? ?Received:from smtp.126.com (smtp.126.com [1.1.1.0]) bysmtp.qq.com (8.8.5/8.7.2) with ESMTP id LAA20869;Tue,Mar 18 1998 15:3 7:44 GMT
? ? ? ? ? ? ?Received:from 發(fā)信人主機名.126.com (發(fā)信人主機名.126.com [發(fā)件人IP地址]) by smtp.126.com (8.8.5) ?id ?004A21;Tue,Mar 18 1998 15:3 7:24 GMT
? ? ? ? ? ? ? From:123@126.com ? ? ? ? ? ??
? ? ? ? ? ? ? To:456@qq.com ? ? ? ? ? ??
? ? ? ? ? ? ? Date:Thu,1 Apr 2017. 14:00:00 GMT
? ? ? ? ? ? ? Message-Id:
拿步驟三來解釋以上的含義說明:
1、Received:from smtp.126.com (smtp.126.com [1.1.1.0]):
說明了是在smtp.126.com的SMTP服務(wù)器上接收來的郵件,SMTP服務(wù)器IP地址為1.1.1.0,真實名字為smtp.126.com
2、by smtp.qq.com (8.8.5/8.7.2) with ESMTP id LAA20869:
接收方為smtp.qq.com,使用的sendmail(傳送受理程序)的版本:8.8.5/8.7.2,郵件編號為ESMTP id LAA20869
3、Tue,Mar 18 1998 15:3 7:44 GMT:接收時間
4、Message-Id域:發(fā)送方SMTP服務(wù)器賦給這封郵件的編號,這個編號會始終跟隨該電子郵件
SMTP協(xié)議原理:
一、簡易概述:
1、提供高效、可靠的郵件傳輸,可通過不同網(wǎng)絡(luò)的主機接力式傳送.
2、TCP/IP系列的協(xié)議.
3、使用的監(jiān)聽端口號:25
二、主要功能:
1、將郵件從客戶端傳送至SMTP服務(wù)器.
2、將郵件從SMTP服務(wù)器傳送至另外一個SMTP服務(wù)器上.
3、分為兩個工作模式:發(fā)送SMTP、接收SMTP.
三、工作過程:
接到客戶端的郵件請求后,判斷是否為發(fā)送給本地SMTP服務(wù)器用戶的郵件,如果是,直接投送到用戶郵件中.否則向域名服務(wù)DNS查詢遠端SMTP服務(wù)器的MX記錄,?查詢到后,與遠端SMTP服務(wù)器建立連接,相互交互發(fā)送SMTP命令,本地SMTP服務(wù)器發(fā)送MAIL命令指明郵件發(fā)送者,遠端SMTP服務(wù)器則返回OK應(yīng)答,本地SMTP服務(wù)器再發(fā)送RCPT命令確認郵件是否已接收到,遠端SMTP服務(wù)器接收成功則返回OK應(yīng)答,反之則會返回拒絕接收應(yīng)答(但不終止連接),?雙方重復(fù)多次,當(dāng)遠端SMTP服務(wù)器收到全部郵件后會接收到特別的序列,如果遠端SMTP服務(wù)器成功處理了郵件,則返回OK應(yīng)答.
關(guān)于MX記錄:郵件交換記錄,它指向一個郵件服務(wù)器,用于電子郵件系統(tǒng)發(fā)郵件時根據(jù),收信人的地址后綴來定位郵件服務(wù)器.
關(guān)于CNAME記錄(規(guī)范名字):將多個名字(域名)映射到同一臺計算機.
關(guān)于A記錄:IP地址
四、SMTP命令與三位數(shù)字響應(yīng)碼描述:
1、SMTP命令和三位數(shù)字響應(yīng)碼基于ASCII字符集,并以CR和LF符(CR為r、FL為n)結(jié)束.
2、三位數(shù)字響應(yīng)碼為三位數(shù)字代碼,每一個數(shù)字代碼表示一個返回狀態(tài).
五、發(fā)信步驟:(以登錄QQ郵箱進行發(fā)信為例)
????1、連接QQ的SMTP服務(wù)器,通常端口為25??????//2開始,每一個命令都要接收一個服務(wù)器響應(yīng)碼 ????2、編輯郵件內(nèi)容和標(biāo)題格式: ????"From:rn"??????????????//僅用于顯示在郵件上的說明發(fā)件人(一般與實際發(fā)件人的郵箱號一致才行) ????"To:rn"(以;分割)???????//僅用于顯示在郵件上的說明一個或多個收件人(隨意) ????"Subject:主題rnrn"??????????????????//郵件標(biāo)題 ????"內(nèi)容"??????????????????????????????????//郵件內(nèi)容 ????3、發(fā)送EHLO命令標(biāo)明身份 ????4、發(fā)送STARTTLS命令標(biāo)明使用安全傳輸層協(xié)議(TLS) ????5、發(fā)送AUTH?LOGIN命令使用郵箱登錄 ????6、上傳QQ賬號和郵箱密鑰(Base64編碼) ????7、發(fā)送MAIL?FROM命令指定發(fā)件人,就是當(dāng)前QQ郵箱. ????8、發(fā)送RCPT?TO命令指定一個或多個收件人 ????9、發(fā)送DATA命令準(zhǔn)備開始發(fā)送郵件內(nèi)容 ????10、發(fā)送內(nèi)容,內(nèi)容以rn.rn結(jié)束 ????11、發(fā)送QUIT命令退出
(具體編寫2017年QQ郵件發(fā)信請看:http://blog.csdn.net/aaron133/article/details/78363844)
六、列舉一些SMTP命令:
(注意:每條命令以rn結(jié)尾,每發(fā)送一條SMTP命令,要接收一個服務(wù)器數(shù)字回應(yīng)碼)
1、EHLO命令:
發(fā)送格式:EHLO 主機名或發(fā)送者SMTP服務(wù)器名rn ? ? ? ?
作用:向服務(wù)器標(biāo)明用戶身份
2、STARTTLS命令:
發(fā)送格式:STARTTLS arn
作用:這是使用QQ郵箱時,需要的,這是我根據(jù)服務(wù)器反饋的錯誤回應(yīng)碼,知道的命令,我理解的不太透徹,應(yīng)該為開啟安全傳輸層協(xié)議(TLS),a字符是隨便加的,因為他需要后面跟一些字符串才能成功.
3、AUTH?LOGIN命令:
發(fā)送格式:AUTH?LOGINrn ? ? ??
作用:郵箱認證,發(fā)送該命令后應(yīng)依次先發(fā)送郵箱賬號,后發(fā)送密碼(賬號密碼均使用Base64編碼)發(fā)送前,需要將賬號密碼字符串轉(zhuǎn)換為Base64編碼,而且賬號和密碼結(jié)尾必須添加上:rn
關(guān)于Base64編碼:http://blog.csdn.net/aaron133/article/details/78352525
簡單轉(zhuǎn)換Base64編碼的函數(shù):http://blog.csdn.net/aaron133/article/details/78363844
4、MAIL?FROM命令:
發(fā)送格式:MAIL?FROM:?
作用:指定發(fā)件人
5、RCPT?TO命令:
發(fā)送格式:RCPT?TO:
作用:指定一個或多個收件人,指定多人時,要多次發(fā)送RCPT?TO命令.
6、DATA命令:
發(fā)送格式:DATArn
作用:表示準(zhǔn)備開始發(fā)送郵件內(nèi)容,發(fā)送此命令后,接著應(yīng)發(fā)送郵件內(nèi)容,內(nèi)容必須以rn.rn作為結(jié)束標(biāo)記.
7、QUIT命令:
發(fā)送格式:QUITrn
作用:退出命令
七、列舉一些三位數(shù)字響應(yīng)碼:
(第一位數(shù)字為2,表示命令成功)
(第一位數(shù)字為5,表示命令失?。?/p>
(第一位數(shù)字為3,表示命令未完成)
1、211 ? 系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)
2、214 ? 幫助信息
3、220??
八、補充說明:
1、360會報告有第三方軟件在使用郵箱發(fā)件.
2、SMTP命令中的HELO命令和EHLO命令是不同的,HELO命令是普通SMTP,不需要身份認證就可以使用MAIL FROM命令,然后發(fā)送偽造發(fā)送者的郵件,而現(xiàn)在大多數(shù)為ESMTP(SMTP擴展),是帶有身份驗證的.