![網(wǎng)絡(luò)編程實(shí)用教程_第9章ppt課件_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/e5e893e5-9819-42e9-820b-8d55d32c6678/e5e893e5-9819-42e9-820b-8d55d32c66781.gif)
![網(wǎng)絡(luò)編程實(shí)用教程_第9章ppt課件_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/e5e893e5-9819-42e9-820b-8d55d32c6678/e5e893e5-9819-42e9-820b-8d55d32c66782.gif)
![網(wǎng)絡(luò)編程實(shí)用教程_第9章ppt課件_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/e5e893e5-9819-42e9-820b-8d55d32c6678/e5e893e5-9819-42e9-820b-8d55d32c66783.gif)
![網(wǎng)絡(luò)編程實(shí)用教程_第9章ppt課件_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/e5e893e5-9819-42e9-820b-8d55d32c6678/e5e893e5-9819-42e9-820b-8d55d32c66784.gif)
![網(wǎng)絡(luò)編程實(shí)用教程_第9章ppt課件_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/e5e893e5-9819-42e9-820b-8d55d32c6678/e5e893e5-9819-42e9-820b-8d55d32c66785.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.第第9章章 電子郵件協(xié)議與編程電子郵件協(xié)議與編程 本章首先介紹電子郵件系統(tǒng)的構(gòu)成和工作原理,然后分析簡(jiǎn)單郵件傳送協(xié)議SMTP,接著敘述RFC822規(guī)定的純文本電子郵件信件的格式,詳細(xì)說(shuō)明了MIME多媒體郵件格式擴(kuò)展,分析了接收電子郵件的POP3郵局協(xié)議,最后給出了兩個(gè)編程實(shí)例。通過(guò)本章的學(xué)習(xí),應(yīng)當(dāng)充分認(rèn)識(shí)應(yīng)用層協(xié)議在網(wǎng)絡(luò)編程中的重要性,可以說(shuō),網(wǎng)絡(luò)編程就是應(yīng)用層協(xié)議的實(shí)現(xiàn)。 .9.1 電子郵件系統(tǒng)的工作原理電子郵件系統(tǒng)的工作原理9.1.1 電子郵件的特點(diǎn)電子郵件的特點(diǎn)電子郵件(electronic mail,簡(jiǎn)稱e-mail)是因特網(wǎng)上使用最多的一種應(yīng)用,它為用戶在因特網(wǎng)上設(shè)立了存放郵件的電
2、子郵箱,發(fā)信人可以隨時(shí)將電子郵件發(fā)送到收信人的電子郵箱,收信人也可以隨時(shí)上網(wǎng)讀取,發(fā)信人與收信人以異步的方式通信。 .9.1.2 電子郵件系統(tǒng)的構(gòu)成電子郵件系統(tǒng)的構(gòu)成一個(gè)電子郵件系統(tǒng)包括三個(gè)主要的構(gòu)件,即用戶代理,郵件消息傳輸代理,和電子郵件使用的協(xié)議。如圖9.1所示: 圖9.1 電子郵件系統(tǒng)的構(gòu)成 .9.1.3 電子郵件系統(tǒng)的實(shí)現(xiàn)電子郵件系統(tǒng)的實(shí)現(xiàn) 圖9.2 電子郵件的發(fā)送與接收過(guò)程 .從以上的分析可以了解電子郵件系統(tǒng)的特點(diǎn):是一種異步的通信系統(tǒng),不像電話,通話的雙方都必須在場(chǎng)。使用方便,傳輸迅速,費(fèi)用低廉,不僅能傳輸文字信息,還能附上聲音和圖像。 在電子郵件系統(tǒng)的實(shí)現(xiàn)中,ISP的服務(wù)器必須
3、7X24小時(shí)地不間斷地運(yùn)行,這樣才能保證用戶可以隨時(shí)發(fā)送和接收信件,而發(fā)送或接收電子郵件的用戶則隨意。 .9.2 簡(jiǎn)單郵件傳送協(xié)議簡(jiǎn)單郵件傳送協(xié)議SMTP9.2.1 概述概述 簡(jiǎn)單郵件傳送協(xié)議SMTP(Simple Mail Transfer Protocol)是因特網(wǎng)的正式標(biāo)準(zhǔn),最初在1982年由RFC821規(guī)定,目前它的最高版本是RFC2821。 SMTP協(xié)議采用C/S模式,專(zhuān)用于電子郵件的發(fā)送,規(guī)定了發(fā)信人把郵件發(fā)送到收信人的電子郵箱的全過(guò)程中,SMTP客戶與SMTP服務(wù)器這兩個(gè)相互通信的進(jìn)程之間應(yīng)如何交換信息。即規(guī)定了SMTP的會(huì)話過(guò)程。用戶直接使用的是用于編寫(xiě)和發(fā)送的客戶端軟件,而通
4、常的SMTP服務(wù)器運(yùn)行在遠(yuǎn)程站點(diǎn)上??蛻?服務(wù)器之間的通信是通過(guò)TCP/IP協(xié)議進(jìn)行的。 .9.2.2 SMTP客戶與客戶與SMTP服務(wù)器之間的會(huì)話服務(wù)器之間的會(huì)話1SMTP會(huì)話會(huì)話如圖9.3,說(shuō)明了SMTP客戶與SMTP服務(wù)器之間的會(huì)話 圖9.3 SMTP客戶與SMTP服務(wù)器之間的會(huì)話 .2SMTP命令命令 一般是客戶主動(dòng),首先發(fā)送。SMTP客戶發(fā)往SMTP服務(wù)器的信息稱為SMTP命令。在RFC821中,SMTP協(xié)議規(guī)定了14種命令。 SMTP命令的一般的格式是: 命令關(guān)鍵字 參數(shù) 其中,命令關(guān)鍵字一般是四個(gè)字母,是一個(gè)英文動(dòng)詞的縮寫(xiě)。參數(shù)隨命令而異,命令應(yīng)當(dāng)以回車(chē)換行符結(jié)束。 比如 HEL
5、O WANG .3SMTP應(yīng)答應(yīng)答 SMTP服務(wù)器收到命令后,返回給SMTP客戶的信息,稱為SMTP應(yīng)答??蛻裘看伟l(fā)送一條SMTP命令后,服務(wù)器給客戶返回一條響應(yīng)。SMTP規(guī)定了23種響應(yīng)碼。 SMTP應(yīng)答都是以一個(gè)響應(yīng)碼開(kāi)頭,后面接著響應(yīng)的描述信息,如果SMTP服務(wù)器不一樣,響應(yīng)的描述信息可能不一樣,SMTP應(yīng)答的一般格式是: 響應(yīng)碼 響應(yīng)的文本描述信息 其中,響應(yīng)碼為3位數(shù)字,與描述信息文本之間有一個(gè)空格, .9.2.3 常用的常用的SMTP命令命令1SMTP客戶問(wèn)候客戶問(wèn)候SMTP服務(wù)器服務(wù)器命令格式:HELO 發(fā)送方的主機(jī)名 2郵件來(lái)自何處,說(shuō)明發(fā)信人的電子郵件地址郵件來(lái)自何處,說(shuō)明發(fā)
6、信人的電子郵件地址命令格式:MAIL FROM:發(fā)信人的電子郵件地址 3說(shuō)明收信人的電子郵件地址說(shuō)明收信人的電子郵件地址命令格式:RCPT TO:收信人的電子郵箱地址 4請(qǐng)求發(fā)送郵件內(nèi)容請(qǐng)求發(fā)送郵件內(nèi)容 命令格式:DATA .5空操作空操作命令格式:NOOP 6驗(yàn)證電子信箱是否合法驗(yàn)證電子信箱是否合法命令格式:VRFY 電子信箱地址 7復(fù)位復(fù)位SMTP服務(wù)器服務(wù)器命令格式:RSET 8請(qǐng)求服務(wù)器發(fā)回幫助信息請(qǐng)求服務(wù)器發(fā)回幫助信息命令格式:HELP 或者 HELP 命令關(guān)鍵字 9退出會(huì)話退出會(huì)話命令格式:QUIT .9.2.4 常用的常用的SMTP響應(yīng)碼響應(yīng)碼211 系統(tǒng)狀態(tài)或系統(tǒng)幫助應(yīng)答。21
7、4 幫助信息220 服務(wù)就緒。221 服務(wù)器關(guān)閉傳輸通道。250 請(qǐng)求的郵件操作已經(jīng)完成。251 用戶不是本地的,將按照前向路徑(forwaed-path)轉(zhuǎn)發(fā)。354 啟動(dòng)郵件輸入,要求郵件文本要用兩個(gè)結(jié)束。421 服務(wù)不可使用,關(guān)閉傳輸通道。450 沒(méi)有執(zhí)行請(qǐng)求的郵箱操作,因?yàn)樾畔洳豢捎谩?451 請(qǐng)求的操作已經(jīng)終止,因?yàn)樵谔幚淼倪^(guò)程中出現(xiàn)了錯(cuò)誤。452 請(qǐng)求的操作沒(méi)有發(fā)生,因?yàn)橄到y(tǒng)的存儲(chǔ)空間不夠,500 語(yǔ)法錯(cuò)誤,命令不可識(shí)別。501 參數(shù)或變?cè)写嬖谥Z(yǔ)法錯(cuò)誤。502 命令不能實(shí)現(xiàn)。503 錯(cuò)誤的命令序列504 命令的參數(shù)不能實(shí)現(xiàn)。550 請(qǐng)求的操作不能發(fā)生,信箱不可用。551 用戶不
8、在本地,請(qǐng)嘗試發(fā)送到前向路徑(forwaed-path)。552 請(qǐng)求的郵件操作終止,超出存儲(chǔ)分配。553 請(qǐng)求的操作不能執(zhí)行,因?yàn)樾畔湔Z(yǔ)法錯(cuò)誤。554 事務(wù)失敗。 .9.2.5 SMTP的會(huì)話過(guò)程的會(huì)話過(guò)程SMTP客戶與SMTP服務(wù)器的會(huì)話過(guò)程分為三個(gè)階段,先舉例說(shuō)明。以下每行前面的C代表SMTP客戶發(fā)送的命令,S代表服務(wù)器發(fā)回的響應(yīng)。每行/后面的內(nèi)容是注釋。C:HELO YE /你好!我是YE。S:250 YE HELLO ,nice to meet you /你好!YE,很高興見(jiàn)到你,有事嗎?C:MAIL FROM: /我想發(fā)信,。S:250 ,Sender, accepted /行!有
9、信你就發(fā)吧。. /。C:RCPT /行!已經(jīng)準(zhǔn)備好。 S:250 , Recipient ok C:DATA /我要發(fā)信件的內(nèi)容了。 /發(fā)吧!結(jié)尾標(biāo)志是兩個(gè)回車(chē)換行符夾個(gè)英文句點(diǎn)。S:354 Enter mail, end with . C:(客戶端按照電子郵件的格式發(fā)送郵件內(nèi)容) /我的信已經(jīng)發(fā)完了C:(郵件內(nèi)容發(fā)送完畢,發(fā)送結(jié)束標(biāo)志crlf &.& crlf) /好的,你的信已經(jīng)存儲(chǔ)了。S:250 ok, message saved C:QUIT /再見(jiàn)S:221 See you in cyberspace /再見(jiàn) .在上面的對(duì)話過(guò)程中,粗體字部分是發(fā)送郵件的客戶端軟件發(fā)送
10、的內(nèi)容,其他部分是SMTP服務(wù)器的應(yīng)答內(nèi)容。從中可以明顯看出SMTP會(huì)話具有以下特點(diǎn):(1)會(huì)話的過(guò)程采用交互式的請(qǐng)求應(yīng)答模式,客戶發(fā)送命令,服務(wù)器回送應(yīng)答。(2)客戶發(fā)送的命令和服務(wù)器回送的應(yīng)答都是純文本形式,有一定格式。(3)針對(duì)客戶的每個(gè)命令,服務(wù)器總要返回一定的響應(yīng)碼,表示服務(wù)器是否接受或執(zhí)行了客戶端命令。(4)會(huì)話過(guò)程有一定的順序 .9.2.6 使用使用Winsock來(lái)實(shí)現(xiàn)電子郵件客戶與服務(wù)來(lái)實(shí)現(xiàn)電子郵件客戶與服務(wù)器的會(huì)話器的會(huì)話(1)啟動(dòng)SMTP服務(wù)器,在指定的傳輸層端口監(jiān)聽(tīng)客戶端的連接請(qǐng)求,為SMTP服務(wù)器保留的端口是25。(2)客戶端設(shè)置Winsock連接的IP地址或域名,指定
11、端口號(hào),主動(dòng)發(fā)出連接請(qǐng)求,連接到SMTP服務(wù)器。比如,網(wǎng)易的SMTP服務(wù)器的域名是,監(jiān)聽(tīng)端口是25。 (3)服務(wù)器接收客戶端的連接請(qǐng)求,并發(fā)回響應(yīng)。客戶端應(yīng)收到類(lèi)似220 BigFox ESMTP service ready這樣的信息, 這就說(shuō)明客戶端已經(jīng)與服務(wù)器建立TCP/IP連接,成功地實(shí)現(xiàn)了第一步。 .(4)客戶端和服務(wù)器分別向?qū)Ψ桨l(fā)送數(shù)據(jù)。(5)客戶端或服務(wù)器分別讀取自己緩沖區(qū)中的數(shù)據(jù)。(6)以上兩步是SMTP會(huì)話的主要部分,要按照SMTP協(xié)議的規(guī)定,按照一定順序,客戶向服務(wù)器發(fā)送命令,服務(wù)器向客戶發(fā)送應(yīng)答,以上兩步要多次重復(fù)。 (7)會(huì)話完畢,關(guān)閉客戶端和服務(wù)器之間的連接。 .9.3
12、 電子郵件信件結(jié)構(gòu)詳述電子郵件信件結(jié)構(gòu)詳述9.3.1 Internet文本信件的格式標(biāo)準(zhǔn)文本信件的格式標(biāo)準(zhǔn)- RFC822 在電子郵件系統(tǒng)的環(huán)境中,電子郵件信件是它傳遞的對(duì)象。最早規(guī)定電子郵件信件內(nèi)容結(jié)構(gòu)的標(biāo)準(zhǔn)是在1982發(fā)表的,稱作RFC822,至今它仍然是Internet上電子郵件信件的當(dāng)前標(biāo)準(zhǔn)。RFC822定義了信件從主機(jī)傳遞到主機(jī)時(shí)需要的格式化方式。它的主要用途是為信件提供規(guī)范化的格式,使不同類(lèi)型的網(wǎng)絡(luò)可以相互傳遞電子郵件。該標(biāo)準(zhǔn)的最新文本是RFC2822。 .RFC822規(guī)定,電子郵件信件的內(nèi)容全部由ASCII字符組成,就是通常所說(shuō)的文本文件, 從組織上看,RFC822將信件內(nèi)容結(jié)構(gòu)
13、分為信頭和信體兩大部分,中間用一個(gè)空白行。對(duì)于一行的字符數(shù),有一個(gè)1000/80的限制規(guī)則。對(duì)于信件的行數(shù),RFC822沒(méi)有特別的限制, .下面是一個(gè)電子郵件信件內(nèi)容文本的實(shí)例,可以大致說(shuō)明頭部行的形式,頭部的行由關(guān)鍵字和冒號(hào)開(kāi)始,頭部和正文部分由空行分隔開(kāi)。From: To: 912743.Date:Fri,1 Jan 99 10:21:32 ESTSubject: lunch with me? Bob Can we get together for lunch when you visit next week? Im freeOn Tuesday or Wednesday just let
14、 me know which day would prefer.john .9.3.2 信件的頭部信件的頭部1信頭的一般格式信頭的一般格式信頭由若干信頭字段(header field)組成。所有的信頭字段包括四部分,字段名(field name),緊跟冒號(hào): (colon),后跟字段體(field body),最后以回車(chē)換行符(CRLF)終止。即信頭字段 = 字段名:字段體 .2結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段信頭字段大體可以分為結(jié)構(gòu)化字段和非結(jié)構(gòu)化字段兩種。結(jié)構(gòu)化字段有特定的格式,由語(yǔ)法分析程序檢測(cè)。非結(jié)構(gòu)化的字段含有任意的數(shù)據(jù),沒(méi)有固定格式。 .3信頭字段的元素信頭字段的元
15、素盡管Email信件的總體結(jié)構(gòu)非常簡(jiǎn)單,但一些信頭字段的結(jié)構(gòu)是很復(fù)雜的。下面介紹一些大多數(shù)字段共有的元素。(1)空白符(2)注解(3)字段折疊(4)字段大小寫(xiě) .4標(biāo)準(zhǔn)的信頭字段標(biāo)準(zhǔn)的信頭字段(1)與發(fā)信方有關(guān)的信頭字段寫(xiě)信人字段 說(shuō)明信件的原始創(chuàng)建者,給出他的電子信箱地址。創(chuàng)建者對(duì)信件的原始內(nèi)容負(fù)責(zé)。格式:From:mailbox 舉例:From: .發(fā)送者字段 說(shuō)明實(shí)際提交發(fā)送這個(gè)信件的人,給出他的電子信箱地址。當(dāng)發(fā)信人與寫(xiě)信人不一樣時(shí)使用。比如,秘書(shū)替經(jīng)理發(fā)信。發(fā)送者對(duì)發(fā)送負(fù)責(zé)。格式:Sender:mailbox 舉例:From: Sender: .回復(fù)字段 指定應(yīng)當(dāng)把回信發(fā)到哪里。如果
16、有此字段,回信將會(huì)發(fā)給它指定的郵箱,而不會(huì)發(fā)給From字段指定的郵箱。比如,發(fā)送的是經(jīng)理的信,但回信應(yīng)交辦公室處理。格式:Reply-TO:mailbox 舉例:From: Reply-TO: .(2)與收信方有關(guān)的信頭字段收信人字段 指定主要收信人的郵箱地址,可以是多個(gè)郵箱地址的列表,地址中間用逗號(hào)隔開(kāi)。格式:TO:mailbox list 舉例:TO: .抄送字段 指定此信件要同時(shí)發(fā)給哪些人,也稱為抄送。也可以使用郵箱地址列表,抄送給多個(gè)人。格式:Cc:mailbox list 舉例:Cc: 密抄字段 指定此信件要同時(shí)秘密發(fā)給哪些人,也稱為密件抄送。也可以使用郵箱地址列表,密抄給多個(gè)人。格
17、式:Bcc:mailbox list .(3)其它的信頭字段日期字段 Date字段含有電子郵件創(chuàng)建的日期和時(shí)間。格式:Date:date-time 舉例:Date:Tue,04 Dec 2004 16:18:08 +800 信件主題字段 描述信件的主題。當(dāng)回復(fù)信件時(shí),通常在主題前面增加“Re:”前綴,標(biāo)記為該信件為回復(fù)信件:當(dāng)信件被轉(zhuǎn)發(fā)時(shí),通常在主題文字前面加上“Fw:”,“Fwd:”這樣的前綴。格式:Subject:*text 舉例:Subject:Hello! Subject:Re:Hello! .接受字段 是投遞信件的特定郵件服務(wù)器所作的記錄。處理郵件投遞的每個(gè)服務(wù)器必須給它處理的每個(gè)信
18、頭的前面加一個(gè)Received字段,用以描述信件到達(dá)目的地所經(jīng)過(guò)的路徑以及相關(guān)信息。當(dāng)跟蹤各個(gè)電子郵件問(wèn)題時(shí),這個(gè)信息很有幫助。格式:Received:from domain /發(fā)送主機(jī)by domain /接收主機(jī)via atom /物理路徑id msg-id /接收者msg id舉例:Received:from wang195.0.0.1 by li129.5.0.4 Tue dec 2003 12:18:02 +800 .注釋字段 用于把一個(gè)注解添加到信件中。格式:Comments:*text 重發(fā)字段 當(dāng)需要把收到的信件重發(fā)給另一組收信人的時(shí)候,可以保持整個(gè)原始信件不變,并簡(jiǎn)單地產(chǎn)生重
19、發(fā)信件所要求的新信頭字段。為避免與以前的字段相混。新添加的信頭字段都加上Resent-前綴字符串,它們的語(yǔ)法與未加前綴的同名字段相同。格式:Resent-* 舉例:Resent-From Resent-Sender Resent-date Resent-Reply-To .信件標(biāo)識(shí)字段 用于表示一個(gè)信件唯一標(biāo)識(shí),該字段通常有Smtp服務(wù)器生成,這個(gè)值通常是唯一的。形式根據(jù)使用的軟件而定。通常左邊是標(biāo)識(shí)符,右邊指定計(jì)算機(jī)名。格式:Message-ID:msg-id .5擴(kuò)展的信頭字段擴(kuò)展的信頭字段如果想在信頭中加入RFC822中沒(méi)有規(guī)定的字段,就需要?jiǎng)?chuàng)建非標(biāo)準(zhǔn)字段。方法非常簡(jiǎn)單,只要在自定義的信
20、頭字段名的前面使用X-前綴。RFC822將這種方法稱為擴(kuò)展字段。事實(shí)上已經(jīng)有許多擴(kuò)展字段被廣泛應(yīng)用,但沒(méi)有標(biāo)準(zhǔn)定義。例如:X-LOOP字段X-Mailer字段 .6信頭中必須要有的字段信頭中必須要有的字段 在創(chuàng)建信件時(shí),必須使用Date或Resent-Date字段指定創(chuàng)建信件的日期,必須使用From字段指定創(chuàng)建該信件的人或程序的信箱,必須至少使用TO、CC或Bcc中的一個(gè),或者與它們等效的Resent-TO,Resent-CC,Resent-Bcc中的一個(gè),來(lái)指定接收信件的人。 除了這些創(chuàng)建信件時(shí)要求的信頭以外,每個(gè)處理信件的郵件傳輸代理(MTA)必須在它處理的信件頭部開(kāi)始處加一個(gè)Receiv
21、ed字段,就好像打了一個(gè)中轉(zhuǎn)郵戳,這就是我們通常在許多信件的開(kāi)始看到許多個(gè)Received字段的原因。 .9.3.3 構(gòu)造和分析符合構(gòu)造和分析符合RFC822標(biāo)準(zhǔn)的電子信件標(biāo)準(zhǔn)的電子信件1信件的構(gòu)造信件的構(gòu)造 發(fā)送電子郵件的程序要進(jìn)行電子信件的構(gòu)造。 信件主要分為兩大部分:信頭和信體,在兩部分之間用空白行隔開(kāi)。 先構(gòu)造信頭,信頭的必需字段有:一個(gè)Date字段,一個(gè)From字段,最少一個(gè)收信人字段。也可以根據(jù)需要加入其它的字段。信體部分比較簡(jiǎn)單,按照文本文件的方法編寫(xiě)就行。對(duì)于較長(zhǎng)的信頭字段或信體行,可以使用折疊的方法,把它們變?yōu)?0字符以內(nèi)的行。 .2信件的語(yǔ)法分析信件的語(yǔ)法分析 接收郵件的程
22、序要對(duì)郵件進(jìn)行結(jié)構(gòu)和語(yǔ)法分析。 信件的語(yǔ)法分析是構(gòu)造信件的逆過(guò)程,通過(guò)分析,從中提取必要的信息,使用戶最終看到的不是軟件接收下來(lái)的原始信件,而是經(jīng)過(guò)處理的有條理的信件內(nèi)容。 一般首先將存在折疊的字段展開(kāi),將跨多行的字段去掉折疊字符合成一個(gè)完整的字段,并在信頭中與其它字段分隔開(kāi)來(lái)。去掉折疊的方法是將續(xù)行上面一行末尾的CFLF符替換成空格符。其次對(duì)字段進(jìn)行處理,將字段頭和字段體分離開(kāi)。然后顯示相關(guān)字段的內(nèi)容。最后提取信件的正文內(nèi)容。信件體和信頭之間以空白行分開(kāi),根據(jù)這個(gè)特點(diǎn)可以很容易地將信頭和信體區(qū)分開(kāi)來(lái)。 .9.4 MIME編碼解碼與發(fā)送附件編碼解碼與發(fā)送附件 為了能利用電子郵件傳送各種信息,在
23、RFC1341中提出了一種方法,并在RFC2045至RFC2049中作了進(jìn)一步的完善,這就是多用途Internet郵件擴(kuò)展(Multipurpose Internet Mail Extensions),簡(jiǎn)稱MIME。已經(jīng)成為電子郵件的標(biāo)準(zhǔn)。按照MIME標(biāo)準(zhǔn)構(gòu)造的郵件稱為MIME郵件,或MIME信件,有時(shí)也稱為MIME實(shí)體(MIME entity)。 MIME的基本思想是:第一,不改動(dòng)SMTP和POP3等電子郵件傳輸協(xié)議;第二,仍然要繼續(xù)使用RFC822的格式來(lái)傳輸郵件。 .圖9.4 MIME與電子郵件協(xié)議之間的關(guān)系 .MIME主要包括三部分內(nèi)容(1)擴(kuò)展了可以在郵件中使用的信頭字段。這些新定義
24、的信頭字段說(shuō)明了MIME的版本,郵件內(nèi)容的類(lèi)型,編碼方式,以及郵件的標(biāo)識(shí)和描述等信息。(2)定義了郵件信體的格式,給出了多媒體電子郵件的標(biāo)準(zhǔn)化表示方法,為信體增加了結(jié)構(gòu)。而在RFC822中,對(duì)郵件信體沒(méi)有作任何結(jié)構(gòu)方面的規(guī)定。(3)定義了傳送編碼方法,可以將任何格式的內(nèi)容轉(zhuǎn)換為符合RFC822的ASCII文本格式。按照MIME規(guī)范,可以構(gòu)造復(fù)雜的郵件,發(fā)送附件就是利用MIME實(shí)現(xiàn)的。 .9.4.2 MIME定義的新的信頭字段定義的新的信頭字段MIME定義了5個(gè)新的信頭字段,可以與原有信頭字段一樣,用在RF822郵件的首部中。1MIME版本信頭字段版本信頭字段格式:MIME-Version:1.
25、0 此字段用于標(biāo)識(shí)使用的MIME版本號(hào),目前MIME只有1.0版。如果是MIME郵件,就必須有MIME版本信頭字段;如無(wú)此行,則說(shuō)明郵件是原來(lái)那種RFC822的英文文本。設(shè)置這個(gè)字段是為了將來(lái)出現(xiàn)更高的MIME版本號(hào)時(shí),解決發(fā)送、接收軟件雙方的兼容性問(wèn)題。 .2郵件唯一標(biāo)識(shí)信頭字段郵件唯一標(biāo)識(shí)信頭字段格式:Content-ID:唯一標(biāo)識(shí)信件的字符串 此字段提供一種唯一標(biāo)識(shí)MIME實(shí)體的方法,與Message-ID信頭字段類(lèi)似。借助這個(gè)唯一標(biāo)識(shí),可以實(shí)現(xiàn)在一個(gè)MIME實(shí)體中引用其他的MIME實(shí)體。如果郵件的內(nèi)容類(lèi)型是Message/External-body,就需要使用此字段;對(duì)于其他類(lèi)型,這個(gè)
26、字段是可選的。 .3郵件內(nèi)容描述信頭字段郵件內(nèi)容描述信頭字段格式:Content-Description: 描述文本 描述文本是可讀的字符串,簡(jiǎn)要說(shuō)明MIME郵件的內(nèi)容或主題,收信人可以據(jù)此決定是否值得解碼和閱讀該郵件。 .4MIME郵件的內(nèi)容類(lèi)型信頭字段郵件的內(nèi)容類(lèi)型信頭字段格式:Content-Type:主類(lèi)別標(biāo)識(shí)符/子類(lèi)別標(biāo)識(shí)符 ;參數(shù)列表 例如:Content-Type: Text/Plain; Charset = “gb2312”此字段說(shuō)明特定的MIME實(shí)體中所包含數(shù)據(jù)的類(lèi)型,類(lèi)型不同,郵件體的內(nèi)部結(jié)構(gòu)也隨之不同。它也說(shuō)明了郵件的性質(zhì),是MIME中的主要字段,在9.4.3節(jié)中詳述。
27、.5內(nèi)容傳送編碼方式信頭字段內(nèi)容傳送編碼方式信頭字段格式:Content-Transfer-Encoding: 編碼方式標(biāo)識(shí)符 指定在傳送郵件時(shí),如何對(duì)郵件的主體進(jìn)行編碼。在9.4.4節(jié)中詳述。.9.4.3 MIME郵件的內(nèi)容類(lèi)型郵件的內(nèi)容類(lèi)型1概述概述Content-Type是MIME對(duì)RFC822擴(kuò)展的最主要的信頭字段,用于指定MIME郵件內(nèi)容的類(lèi)型,包含豐富的信息。Content-Type信頭字段的目的是充分地描述包含在信體中的數(shù)據(jù),使得接收用戶代理能夠選擇適當(dāng)?shù)拇砘驒C(jī)制來(lái)將這些數(shù)據(jù)呈現(xiàn)給用戶,或者,用正確的方法處理這些數(shù)據(jù)。這個(gè)字段的值叫做媒體類(lèi)型(media type)。本節(jié)對(duì)這個(gè)
28、字段進(jìn)行詳細(xì)的說(shuō)明。它的一般格式是:Content-Type:郵件內(nèi)容媒體主類(lèi)型名/子類(lèi)型名;參數(shù)列表 .這個(gè)字段由三部分組成,第一部分是關(guān)鍵字第二部分是郵件內(nèi)容媒體主類(lèi)型名(media type identifiers)和子類(lèi)型名(subtype identifiers),說(shuō)明郵件內(nèi)容的媒體類(lèi)型第三部分,是一個(gè)以分號(hào)隔開(kāi)的參數(shù)列表,格式是:;參數(shù)名 = 參數(shù)值;參數(shù)名 = 參數(shù)值;.例如,Content-Type:text/HTML;charset = “GB2312”在RFC2046中定義了7個(gè)基本的內(nèi)容主類(lèi)型(top-level media types),每一種都有一個(gè)或多個(gè)子類(lèi)型,共計(jì)
29、15個(gè)子類(lèi)型,表9.1列出了它們的標(biāo)識(shí)符, .表9.1 RFC2046中定義的郵件內(nèi)容類(lèi)型和子類(lèi)型主類(lèi)型標(biāo)識(shí)符子類(lèi)型標(biāo)識(shí)符說(shuō)明Textplain不包含格式化信息的無(wú)格式化文本enrich包含簡(jiǎn)單格式化標(biāo)記的文本ImagegifGIF格式的圖像jpegJPEG格式的圖像Audiobasic用PCM(脈碼調(diào)制)獲得的音頻數(shù)據(jù)VideompegMPEG格式的影片Applicationoctet-stream不加解釋的不間斷的字節(jié)序列postscriptPostScript格式的可打印文檔Messagerfc822MIME RFC822郵件partial為了傳輸而講一個(gè)郵件分成幾個(gè)external-b
30、ody必須從其它地方獲取郵件的內(nèi)容Multipartmixed按照特定順序的幾個(gè)獨(dú)立不發(fā)alternative不同格式的同一郵件parallel必須同時(shí)讀取的幾個(gè)不發(fā)digest每一個(gè)不發(fā)是一個(gè)完整的RFC822郵件.2Text媒體類(lèi)型媒體類(lèi)型3image媒體類(lèi)型媒體類(lèi)型4Audio媒體類(lèi)型媒體類(lèi)型5Video媒體類(lèi)型媒體類(lèi)型6Application媒體類(lèi)型媒體類(lèi)型7Message媒體類(lèi)型媒體類(lèi)型8Message/external-body媒體類(lèi)型的參數(shù)及使用媒體類(lèi)型的參數(shù)及使用9Multipart媒體類(lèi)型媒體類(lèi)型.9.4.4 MIME郵件的編碼方式郵件的編碼方式1MIME編碼概述編碼概述(1
31、)7bit編碼方式Content-Transfer-Encoding: 7bit(2)8bit編碼方式Content-Transfer-Encoding: 8bit(3)binary編碼方式Content-Transfer-Encoding: binary(4)Base64編碼方式(5)Quoted-printable編碼方式 .2BASE64編碼算法編碼算法在進(jìn)行Base64的編碼時(shí),首先要將被編碼的數(shù)據(jù)看成一個(gè)字節(jié)序列,不分行。然后按照以下三個(gè)步驟反復(fù)進(jìn)行編碼。第一步:順次從要編碼的字節(jié)序列數(shù)據(jù)中,取出3個(gè)字節(jié),作為一組,該組包含24bit。第二步:將一組的24個(gè)bit,再順次分為四個(gè)6b
32、it的小組。并在每小組的前面補(bǔ)兩個(gè)零,形成四個(gè)字節(jié)。顯然這4個(gè)字節(jié)的值都在0-63范圍內(nèi)。第三步:根據(jù)小組的每個(gè)字節(jié)的數(shù)值,按照表9.2的對(duì)應(yīng)關(guān)系,將它們分別轉(zhuǎn)換為對(duì)應(yīng)的可打印ASCII字符。順次對(duì)要編碼的數(shù)據(jù)字節(jié)序列,重復(fù)進(jìn)行以上處理,直到所有的數(shù)據(jù)編碼完成為止。 .值 字符值 字符 值 字符值 字符 值 字符值 字符0A 11 L22 W33 h 44 s55 31B 12 M23 X34 i45 t56 42C 13 N24 Y 35 j46 u57 53D 14 O25 Z36 k 47 v58 64E 15 P26 a37 l w59 75F 16 Q27 b38 m 49 x60
33、86G 17 R28 c39 n 50 y61 97H 18 S29 d40 o 51 z62 +8I 19 T30 e41 p 52 063 /9J 20 U31 f42 q 53 110 K21 V32 g43 r54 2表9.2 Base64編碼.此外,編碼過(guò)程中還需要注意兩點(diǎn):(1)如何將編碼后的文本行控制在76個(gè)字符以內(nèi)?按照RFC822的要求,應(yīng)當(dāng)將編碼后的文本行控制在76個(gè)字符以內(nèi)。這只需要在編碼后的字符序列中,每76個(gè)字符插入一組CRLF(回車(chē)換行),然后就可以發(fā)送,在接受端譯碼時(shí),應(yīng)首先將碰到的CRLF符刪除,再按照Base64的方法譯碼。在原來(lái)要編碼的數(shù)據(jù)中可能有CR(0A
34、)和LF(0D)字符,但它們經(jīng)過(guò)編碼后,變成了“K”和“N”,不會(huì)與后來(lái)插入的CRLF字符相混。 .(2)編碼時(shí)最后一組不滿三個(gè)字節(jié)怎么辦?Base64編碼時(shí),按照三個(gè)字節(jié)一組進(jìn)行,最后一組就有可能剩下1個(gè)或2個(gè)字節(jié)。編碼時(shí),一方面對(duì)有效的數(shù)據(jù)要進(jìn)行編碼,另一方面要讓接收端能判斷出最后一組剩下的有效數(shù)據(jù)究竟有幾個(gè)字節(jié)。方法是:首先補(bǔ)充全零的填充字節(jié),將最后一組補(bǔ)夠3個(gè)字節(jié),然后按照上述方法進(jìn)行編碼,在第三步映射成字符后,要將編碼后的末尾一個(gè)或兩個(gè)字節(jié)替換為“=”字符。 .如果最后一組只剩一個(gè)數(shù)據(jù)字節(jié),那么產(chǎn)生的4個(gè)編碼數(shù)據(jù)中,只有前兩個(gè)帶有剩余數(shù)據(jù)字節(jié)的位,就應(yīng)將4個(gè)編碼數(shù)據(jù)的后兩個(gè)字節(jié)都替換
35、成等號(hào)。如果最后一組剩下兩個(gè)字節(jié),那么產(chǎn)生的4個(gè)編碼數(shù)據(jù)中,前三個(gè)帶有剩余數(shù)據(jù)字節(jié)的位,這時(shí)就將4個(gè)編碼數(shù)據(jù)的最后一個(gè)字節(jié)替換成等號(hào)。注意到,等號(hào)并不包含在上面的轉(zhuǎn)換表中,接收端根據(jù)等號(hào)的數(shù)目,就可以判知最后一組中有效的字節(jié)數(shù),從而正確地譯碼。 .3Quoted-printable編碼算法編碼算法這種編碼稱為可打印的引用編碼(Quoted-printable encoding),被編碼的數(shù)據(jù)以8BIT的字節(jié)為單位,這種編碼方法的要點(diǎn)就是對(duì)于所有可打印的ASCII碼,除了特殊符號(hào)“=”以外,都不改變。編碼算法的要點(diǎn)是:(1)如果被編碼數(shù)據(jù)字節(jié)的值在33到60之間(字符!至字符至字符),這部分字符
36、是可打印的,則該數(shù)據(jù)字節(jié)編碼為7bit的對(duì)應(yīng)ASCII字符,實(shí)際就是將最高位去掉。 .(2)其他的數(shù)據(jù),包括“=”字符,空格,ASCII碼在0-32的不可打印字符,以及非ASCII碼的數(shù)據(jù),都必須進(jìn)行編碼。被編碼的數(shù)據(jù)以8bit的字節(jié)為單位,先將每個(gè)字節(jié)的二進(jìn)制代碼用兩個(gè)16進(jìn)制數(shù)字表示,然后在前面加上一個(gè)等號(hào)“=”,就是該字節(jié)的編碼。例如,字節(jié)值12被編碼為 “=0C”,字節(jié)值61被編碼為 “=3D”。再比如,漢字“系統(tǒng)”的二進(jìn)制代碼是:11001111 10110101 11001101 10110011,其16進(jìn)制數(shù)字表示為:CFB5CDB3,相應(yīng)的Quoted-printable編碼表
37、示為:=CF=B5=CD=B3。等號(hào)的二進(jìn)制代碼是00111101,它的Quoted-printable編碼是=3D?;剀?chē)符被編碼為=0D,換行符被編碼為=0A。要注意,16進(jìn)制數(shù)據(jù)的表示用字母表 “0 1 2 3 4 5 6 7 8 9 A B C D E F”,即必須用大寫(xiě)字母。 .(3)如果要將編碼后的數(shù)據(jù)分割成76字符的行,可以在分割處插入等號(hào)“=”和CRLF。此等號(hào)也要計(jì)算在76個(gè)字符中。例如,ABCDEFGHEJKLMNOPQRSTUVWXYZ 經(jīng)過(guò)編碼后將此行變成較短的形式:ABCDEFG=HEJKLMNOPQRSTUV=WXYZ容易看出,接收端只要將插入的分割字符刪掉,就很容易
38、將它們恢復(fù)成原來(lái)的樣子。 .9.5 POP3與接收電子郵件與接收電子郵件9.5.1 POP3協(xié)議協(xié)議用來(lái)接收電子郵件的POP郵局協(xié)議最初是在1984年發(fā)表的RFC918中定義的,1985年的RFC937發(fā)表了它的第二個(gè)版本。隨著POP協(xié)議的廣泛使用,1988年的RFC1081又發(fā)表了它的第三版本,簡(jiǎn)稱POP3,這個(gè)版本又在RFC1225,RFC1460,RFC1725,RFC1939中幾經(jīng)修訂,其中RFC1939是當(dāng)前的POP3標(biāo)準(zhǔn)。 .9.5.2 POP3的會(huì)話過(guò)程的會(huì)話過(guò)程 圖9.5 POP3會(huì)話 .POP也使用客戶/服務(wù)器工作模式,在接收郵件的用戶的PC機(jī)中,運(yùn)行POP客戶程序,在用戶所
39、連接的ISP的郵件服務(wù)器中,運(yùn)行POP服務(wù)程序,二者之間按照POP協(xié)議相互發(fā)送信息,POP客戶發(fā)送給POP服務(wù)器的消息稱為POP命令,POP服務(wù)器返回的消息稱為POP響應(yīng)。交互的過(guò)程稱為POP會(huì)話。例如:(Connect to the POP3 Server .) /首先連接到POP3服務(wù)器S: +OK POP3 server ready /服務(wù)器已經(jīng)準(zhǔn)備好C: USER Wang /用戶名是Wang .S: +OKC: PASS vegetables /口令是vegetablesS: +OK login successful /客戶登錄成功了C: LIST /請(qǐng)列出信箱中的信件清單 S: 1
40、 AAAA /第一封信S: 2 BBBB /第二封信S: 3 CCCC /第三封信C: RETR 1 /取回第一封信S: +OK (send message 1) /好,(發(fā)送第一封信).C: DELE 1 /刪除第一封信S: +OK /好的C: RETR 2S: +OK (send message 2)C: DELE 2S: +OKC: QUIT /結(jié)束會(huì)話,再見(jiàn)S: +OK POP3 server disconnecting /好,POP3服務(wù)器斷開(kāi)連接 .在上面的對(duì)話過(guò)程中,C:后面是接收郵件的客戶端軟件發(fā)送的命令,S:后面是POP服務(wù)器的應(yīng)答,/后面是注釋。從這個(gè)例子中可以看出POP會(huì)話的特點(diǎn):會(huì)話
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Module 10 Unit 2 You shouldn't be late(說(shuō)課稿)-2024-2025學(xué)年外研版(一起)英語(yǔ)五年級(jí)上冊(cè)001
- 16 滑輪 說(shuō)課稿-2023-2024學(xué)年科學(xué)六年級(jí)上冊(cè)青島版001
- 3 珍貴的淡水資源(說(shuō)課稿)-2023-2024學(xué)年四年級(jí)科學(xué)下冊(cè)大象版
- 3 我不拖拉 第2課時(shí)(說(shuō)課稿)-2023-2024學(xué)年道德與法治一年級(jí)下冊(cè)統(tǒng)編版
- 2023二年級(jí)數(shù)學(xué)上冊(cè) 二 角的初步認(rèn)識(shí) 銳角和鈍角說(shuō)課稿 西師大版
- 19《夜宿山寺》說(shuō)課稿-2024-2025學(xué)年二年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 2023八年級(jí)道德與法治上冊(cè) 第四單元 維護(hù)國(guó)家利益 第八課 國(guó)家利益至上 第1框 國(guó)家好 大家才會(huì)好說(shuō)課稿 新人教版
- 2024年八年級(jí)道德與法治下冊(cè) 第三單元 人民當(dāng)家作主 第五課 我國(guó)基本制度 第2框 根本政治制度說(shuō)課稿 新人教版
- 2024年秋九年級(jí)歷史上冊(cè) 第一單元 古代亞非文明 第3課 古代印度說(shuō)課稿2 新人教版001
- 2025北京建筑材料購(gòu)貨合同
- 2025年公務(wù)員考試申論試題與參考答案
- 2025年高考作文專(zhuān)練(25道真題+審題立意+范文)- 2025年高考語(yǔ)文作文備考總復(fù)習(xí)
- 中國(guó)高血壓防治指南(2024年修訂版)要點(diǎn)解讀
- 二十屆三中全會(huì)精神應(yīng)知應(yīng)會(huì)知識(shí)測(cè)試30題(附答案)
- 小學(xué)三年級(jí)下冊(cè)奧數(shù)題100道附答案
- 《烏有先生歷險(xiǎn)記》原文及翻譯
- 人員測(cè)評(píng)方案
- 小升初卷(試題)-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)人教版
- GB/T 40565.1-2024液壓傳動(dòng)連接快換接頭第1部分:通用型
- 《教科版》二年級(jí)科學(xué)下冊(cè)全冊(cè)課件(完整版)
評(píng)論
0/150
提交評(píng)論