網絡編程實用教程_第9章ppt課件_第1頁
網絡編程實用教程_第9章ppt課件_第2頁
網絡編程實用教程_第9章ppt課件_第3頁
網絡編程實用教程_第9章ppt課件_第4頁
網絡編程實用教程_第9章ppt課件_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.第第9章章 電子郵件協議與編程電子郵件協議與編程 本章首先介紹電子郵件系統的構成和工作原理,然后分析簡單郵件傳送協議SMTP,接著敘述RFC822規(guī)定的純文本電子郵件信件的格式,詳細說明了MIME多媒體郵件格式擴展,分析了接收電子郵件的POP3郵局協議,最后給出了兩個編程實例。通過本章的學習,應當充分認識應用層協議在網絡編程中的重要性,可以說,網絡編程就是應用層協議的實現。 .9.1 電子郵件系統的工作原理電子郵件系統的工作原理9.1.1 電子郵件的特點電子郵件的特點電子郵件(electronic mail,簡稱e-mail)是因特網上使用最多的一種應用,它為用戶在因特網上設立了存放郵件的電

2、子郵箱,發(fā)信人可以隨時將電子郵件發(fā)送到收信人的電子郵箱,收信人也可以隨時上網讀取,發(fā)信人與收信人以異步的方式通信。 .9.1.2 電子郵件系統的構成電子郵件系統的構成一個電子郵件系統包括三個主要的構件,即用戶代理,郵件消息傳輸代理,和電子郵件使用的協議。如圖9.1所示: 圖9.1 電子郵件系統的構成 .9.1.3 電子郵件系統的實現電子郵件系統的實現 圖9.2 電子郵件的發(fā)送與接收過程 .從以上的分析可以了解電子郵件系統的特點:是一種異步的通信系統,不像電話,通話的雙方都必須在場。使用方便,傳輸迅速,費用低廉,不僅能傳輸文字信息,還能附上聲音和圖像。 在電子郵件系統的實現中,ISP的服務器必須

3、7X24小時地不間斷地運行,這樣才能保證用戶可以隨時發(fā)送和接收信件,而發(fā)送或接收電子郵件的用戶則隨意。 .9.2 簡單郵件傳送協議簡單郵件傳送協議SMTP9.2.1 概述概述 簡單郵件傳送協議SMTP(Simple Mail Transfer Protocol)是因特網的正式標準,最初在1982年由RFC821規(guī)定,目前它的最高版本是RFC2821。 SMTP協議采用C/S模式,專用于電子郵件的發(fā)送,規(guī)定了發(fā)信人把郵件發(fā)送到收信人的電子郵箱的全過程中,SMTP客戶與SMTP服務器這兩個相互通信的進程之間應如何交換信息。即規(guī)定了SMTP的會話過程。用戶直接使用的是用于編寫和發(fā)送的客戶端軟件,而通

4、常的SMTP服務器運行在遠程站點上。客戶/服務器之間的通信是通過TCP/IP協議進行的。 .9.2.2 SMTP客戶與客戶與SMTP服務器之間的會話服務器之間的會話1SMTP會話會話如圖9.3,說明了SMTP客戶與SMTP服務器之間的會話 圖9.3 SMTP客戶與SMTP服務器之間的會話 .2SMTP命令命令 一般是客戶主動,首先發(fā)送。SMTP客戶發(fā)往SMTP服務器的信息稱為SMTP命令。在RFC821中,SMTP協議規(guī)定了14種命令。 SMTP命令的一般的格式是: 命令關鍵字 參數 其中,命令關鍵字一般是四個字母,是一個英文動詞的縮寫。參數隨命令而異,命令應當以回車換行符結束。 比如 HEL

5、O WANG .3SMTP應答應答 SMTP服務器收到命令后,返回給SMTP客戶的信息,稱為SMTP應答??蛻裘看伟l(fā)送一條SMTP命令后,服務器給客戶返回一條響應。SMTP規(guī)定了23種響應碼。 SMTP應答都是以一個響應碼開頭,后面接著響應的描述信息,如果SMTP服務器不一樣,響應的描述信息可能不一樣,SMTP應答的一般格式是: 響應碼 響應的文本描述信息 其中,響應碼為3位數字,與描述信息文本之間有一個空格, .9.2.3 常用的常用的SMTP命令命令1SMTP客戶問候客戶問候SMTP服務器服務器命令格式:HELO 發(fā)送方的主機名 2郵件來自何處,說明發(fā)信人的電子郵件地址郵件來自何處,說明發(fā)

6、信人的電子郵件地址命令格式:MAIL FROM:發(fā)信人的電子郵件地址 3說明收信人的電子郵件地址說明收信人的電子郵件地址命令格式:RCPT TO:收信人的電子郵箱地址 4請求發(fā)送郵件內容請求發(fā)送郵件內容 命令格式:DATA .5空操作空操作命令格式:NOOP 6驗證電子信箱是否合法驗證電子信箱是否合法命令格式:VRFY 電子信箱地址 7復位復位SMTP服務器服務器命令格式:RSET 8請求服務器發(fā)回幫助信息請求服務器發(fā)回幫助信息命令格式:HELP 或者 HELP 命令關鍵字 9退出會話退出會話命令格式:QUIT .9.2.4 常用的常用的SMTP響應碼響應碼211 系統狀態(tài)或系統幫助應答。21

7、4 幫助信息220 服務就緒。221 服務器關閉傳輸通道。250 請求的郵件操作已經完成。251 用戶不是本地的,將按照前向路徑(forwaed-path)轉發(fā)。354 啟動郵件輸入,要求郵件文本要用兩個結束。421 服務不可使用,關閉傳輸通道。450 沒有執(zhí)行請求的郵箱操作,因為信箱不可用。.451 請求的操作已經終止,因為在處理的過程中出現了錯誤。452 請求的操作沒有發(fā)生,因為系統的存儲空間不夠,500 語法錯誤,命令不可識別。501 參數或變元中存在著語法錯誤。502 命令不能實現。503 錯誤的命令序列504 命令的參數不能實現。550 請求的操作不能發(fā)生,信箱不可用。551 用戶不

8、在本地,請嘗試發(fā)送到前向路徑(forwaed-path)。552 請求的郵件操作終止,超出存儲分配。553 請求的操作不能執(zhí)行,因為信箱語法錯誤。554 事務失敗。 .9.2.5 SMTP的會話過程的會話過程SMTP客戶與SMTP服務器的會話過程分為三個階段,先舉例說明。以下每行前面的C代表SMTP客戶發(fā)送的命令,S代表服務器發(fā)回的響應。每行/后面的內容是注釋。C:HELO YE /你好!我是YE。S:250 YE HELLO ,nice to meet you /你好!YE,很高興見到你,有事嗎?C:MAIL FROM: /我想發(fā)信,。S:250 ,Sender, accepted /行!有

9、信你就發(fā)吧。. /。C:RCPT /行!已經準備好。 S:250 , Recipient ok C:DATA /我要發(fā)信件的內容了。 /發(fā)吧!結尾標志是兩個回車換行符夾個英文句點。S:354 Enter mail, end with . C:(客戶端按照電子郵件的格式發(fā)送郵件內容) /我的信已經發(fā)完了C:(郵件內容發(fā)送完畢,發(fā)送結束標志crlf &.& crlf) /好的,你的信已經存儲了。S:250 ok, message saved C:QUIT /再見S:221 See you in cyberspace /再見 .在上面的對話過程中,粗體字部分是發(fā)送郵件的客戶端軟件發(fā)送

10、的內容,其他部分是SMTP服務器的應答內容。從中可以明顯看出SMTP會話具有以下特點:(1)會話的過程采用交互式的請求應答模式,客戶發(fā)送命令,服務器回送應答。(2)客戶發(fā)送的命令和服務器回送的應答都是純文本形式,有一定格式。(3)針對客戶的每個命令,服務器總要返回一定的響應碼,表示服務器是否接受或執(zhí)行了客戶端命令。(4)會話過程有一定的順序 .9.2.6 使用使用Winsock來實現電子郵件客戶與服務來實現電子郵件客戶與服務器的會話器的會話(1)啟動SMTP服務器,在指定的傳輸層端口監(jiān)聽客戶端的連接請求,為SMTP服務器保留的端口是25。(2)客戶端設置Winsock連接的IP地址或域名,指定

11、端口號,主動發(fā)出連接請求,連接到SMTP服務器。比如,網易的SMTP服務器的域名是,監(jiān)聽端口是25。 (3)服務器接收客戶端的連接請求,并發(fā)回響應。客戶端應收到類似220 BigFox ESMTP service ready這樣的信息, 這就說明客戶端已經與服務器建立TCP/IP連接,成功地實現了第一步。 .(4)客戶端和服務器分別向對方發(fā)送數據。(5)客戶端或服務器分別讀取自己緩沖區(qū)中的數據。(6)以上兩步是SMTP會話的主要部分,要按照SMTP協議的規(guī)定,按照一定順序,客戶向服務器發(fā)送命令,服務器向客戶發(fā)送應答,以上兩步要多次重復。 (7)會話完畢,關閉客戶端和服務器之間的連接。 .9.3

12、 電子郵件信件結構詳述電子郵件信件結構詳述9.3.1 Internet文本信件的格式標準文本信件的格式標準- RFC822 在電子郵件系統的環(huán)境中,電子郵件信件是它傳遞的對象。最早規(guī)定電子郵件信件內容結構的標準是在1982發(fā)表的,稱作RFC822,至今它仍然是Internet上電子郵件信件的當前標準。RFC822定義了信件從主機傳遞到主機時需要的格式化方式。它的主要用途是為信件提供規(guī)范化的格式,使不同類型的網絡可以相互傳遞電子郵件。該標準的最新文本是RFC2822。 .RFC822規(guī)定,電子郵件信件的內容全部由ASCII字符組成,就是通常所說的文本文件, 從組織上看,RFC822將信件內容結構

13、分為信頭和信體兩大部分,中間用一個空白行。對于一行的字符數,有一個1000/80的限制規(guī)則。對于信件的行數,RFC822沒有特別的限制, .下面是一個電子郵件信件內容文本的實例,可以大致說明頭部行的形式,頭部的行由關鍵字和冒號開始,頭部和正文部分由空行分隔開。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),緊跟冒號: (colon),后跟字段體(field body),最后以回車換行符(CRLF)終止。即信頭字段 = 字段名:字段體 .2結構化字段和非結構化字段結構化字段和非結構化字段信頭字段大體可以分為結構化字段和非結構化字段兩種。結構化字段有特定的格式,由語法分析程序檢測。非結構化的字段含有任意的數據,沒有固定格式。 .3信頭字段的元素信頭字段的元

15、素盡管Email信件的總體結構非常簡單,但一些信頭字段的結構是很復雜的。下面介紹一些大多數字段共有的元素。(1)空白符(2)注解(3)字段折疊(4)字段大小寫 .4標準的信頭字段標準的信頭字段(1)與發(fā)信方有關的信頭字段寫信人字段 說明信件的原始創(chuàng)建者,給出他的電子信箱地址。創(chuàng)建者對信件的原始內容負責。格式:From:mailbox 舉例:From: .發(fā)送者字段 說明實際提交發(fā)送這個信件的人,給出他的電子信箱地址。當發(fā)信人與寫信人不一樣時使用。比如,秘書替經理發(fā)信。發(fā)送者對發(fā)送負責。格式:Sender:mailbox 舉例:From: Sender: .回復字段 指定應當把回信發(fā)到哪里。如果

16、有此字段,回信將會發(fā)給它指定的郵箱,而不會發(fā)給From字段指定的郵箱。比如,發(fā)送的是經理的信,但回信應交辦公室處理。格式:Reply-TO:mailbox 舉例:From: Reply-TO: .(2)與收信方有關的信頭字段收信人字段 指定主要收信人的郵箱地址,可以是多個郵箱地址的列表,地址中間用逗號隔開。格式:TO:mailbox list 舉例:TO: .抄送字段 指定此信件要同時發(fā)給哪些人,也稱為抄送。也可以使用郵箱地址列表,抄送給多個人。格式:Cc:mailbox list 舉例:Cc: 密抄字段 指定此信件要同時秘密發(fā)給哪些人,也稱為密件抄送。也可以使用郵箱地址列表,密抄給多個人。格

17、式:Bcc:mailbox list .(3)其它的信頭字段日期字段 Date字段含有電子郵件創(chuàng)建的日期和時間。格式:Date:date-time 舉例:Date:Tue,04 Dec 2004 16:18:08 +800 信件主題字段 描述信件的主題。當回復信件時,通常在主題前面增加“Re:”前綴,標記為該信件為回復信件:當信件被轉發(fā)時,通常在主題文字前面加上“Fw:”,“Fwd:”這樣的前綴。格式:Subject:*text 舉例:Subject:Hello! Subject:Re:Hello! .接受字段 是投遞信件的特定郵件服務器所作的記錄。處理郵件投遞的每個服務器必須給它處理的每個信

18、頭的前面加一個Received字段,用以描述信件到達目的地所經過的路徑以及相關信息。當跟蹤各個電子郵件問題時,這個信息很有幫助。格式:Received:from domain /發(fā)送主機by domain /接收主機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 .注釋字段 用于把一個注解添加到信件中。格式:Comments:*text 重發(fā)字段 當需要把收到的信件重發(fā)給另一組收信人的時候,可以保持整個原始信件不變,并簡單地產生重

19、發(fā)信件所要求的新信頭字段。為避免與以前的字段相混。新添加的信頭字段都加上Resent-前綴字符串,它們的語法與未加前綴的同名字段相同。格式:Resent-* 舉例:Resent-From Resent-Sender Resent-date Resent-Reply-To .信件標識字段 用于表示一個信件唯一標識,該字段通常有Smtp服務器生成,這個值通常是唯一的。形式根據使用的軟件而定。通常左邊是標識符,右邊指定計算機名。格式:Message-ID:msg-id .5擴展的信頭字段擴展的信頭字段如果想在信頭中加入RFC822中沒有規(guī)定的字段,就需要創(chuàng)建非標準字段。方法非常簡單,只要在自定義的信

20、頭字段名的前面使用X-前綴。RFC822將這種方法稱為擴展字段。事實上已經有許多擴展字段被廣泛應用,但沒有標準定義。例如:X-LOOP字段X-Mailer字段 .6信頭中必須要有的字段信頭中必須要有的字段 在創(chuàng)建信件時,必須使用Date或Resent-Date字段指定創(chuàng)建信件的日期,必須使用From字段指定創(chuàng)建該信件的人或程序的信箱,必須至少使用TO、CC或Bcc中的一個,或者與它們等效的Resent-TO,Resent-CC,Resent-Bcc中的一個,來指定接收信件的人。 除了這些創(chuàng)建信件時要求的信頭以外,每個處理信件的郵件傳輸代理(MTA)必須在它處理的信件頭部開始處加一個Receiv

21、ed字段,就好像打了一個中轉郵戳,這就是我們通常在許多信件的開始看到許多個Received字段的原因。 .9.3.3 構造和分析符合構造和分析符合RFC822標準的電子信件標準的電子信件1信件的構造信件的構造 發(fā)送電子郵件的程序要進行電子信件的構造。 信件主要分為兩大部分:信頭和信體,在兩部分之間用空白行隔開。 先構造信頭,信頭的必需字段有:一個Date字段,一個From字段,最少一個收信人字段。也可以根據需要加入其它的字段。信體部分比較簡單,按照文本文件的方法編寫就行。對于較長的信頭字段或信體行,可以使用折疊的方法,把它們變?yōu)?0字符以內的行。 .2信件的語法分析信件的語法分析 接收郵件的程

22、序要對郵件進行結構和語法分析。 信件的語法分析是構造信件的逆過程,通過分析,從中提取必要的信息,使用戶最終看到的不是軟件接收下來的原始信件,而是經過處理的有條理的信件內容。 一般首先將存在折疊的字段展開,將跨多行的字段去掉折疊字符合成一個完整的字段,并在信頭中與其它字段分隔開來。去掉折疊的方法是將續(xù)行上面一行末尾的CFLF符替換成空格符。其次對字段進行處理,將字段頭和字段體分離開。然后顯示相關字段的內容。最后提取信件的正文內容。信件體和信頭之間以空白行分開,根據這個特點可以很容易地將信頭和信體區(qū)分開來。 .9.4 MIME編碼解碼與發(fā)送附件編碼解碼與發(fā)送附件 為了能利用電子郵件傳送各種信息,在

23、RFC1341中提出了一種方法,并在RFC2045至RFC2049中作了進一步的完善,這就是多用途Internet郵件擴展(Multipurpose Internet Mail Extensions),簡稱MIME。已經成為電子郵件的標準。按照MIME標準構造的郵件稱為MIME郵件,或MIME信件,有時也稱為MIME實體(MIME entity)。 MIME的基本思想是:第一,不改動SMTP和POP3等電子郵件傳輸協議;第二,仍然要繼續(xù)使用RFC822的格式來傳輸郵件。 .圖9.4 MIME與電子郵件協議之間的關系 .MIME主要包括三部分內容(1)擴展了可以在郵件中使用的信頭字段。這些新定義

24、的信頭字段說明了MIME的版本,郵件內容的類型,編碼方式,以及郵件的標識和描述等信息。(2)定義了郵件信體的格式,給出了多媒體電子郵件的標準化表示方法,為信體增加了結構。而在RFC822中,對郵件信體沒有作任何結構方面的規(guī)定。(3)定義了傳送編碼方法,可以將任何格式的內容轉換為符合RFC822的ASCII文本格式。按照MIME規(guī)范,可以構造復雜的郵件,發(fā)送附件就是利用MIME實現的。 .9.4.2 MIME定義的新的信頭字段定義的新的信頭字段MIME定義了5個新的信頭字段,可以與原有信頭字段一樣,用在RF822郵件的首部中。1MIME版本信頭字段版本信頭字段格式:MIME-Version:1.

25、0 此字段用于標識使用的MIME版本號,目前MIME只有1.0版。如果是MIME郵件,就必須有MIME版本信頭字段;如無此行,則說明郵件是原來那種RFC822的英文文本。設置這個字段是為了將來出現更高的MIME版本號時,解決發(fā)送、接收軟件雙方的兼容性問題。 .2郵件唯一標識信頭字段郵件唯一標識信頭字段格式:Content-ID:唯一標識信件的字符串 此字段提供一種唯一標識MIME實體的方法,與Message-ID信頭字段類似。借助這個唯一標識,可以實現在一個MIME實體中引用其他的MIME實體。如果郵件的內容類型是Message/External-body,就需要使用此字段;對于其他類型,這個

26、字段是可選的。 .3郵件內容描述信頭字段郵件內容描述信頭字段格式:Content-Description: 描述文本 描述文本是可讀的字符串,簡要說明MIME郵件的內容或主題,收信人可以據此決定是否值得解碼和閱讀該郵件。 .4MIME郵件的內容類型信頭字段郵件的內容類型信頭字段格式:Content-Type:主類別標識符/子類別標識符 ;參數列表 例如:Content-Type: Text/Plain; Charset = “gb2312”此字段說明特定的MIME實體中所包含數據的類型,類型不同,郵件體的內部結構也隨之不同。它也說明了郵件的性質,是MIME中的主要字段,在9.4.3節(jié)中詳述。

27、.5內容傳送編碼方式信頭字段內容傳送編碼方式信頭字段格式:Content-Transfer-Encoding: 編碼方式標識符 指定在傳送郵件時,如何對郵件的主體進行編碼。在9.4.4節(jié)中詳述。.9.4.3 MIME郵件的內容類型郵件的內容類型1概述概述Content-Type是MIME對RFC822擴展的最主要的信頭字段,用于指定MIME郵件內容的類型,包含豐富的信息。Content-Type信頭字段的目的是充分地描述包含在信體中的數據,使得接收用戶代理能夠選擇適當的代理或機制來將這些數據呈現給用戶,或者,用正確的方法處理這些數據。這個字段的值叫做媒體類型(media type)。本節(jié)對這個

28、字段進行詳細的說明。它的一般格式是:Content-Type:郵件內容媒體主類型名/子類型名;參數列表 .這個字段由三部分組成,第一部分是關鍵字第二部分是郵件內容媒體主類型名(media type identifiers)和子類型名(subtype identifiers),說明郵件內容的媒體類型第三部分,是一個以分號隔開的參數列表,格式是:;參數名 = 參數值;參數名 = 參數值;.例如,Content-Type:text/HTML;charset = “GB2312”在RFC2046中定義了7個基本的內容主類型(top-level media types),每一種都有一個或多個子類型,共計

29、15個子類型,表9.1列出了它們的標識符, .表9.1 RFC2046中定義的郵件內容類型和子類型主類型標識符子類型標識符說明Textplain不包含格式化信息的無格式化文本enrich包含簡單格式化標記的文本ImagegifGIF格式的圖像jpegJPEG格式的圖像Audiobasic用PCM(脈碼調制)獲得的音頻數據VideompegMPEG格式的影片Applicationoctet-stream不加解釋的不間斷的字節(jié)序列postscriptPostScript格式的可打印文檔Messagerfc822MIME RFC822郵件partial為了傳輸而講一個郵件分成幾個external-b

30、ody必須從其它地方獲取郵件的內容Multipartmixed按照特定順序的幾個獨立不發(fā)alternative不同格式的同一郵件parallel必須同時讀取的幾個不發(fā)digest每一個不發(fā)是一個完整的RFC822郵件.2Text媒體類型媒體類型3image媒體類型媒體類型4Audio媒體類型媒體類型5Video媒體類型媒體類型6Application媒體類型媒體類型7Message媒體類型媒體類型8Message/external-body媒體類型的參數及使用媒體類型的參數及使用9Multipart媒體類型媒體類型.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編碼算法編碼算法在進行Base64的編碼時,首先要將被編碼的數據看成一個字節(jié)序列,不分行。然后按照以下三個步驟反復進行編碼。第一步:順次從要編碼的字節(jié)序列數據中,取出3個字節(jié),作為一組,該組包含24bit。第二步:將一組的24個bit,再順次分為四個6b

32、it的小組。并在每小組的前面補兩個零,形成四個字節(jié)。顯然這4個字節(jié)的值都在0-63范圍內。第三步:根據小組的每個字節(jié)的數值,按照表9.2的對應關系,將它們分別轉換為對應的可打印ASCII字符。順次對要編碼的數據字節(jié)序列,重復進行以上處理,直到所有的數據編碼完成為止。 .值 字符值 字符 值 字符值 字符 值 字符值 字符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編碼.此外,編碼過程中還需要注意兩點:(1)如何將編碼后的文本行控制在76個字符以內?按照RFC822的要求,應當將編碼后的文本行控制在76個字符以內。這只需要在編碼后的字符序列中,每76個字符插入一組CRLF(回車換行),然后就可以發(fā)送,在接受端譯碼時,應首先將碰到的CRLF符刪除,再按照Base64的方法譯碼。在原來要編碼的數據中可能有CR(0A

34、)和LF(0D)字符,但它們經過編碼后,變成了“K”和“N”,不會與后來插入的CRLF字符相混。 .(2)編碼時最后一組不滿三個字節(jié)怎么辦?Base64編碼時,按照三個字節(jié)一組進行,最后一組就有可能剩下1個或2個字節(jié)。編碼時,一方面對有效的數據要進行編碼,另一方面要讓接收端能判斷出最后一組剩下的有效數據究竟有幾個字節(jié)。方法是:首先補充全零的填充字節(jié),將最后一組補夠3個字節(jié),然后按照上述方法進行編碼,在第三步映射成字符后,要將編碼后的末尾一個或兩個字節(jié)替換為“=”字符。 .如果最后一組只剩一個數據字節(jié),那么產生的4個編碼數據中,只有前兩個帶有剩余數據字節(jié)的位,就應將4個編碼數據的后兩個字節(jié)都替換

35、成等號。如果最后一組剩下兩個字節(jié),那么產生的4個編碼數據中,前三個帶有剩余數據字節(jié)的位,這時就將4個編碼數據的最后一個字節(jié)替換成等號。注意到,等號并不包含在上面的轉換表中,接收端根據等號的數目,就可以判知最后一組中有效的字節(jié)數,從而正確地譯碼。 .3Quoted-printable編碼算法編碼算法這種編碼稱為可打印的引用編碼(Quoted-printable encoding),被編碼的數據以8BIT的字節(jié)為單位,這種編碼方法的要點就是對于所有可打印的ASCII碼,除了特殊符號“=”以外,都不改變。編碼算法的要點是:(1)如果被編碼數據字節(jié)的值在33到60之間(字符!至字符至字符),這部分字符

36、是可打印的,則該數據字節(jié)編碼為7bit的對應ASCII字符,實際就是將最高位去掉。 .(2)其他的數據,包括“=”字符,空格,ASCII碼在0-32的不可打印字符,以及非ASCII碼的數據,都必須進行編碼。被編碼的數據以8bit的字節(jié)為單位,先將每個字節(jié)的二進制代碼用兩個16進制數字表示,然后在前面加上一個等號“=”,就是該字節(jié)的編碼。例如,字節(jié)值12被編碼為 “=0C”,字節(jié)值61被編碼為 “=3D”。再比如,漢字“系統”的二進制代碼是:11001111 10110101 11001101 10110011,其16進制數字表示為:CFB5CDB3,相應的Quoted-printable編碼表

37、示為:=CF=B5=CD=B3。等號的二進制代碼是00111101,它的Quoted-printable編碼是=3D?;剀嚪痪幋a為=0D,換行符被編碼為=0A。要注意,16進制數據的表示用字母表 “0 1 2 3 4 5 6 7 8 9 A B C D E F”,即必須用大寫字母。 .(3)如果要將編碼后的數據分割成76字符的行,可以在分割處插入等號“=”和CRLF。此等號也要計算在76個字符中。例如,ABCDEFGHEJKLMNOPQRSTUVWXYZ 經過編碼后將此行變成較短的形式:ABCDEFG=HEJKLMNOPQRSTUV=WXYZ容易看出,接收端只要將插入的分割字符刪掉,就很容易

38、將它們恢復成原來的樣子。 .9.5 POP3與接收電子郵件與接收電子郵件9.5.1 POP3協議協議用來接收電子郵件的POP郵局協議最初是在1984年發(fā)表的RFC918中定義的,1985年的RFC937發(fā)表了它的第二個版本。隨著POP協議的廣泛使用,1988年的RFC1081又發(fā)表了它的第三版本,簡稱POP3,這個版本又在RFC1225,RFC1460,RFC1725,RFC1939中幾經修訂,其中RFC1939是當前的POP3標準。 .9.5.2 POP3的會話過程的會話過程 圖9.5 POP3會話 .POP也使用客戶/服務器工作模式,在接收郵件的用戶的PC機中,運行POP客戶程序,在用戶所

39、連接的ISP的郵件服務器中,運行POP服務程序,二者之間按照POP協議相互發(fā)送信息,POP客戶發(fā)送給POP服務器的消息稱為POP命令,POP服務器返回的消息稱為POP響應。交互的過程稱為POP會話。例如:(Connect to the POP3 Server .) /首先連接到POP3服務器S: +OK POP3 server ready /服務器已經準備好C: USER Wang /用戶名是Wang .S: +OKC: PASS vegetables /口令是vegetablesS: +OK login successful /客戶登錄成功了C: LIST /請列出信箱中的信件清單 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 /結束會話,再見S: +OK POP3 server disconnecting /好,POP3服務器斷開連接 .在上面的對話過程中,C:后面是接收郵件的客戶端軟件發(fā)送的命令,S:后面是POP服務器的應答,/后面是注釋。從這個例子中可以看出POP會話的特點:會話

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論