




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第10章章 電子郵件協議與編程電子郵件協議與編程 本章首先引見電子郵件系統的構成和任務本章首先引見電子郵件系統的構成和任務原理,然后分析簡單郵件傳送協議原理,然后分析簡單郵件傳送協議SMTP,接著表達接著表達RFC822規定的純文本電子郵件信規定的純文本電子郵件信件的格式,詳細闡明了件的格式,詳細闡明了MIME多媒體郵件格多媒體郵件格式擴展,分析了接納電子郵件的式擴展,分析了接納電子郵件的POP3郵局郵局協議,最后給出了兩個編程實例。經過本章協議,最后給出了兩個編程實例。經過本章的學習,該當充分認識運用層協議在網絡編的學習,該當充分認識運用層協議在網絡編程中的重要性,可以說,網絡編程就是運用
2、程中的重要性,可以說,網絡編程就是運用層協議的實現。層協議的實現。 10.1 電子郵件系統的任務原理電子郵件系統的任務原理10.1.1 電子郵件的特點電子郵件的特點電子郵件電子郵件electronic mail,簡稱是因,簡稱是因特網上運用最多的一種運用,它為用戶在因特網上運用最多的一種運用,它為用戶在因特網上設立了存放郵件的電子郵箱,發信人特網上設立了存放郵件的電子郵箱,發信人可以隨時將電子郵件發送到收信人的電子郵可以隨時將電子郵件發送到收信人的電子郵箱,收信人也可以隨時上網讀取,發信人與箱,收信人也可以隨時上網讀取,發信人與收信人以異步的方式通訊。收信人以異步的方式通訊。 10.1.2 電
3、子郵件系統的構成電子郵件系統的構成一個電子郵件系統包括三個主要的構件,即用戶代理,郵件一個電子郵件系統包括三個主要的構件,即用戶代理,郵件音訊傳輸代理,和電子郵件運用的協議。如圖音訊傳輸代理,和電子郵件運用的協議。如圖10.1所示:所示: 圖10.1 電子郵件系統的構成 10.1.3 電子郵件系統的實現 圖10.2 電子郵件的發送與接納過程 從以上的分析可以了解電子郵件系統的特點:是一種異步的通訊系統,不像,通話的雙方都必需在場。運用方便,傳輸迅速,費用低廉,不僅能傳輸文字信息,還能附上聲音和圖像。 在電子郵件系統的實現中,ISP的效力器必需7X24小時地不延續地運轉,這樣才干保證用戶可以隨時
4、發送和接納信件,而發送或接納電子郵件的用戶那么隨意。 10.2 簡單郵件傳送協議簡單郵件傳送協議SMTP10.2.1 概述概述 簡單郵件傳送協議簡單郵件傳送協議SMTPSimple Mail Transfer Protocol是因特網的正式規范,最初是因特網的正式規范,最初在在1982年由年由RFC821規定,目前它的最高版本是規定,目前它的最高版本是RFC2821。 SMTP協議采用協議采用C/S方式,公用于電子郵件的發方式,公用于電子郵件的發送,規定了發信人把郵件發送到收信人的電子郵箱的送,規定了發信人把郵件發送到收信人的電子郵箱的全過程中,全過程中,SMTP客戶與客戶與SMTP效力器這兩
5、個相互通效力器這兩個相互通訊的進程之間應如何交換信息。即規定了訊的進程之間應如何交換信息。即規定了SMTP的會的會話過程。用戶直接運用的是用于編寫和發送的客戶端話過程。用戶直接運用的是用于編寫和發送的客戶端軟件,而通常的軟件,而通常的SMTP效力器運轉在遠程站點上??托Яζ鬟\轉在遠程站點上。客戶戶/效力器之間的通訊是經過效力器之間的通訊是經過TCP/IP協議進展的。協議進展的。 10.2.2 SMTP客戶與客戶與SMTP效力器之間的會話效力器之間的會話1SMTP會話會話如圖如圖10.3,闡明了,闡明了SMTP客戶與客戶與SMTP效力器之間的會話效力器之間的會話 圖10.3 SMTP客戶與SMT
6、P效力器之間的會話 2SMTP命令命令 普通是客戶自動,首先發送。普通是客戶自動,首先發送。SMTP客戶發往客戶發往SMTP效力器的信息稱為效力器的信息稱為SMTP命令。在命令。在RFC821中,中,SMTP協議規定了協議規定了14種命令。種命令。 SMTP命令的普通的格式是:命令的普通的格式是: 命令關鍵字命令關鍵字 參數參數 其中,命令關鍵字普通是四個字母,是一個英文動其中,命令關鍵字普通是四個字母,是一個英文動詞的縮寫。參數隨命令而異,命令該當以回車換行詞的縮寫。參數隨命令而異,命令該當以回車換行符終了。符終了。 比如比如 HELO WANG 3SMTP應對應對 SMTP效力器收到命令后
7、,前往給效力器收到命令后,前往給SMTP客戶的客戶的信息,稱為信息,稱為SMTP應對??蛻裘看伟l送一條應對??蛻裘看伟l送一條SMTP命令后,效力器給客戶前往一條呼應。命令后,效力器給客戶前往一條呼應。SMTP規定規定了了23種呼應碼。種呼應碼。 SMTP應對都是以一個呼應碼開頭,后面接著呼應對都是以一個呼應碼開頭,后面接著呼應的描畫信息,假設應的描畫信息,假設SMTP效力器不一樣,呼應的效力器不一樣,呼應的描畫信息能夠不一樣,描畫信息能夠不一樣,SMTP應對的普通格式是:應對的普通格式是: 呼應碼呼應碼 呼應的文本描畫信息呼應的文本描畫信息 其中,呼應碼為其中,呼應碼為3位數字,與描畫信息文本
8、之間位數字,與描畫信息文本之間有一個空格,有一個空格, 10.2.3 常用的常用的SMTP命令命令1SMTP客戶問候客戶問候SMTP效力器效力器命令格式:命令格式:HELO 發送方的主機名發送方的主機名 2郵件來自何處,闡明發信人的電子郵件地址郵件來自何處,闡明發信人的電子郵件地址命令格式:命令格式:MAIL FROM:發信人的電子郵件地址:發信人的電子郵件地址 3闡明收信人的電子郵件地址闡明收信人的電子郵件地址命 令 格 式 :命 令 格 式 : R C P T T O : 收 信 人 的 電 子 郵 箱 地 址: 收 信 人 的 電 子 郵 箱 地 址 4懇求發送郵件內容懇求發送郵件內容
9、命令格式:命令格式:DATA 5空操作空操作命令格式:命令格式:NOOP 6驗證電子信箱能否合法驗證電子信箱能否合法命令格式:命令格式:VRFY 電子信箱地址電子信箱地址 7復位復位SMTP效力器效力器命令格式:命令格式:RSET 8懇求效力器發回協助信息懇求效力器發回協助信息命令格式:命令格式:HELP 或者或者 HELP 命令關鍵字命令關鍵字 9退出會話退出會話命令格式:命令格式:QUIT 10.2.4 常用的常用的SMTP呼應碼呼應碼211 系統形狀或系統協助應對。系統形狀或系統協助應對。214 協助信息協助信息220 效力就緒。效力就緒。221 效力器封鎖傳輸通道。效力器封鎖傳輸通道。
10、250 懇求的郵件操作曾經完成。懇求的郵件操作曾經完成。251 用戶不是本地的,將按照前向途徑用戶不是本地的,將按照前向途徑forwaed-path轉發。轉發。3 5 4 啟 動 郵 件 輸 入 , 要 求 郵 件 文 本 要 用啟 動 郵 件 輸 入 , 要 求 郵 件 文 本 要 用終了。終了。421 效力不可運用,封鎖傳輸通道。效力不可運用,封鎖傳輸通道。450 沒有執行懇求的郵箱操作,由于信箱不可用。沒有執行懇求的郵箱操作,由于信箱不可用。451 懇求的操作曾經終止,由于在處置的過程中出現了錯誤。 452 懇求的操作沒有發生,由于系統的存儲空間不夠,500 語法錯誤,命令不可識別。50
11、1 參數或變元中存在著語法錯誤。502 命令不能實現。503 錯誤的命令序列504 命令的參數不能實現。550 懇求的操作不能發生,信箱不可用。551 用戶不在本地,請嘗試發送到前向途徑forwaed-path。552 懇求的郵件操作終止,超出存儲分配。553 懇求的操作不能執行,由于信箱語法錯誤。 554 事務失敗。 10.2.5 SMTP的會話過程的會話過程SMTP客戶與客戶與SMTP效力器的會話過程分為三個階效力器的會話過程分為三個階段,先舉例闡明。以下每行前面的段,先舉例闡明。以下每行前面的C代表代表SMTP客戶客戶發送的命令,發送的命令,S代表效力器發回的呼應。每行代表效力器發回的呼
12、應。每行/后后面的內容是注釋。面的內容是注釋。C:HELO YE /他好!我是他好!我是YE。S:250 YE HELLO smtp.163,pleased to meet you /他好!他好!YE,很高興見到他,有,很高興見到他,有事嗎?事嗎?C:MAIL FROM:YE163 /我想發信,我的我想發信,我的地址是地址是YE163。S:250 ,Sender, accepted /行!有信他就發吧。行!有信他就發吧。C:RCPT ZHANG263 /我的信要發給ZHANG263。 S:250 , Recipient ok /行!曾經預備好。 C:DATA /我要發信件的內容了。S:354
13、Enter mail, end with . /發吧!結尾標志是兩個回車換行符夾個英文句點。C:客戶端按照電子郵件的格式發送郵件內容C:郵件內容發送終了,發送終了標志crlf & . & crlf/我的信曾經發完了S:250 ok, message saved /好的,他的信曾經存儲了。C:QUIT /再見 S:221 See you in cyberspace /再見 在上面的對話過程中,粗體字部分是發送郵件的客戶端軟件發送的內容,其他部分是SMTP效力器的應對內容。從中可以明顯看出SMTP會話具有以下特點:1會話的過程采用交互式的懇求應對方式,客戶發送命令,效力器回送應對。
14、2客戶發送的命令和效力器回送的應對都是純文本方式,有一定格式。3針對客戶的每個命令,效力器總要前往一定的呼應碼,表示效力器能否接受或執行了客戶端命令。 4會話過程有一定的順序 10.2.6 運用運用Winsock來實現電子郵件客戶與效力來實現電子郵件客戶與效力器的會話器的會話1啟動啟動SMTP效力器,在指定的傳輸層端口監聽效力器,在指定的傳輸層端口監聽客戶端的銜接懇求,為客戶端的銜接懇求,為SMTP效力器保管的端口是效力器保管的端口是25。2客戶端設置客戶端設置Winsock銜接的銜接的IP地址或域名,地址或域名,指定端口號,自動發出銜接懇求,銜接到指定端口號,自動發出銜接懇求,銜接到SMTP
15、效效力 器 。 比 如 , 網 易 的力 器 。 比 如 , 網 易 的 S M T P 效 力 器 的 域 名 是效 力 器 的 域 名 是smtp.163,監聽端口是,監聽端口是25。 3效力器接納客戶端的銜接懇求,并發回呼應。效力器接納客戶端的銜接懇求,并發回呼應。客戶端應收到類似客戶端應收到類似220 BigFox ESMTP service ready這樣的信息這樣的信息, 這就闡明客戶端曾經這就闡明客戶端曾經與效力器建立與效力器建立TCP/IP銜接,勝利地實現了第一步。銜接,勝利地實現了第一步。 4客戶端和效力器分別向對方發送數據。5客戶端或效力器分別讀取本人緩沖區中的數據。6以上
16、兩步是SMTP會話的主要部分,要按照SMTP協議的規定,按照一定順序,客戶向效力器發送命令,效力器向客戶發送應對,以上兩步要多次反復。 7會話終了,封鎖客戶端和效力器之間的銜接。 10.3 電子郵件信件構造詳述電子郵件信件構造詳述10.3.1 Internet文本信件的格式規范文本信件的格式規范- RFC822 在電子郵件系統的環境中,電子郵件信件是它傳在電子郵件系統的環境中,電子郵件信件是它傳送的對象。最早規定電子郵件信件內容構造的規范送的對象。最早規定電子郵件信件內容構造的規范是在是在1982發表的,稱作發表的,稱作RFC822,至今它依然是,至今它依然是Internet上電子郵件信件的當
17、前規范。上電子郵件信件的當前規范。RFC822定義了信件從主機傳送到主機時需求的格式化方式。定義了信件從主機傳送到主機時需求的格式化方式。它的主要用途是為信件提供規范化的格式,使不同它的主要用途是為信件提供規范化的格式,使不同類型的網絡可以相互傳送電子郵件。該規范的最新類型的網絡可以相互傳送電子郵件。該規范的最新文本是文本是RFC2822。 RFC822規定,電子郵件信件的內容全部由ASCII字符組成,就是通常所說的文本文件, 從組織上看,RFC822將信件內容構造分為信頭和信體兩大部分,中間用一個空白行。對于一行的字符數,有一個1000/80的限制規那么。對于信件的行數,RFC822沒有特別
18、的限制, 下面是一個電子郵件信件內容文本的實例,可以大致闡明頭部行的方式,頭部的行由關鍵字和冒號開場,頭部和正文部分由空行分隔開。From: John_Q_PublicfoobarTo: 912743.253843nonexistDate: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 me know which day would prefer.
19、john 10.3.2 信件的頭部信件的頭部1信頭的普通格式信頭的普通格式信頭由假設干信頭字段信頭由假設干信頭字段(header field)組成。組成。一切的信頭字段包括四部分,字段名一切的信頭字段包括四部分,字段名(field name),緊跟冒號,緊跟冒號: (colon),后跟字段體,后跟字段體(field body),最后以回車換行符,最后以回車換行符(CRLF)終止。終止。即即信頭字段信頭字段 = 字段名:字段體字段名:字段體 2構造化字段和非構造化字段構造化字段和非構造化字段信頭字段大體可以分為構造化字段和非構造化字信頭字段大體可以分為構造化字段和非構造化字段兩種。段兩種。構造化
20、字段有特定的格式,由語法分析程序檢測。構造化字段有特定的格式,由語法分析程序檢測。非構造化的字段含有恣意的數據,沒有固定格式。非構造化的字段含有恣意的數據,沒有固定格式。 3信頭字段的元素信頭字段的元素雖然雖然Email信件的總體構造非常簡單,但一些信頭信件的總體構造非常簡單,但一些信頭字段的構造是很復雜的。下面引見一些大多數字段字段的構造是很復雜的。下面引見一些大多數字段共有的元素。共有的元素。1空白符空白符2注解注解3字段折疊字段折疊 4字段大小寫字段大小寫 4規范的信頭字段規范的信頭字段1與發信方有關的信頭字段與發信方有關的信頭字段寫信人字段寫信人字段 闡明信件的原始創建者,給出他闡明信
21、件的原始創建者,給出他的電子信箱地址。創建者對信件的原始內容擔任。的電子信箱地址。創建者對信件的原始內容擔任。格式:格式:From:mailbox 舉例:舉例:From:wang163 發送者字段 闡明實踐提交發送這個信件的人,給出他的電子信箱地址。當發信人與寫信人不一樣時運用。比如,秘書替經理發信。發送者對發送擔任。格式:Sender:mailbox 舉例:From:wang163 Sender:lisina 回復字段 指定該當把回信發到哪里。假設有此字段,回信將會發給它指定的郵箱,而不會發給From字段指定的郵箱。比如,發送的是經理的信,但回信應交辦公室處置。格式:Reply-TO:mai
22、lbox 舉例:From:wang163 Reply-TO:zhaosoho 2與收信方有關的信頭字段收信人字段 指定主要收信人的郵箱地址,可以是多個郵箱地址的列表,地址中間用逗號隔開。格式:TO:mailbox list 舉例:TO:zhang263 抄送字段 指定此信件要同時發給哪些人,也稱為抄送。也可以運用郵箱地址列表,抄送給多個人。格式:Cc:mailbox list 舉例:Cc:zhang863 密抄字段 指定此信件要同時發給哪些人,也稱為密件抄送。也可以運用郵箱地址列表,密抄給多個人。格式:Bcc:mailbox list 3其它的信頭字段日期字段 Date字段含有電子郵件創建的日
23、期和時間。格式:Date:date-time 舉例:Date:Tue,04 Dec 2019 16:18:08 +800 信件主題字段 描畫信件的主題。當回復信件時,通常在主題前面添加“Re:前綴,標志為該信件為回復信件:當信件被轉發時,通常在主題文字前面加上“Fw:,“Fwd:這樣的前綴。格式:Subject:*text 舉例:Subject:Hello! Subject:Re:Hello! 接受字段 是投遞信件的特定郵件效力器所作的記錄。處置郵件投遞的每個效力器必需給它處置的每個信頭的前面加一個Received字段,用以描畫信件到達目的地所經過的途徑以及相關信息。當跟蹤各個電子郵件問題時,
24、這個信息很有協助。格式:Received:from domain /發送主機by domain /接納主機via atom /物理途徑id msg-id /接納者msg id舉例:Received:from wang195.0.0.1 by li129.5.0.4 Tue dec 2019 12:18:02 +800 注釋字段 用于把一個注解添加到信件中。格式:Comments:*text 重發字段 當需求把收到的信件重發給另一組收信人的時候,可以堅持整個原始信件不變,并簡單地產生重發信件所要求的新信頭字段。為防止與以前的字段相混。新添加的信頭字段都加上Resent-前綴字符串,它們的語法與未
25、加前綴的同名字段一樣。格式:Resent-* 舉例:Resent-From Resent-Sender Resent-date Resent-Reply-To 信件標識字段 用于表示一個信件獨一標識,該字段通常有Smtp效力器生成,這個值通常是獨一的。方式根據運用的軟件而定。通常左邊是標識符,右邊指定計算機名。格式:Message-ID:msg-id 5擴展的信頭字段擴展的信頭字段假設想在信頭中參與假設想在信頭中參與RFC822中沒有規定的字段,中沒有規定的字段,就需求創建非規范字段。方法非常簡單,只需在自就需求創建非規范字段。方法非常簡單,只需在自定義的信頭字段名的前面運用定義的信頭字段名的
26、前面運用X-前綴。前綴。RFC822將將這種方法稱為擴展字段。現實上曾經有許多擴展字這種方法稱為擴展字段。現實上曾經有許多擴展字段被廣泛運用,但沒有規范定義。例如:段被廣泛運用,但沒有規范定義。例如:X-LOOP字段字段 X-Mailer字段字段 6信頭中必需求有的字段信頭中必需求有的字段 在創建信件時,必需運用在創建信件時,必需運用Date或或Resent-Date字段指定創建信件的日期,必需運用字段指定創建信件的日期,必需運用From字段指字段指定創建該信件的人或程序的信箱,必需至少運用定創建該信件的人或程序的信箱,必需至少運用TO、CC或或Bcc中的一個,或者與它們等效的中的一個,或者與
27、它們等效的Resent-TO,Resent-CC,Resent-Bcc中的中的一個,來指定接納信件的人。一個,來指定接納信件的人。 除了這些創建信件時要求的信頭以外,每個處置除了這些創建信件時要求的信頭以外,每個處置信件的郵件傳輸代理信件的郵件傳輸代理(MTA)必需在它處置的信件頭必需在它處置的信件頭部開場處加一個部開場處加一個Received字段,就好似打了一個字段,就好似打了一個中轉郵戳,這就是我們通常在許多信件的開場看到中轉郵戳,這就是我們通常在許多信件的開場看到許多個許多個Received字段的緣由。字段的緣由。 10.3.3 構造和分析符合構造和分析符合RFC822規范的電子信件規范
28、的電子信件1信件的構造信件的構造 發送電子郵件的程序要進展電子信件的構造。發送電子郵件的程序要進展電子信件的構造。 信件主要分為兩大部分:信頭和信體,在兩部分之信件主要分為兩大部分:信頭和信體,在兩部分之間用空白行隔開。間用空白行隔開。 先構造信頭,信頭的必需字段有:一個先構造信頭,信頭的必需字段有:一個Date字字段,一個段,一個From字段,最少一個收信人字段。也可字段,最少一個收信人字段。也可以根據需求參與其它的字段。信體部分比較簡單,以根據需求參與其它的字段。信體部分比較簡單,按照文本文件的方法編寫就行。對于較長的信頭字按照文本文件的方法編寫就行。對于較長的信頭字段或信體行,可以運用折
29、疊的方法,把它們變為段或信體行,可以運用折疊的方法,把它們變為80字符以內的行。字符以內的行。 2信件的語法分析信件的語法分析 接納郵件的程序要對郵件進展構造和語法分析。接納郵件的程序要對郵件進展構造和語法分析。 信件的語法分析是構造信件的逆過程,經過分析,信件的語法分析是構造信件的逆過程,經過分析,從中提取必要的信息,運用戶最終看到的不是軟件從中提取必要的信息,運用戶最終看到的不是軟件接納下來的原始信件,而是經過處置的有條理的信接納下來的原始信件,而是經過處置的有條理的信件內容。件內容。 普通首先將存在折疊的字段展開,將跨多行的字普通首先將存在折疊的字段展開,將跨多行的字段去掉折疊字符合成一
30、個完好的字段,并在信頭中段去掉折疊字符合成一個完好的字段,并在信頭中與其它字段分隔開來。去掉折疊的方法是將續行上與其它字段分隔開來。去掉折疊的方法是將續行上面一行末尾的面一行末尾的CFLF符交換成空格符。其次對字段進符交換成空格符。其次對字段進展處置,將字段頭和字段體別分開。然后顯示相關展處置,將字段頭和字段體別分開。然后顯示相關字段的內容。最后提取信件的正文內容。信件體和字段的內容。最后提取信件的正文內容。信件體和信頭之間以空白行分開,根據這個特點可以很容易信頭之間以空白行分開,根據這個特點可以很容易地將信頭和信體區分開來。地將信頭和信體區分開來。 10.4 MIME編碼解碼與發送附件編碼解
31、碼與發送附件 為了能利用電子郵件傳送各種信息,在為了能利用電子郵件傳送各種信息,在RFC1341中提出了一種方法,并在中提出了一種方法,并在RFC2045至至RFC2049中作了進一步的完善,這就是多用途中作了進一步的完善,這就是多用途Internet郵件郵件擴展擴展Multipurpose Internet Mail Extensions,簡稱,簡稱MIME。曾經成為電子郵件。曾經成為電子郵件的規范。按照的規范。按照MIME規范構造的郵件稱為規范構造的郵件稱為MIME郵郵件,或件,或MIME信件,有時也稱為信件,有時也稱為MIME實體實體(MIME entity)。 MIME的根本思想是:第
32、一,不改動的根本思想是:第一,不改動SMTP和和POP3等電子郵件傳輸協議;第二,依然要繼續運等電子郵件傳輸協議;第二,依然要繼續運用用RFC822的格式來傳輸郵件。的格式來傳輸郵件。 圖10.4 MIME與電子郵件協議之間的關系 MIME主要包括三部分內容1擴展了可以在郵件中運用的信頭字段。這些新定義的信頭字段闡明了MIME的版本,郵件內容的類型,編碼方式,以及郵件的標識和描畫等信息。2定義了郵件信體的格式,給出了多媒體電子郵件的規范化表示方法,為信體添加了構造。而在RFC822中,對郵件信體沒有作任何構造方面的規定。3定義了傳送編碼方法,可以將任何格式的內容轉換為符合RFC822的ASCI
33、I文本格式。按照MIME規范,可以構造復雜的郵件,發送附件就是利用MIME實現的。 10.4.2 MIME定義的新的信頭字段定義的新的信頭字段MIME定義了定義了5個新的信頭字段,可以與原有信頭個新的信頭字段,可以與原有信頭字段一樣,用在字段一樣,用在RF822郵件的首部中。郵件的首部中。1MIME版本信頭字段版本信頭字段格式:格式:MIME-Version:1.0 此字段用于標識運用的此字段用于標識運用的MIME版本號,目前版本號,目前MIME只需只需1.0版。假設是版。假設是MIME郵件,就必需有郵件,就必需有MIME版本信頭字段;如無此行,那么闡明郵件版本信頭字段;如無此行,那么闡明郵件
34、是原來那種是原來那種RFC822的英文文本。設置這個字段的英文文本。設置這個字段是為了未來出現更高的是為了未來出現更高的MIME版本號時,處理發版本號時,處理發送、接納軟件雙方的兼容性問題。送、接納軟件雙方的兼容性問題。 2郵件獨一標識信頭字段郵件獨一標識信頭字段格式:格式:Content-ID:獨一標識信件的字符串:獨一標識信件的字符串 此字段提供一種獨一標識此字段提供一種獨一標識MIME實體的方法,與實體的方法,與Message-ID信頭字段類似。借助這個獨一標識,信頭字段類似。借助這個獨一標識,可以實如今一個可以實如今一個MIME實體中援用其他的實體中援用其他的MIME實 體 。 假 設
35、 郵 件 的 內 容 類 型 是實 體 。 假 設 郵 件 的 內 容 類 型 是Message/External-body,就需求運用此字,就需求運用此字段;對于其他類型,這個字段是可選的。段;對于其他類型,這個字段是可選的。 3郵件內容描畫信頭字段郵件內容描畫信頭字段格式:格式:Content-Description: 描畫文本描畫文本 描畫文本是可讀的字符串,簡要闡明描畫文本是可讀的字符串,簡要闡明MIME郵件的郵件的內容或主題,收信人可以據此決議能否值得解碼和內容或主題,收信人可以據此決議能否值得解碼和閱讀該郵件。閱讀該郵件。 4MIME郵件的內容類型信頭字段郵件的內容類型信頭字段格式
36、:格式:Content-Type:主類別標識符主類別標識符/子類別標識子類別標識符符 ;參數列表;參數列表 例如:例如:Content-Type: Text/Plain; Charset = “gb2312此字段闡明特定的此字段闡明特定的MIME實體中所包含數據的類型,實體中所包含數據的類型,類型不同,郵件體的內部構造也隨之不同。它也闡類型不同,郵件體的內部構造也隨之不同。它也闡明了郵件的性質,是明了郵件的性質,是MIME中的主要字段,在中的主要字段,在10.4.3節中詳述。節中詳述。 5內容傳送編碼方式信頭字段內容傳送編碼方式信頭字段格式:格式:Content-Transfer-Encodi
37、ng: 編碼方編碼方式標識符式標識符 指定在傳送郵件時,如何對郵件的主體進展編碼。指定在傳送郵件時,如何對郵件的主體進展編碼。在在10.4.4節中詳述。節中詳述。10.4.3 MIME郵件的內容類型郵件的內容類型1概述概述Content-Type是是MIME對對RFC822擴展的最主要擴展的最主要的信頭字段,用于指定的信頭字段,用于指定MIME郵件內容的類型,包含郵件內容的類型,包含豐富的信息。豐富的信息。Content-Type信頭字段的目的是充信頭字段的目的是充分地描畫包含在信體中的數據,使得接納用戶代理可分地描畫包含在信體中的數據,使得接納用戶代理可以選擇適當的代理或機制來將這些數據呈現
38、給用戶,以選擇適當的代理或機制來將這些數據呈現給用戶,或者,用正確的方法處置這些數據。這個字段的值叫或者,用正確的方法處置這些數據。這個字段的值叫做媒體類型做媒體類型media type。本節對這個字段進。本節對這個字段進展詳細的闡明。它的普通格式是:展詳細的闡明。它的普通格式是:Content-Type:郵件內容媒體主類型名:郵件內容媒體主類型名/子類型子類型名名;參數列表;參數列表 這個字段由三部分組成,第一部分是關鍵字,第二部分是郵件內容媒體主類型名(media type identifiers)和子類型名(subtype identifiers),闡明郵件內容的媒體類型。第三部分,是一
39、個以分號隔開的參數列表,格式是:;參數名 = 參數值;參數名 = 參數值;.例如,Content-Type:text/HTML;charset = “GB2312在RFC2046中定義了7個根本的內容主類型top-level media types,每一種都有一個或多個子類型,合計15個子類型,表10.1列出了它們的標識符, 2Text媒體類型媒體類型3image媒體類型媒體類型4Audio媒體類型媒體類型5Video媒體類型媒體類型6Application媒體類型媒體類型7Message媒體類型媒體類型8Message/external-body媒體類型的參數及運媒體類型的參數及運用用9Mu
40、ltipart媒體類型媒體類型10.4.4 MIME郵件的編碼方式郵件的編碼方式1MIME編碼概述編碼概述17bit編碼方式編碼方式Content-Transfer-Encoding: 7bit28bit編碼方式編碼方式Content-Transfer-Encoding: 8bit3binary編碼方式編碼方式Content-Transfer-Encoding: binary4Base64編碼方式編碼方式 5Quoted-printable編碼方式編碼方式 2BASE64編碼算法編碼算法在進展在進展Base64的編碼時,首先要將被編碼的數據看的編碼時,首先要將被編碼的數據看成一個字節序列,不分
41、行。然后按照以下三個步驟反成一個字節序列,不分行。然后按照以下三個步驟反復進展編碼。復進展編碼。第一步:依次從要編碼的字節序列數據中,取出第一步:依次從要編碼的字節序列數據中,取出3個個字節,作為一組,該組包含字節,作為一組,該組包含24bit。第二步:將一組的第二步:將一組的24個個bit,再依次分為四個,再依次分為四個6bit的的小組。并在每小組的前面補兩個零,構成四個字節。小組。并在每小組的前面補兩個零,構成四個字節。顯然這顯然這4個字節的值都在個字節的值都在0-63范圍內。范圍內。第三步:根據小組的每個字節的數值,按照表第三步:根據小組的每個字節的數值,按照表10.4的對應關系,將它們
42、分別轉換為對應的可打印的對應關系,將它們分別轉換為對應的可打印ASCII字符。字符。依次對要編碼的數據字節序列,反復進展以上處置,依次對要編碼的數據字節序列,反復進展以上處置,直到一切的數據編碼完成為止。直到一切的數據編碼完成為止。 此外,編碼過程中還需求留意兩點:1如何將編碼后的文本行控制在76個字符以內?按照RFC822的要求,該當將編碼后的文本行控制在76個字符以內。這只需求在編碼后的字符序列中,每76個字符插入一組CRLF(回車換行),然后就可以發送,在接受端譯碼時,應首先將碰到的CRLF符刪除,再按照Base64的方法譯碼。在原來要編碼的數據中能夠有CR(0A)和LF(0D)字符,但
43、它們經過編碼后,變成了“K和“N,不會與后來插入的CRLF字符相混。 2編碼時最后一組不滿三個字節怎樣辦?Base64編碼時,按照三個字節一組進展,最后一組就有能夠剩下1個或2個字節。編碼時,一方面對有效的數據要進展編碼,另一方面要讓接納端能判別出最后一組剩下的有效數據終究有幾個字節。方法是:首先補充全零的填充字節,將最后一組補夠3個字節,然后按照上述方法進展編碼,在第三步映射成字符后,要將編碼后的末尾一個或兩個字節交換為“=字符。 假設最后一組只剩一個數據字節,那么產生的4個編碼數據中,只需前兩個帶有剩余數據字節的位,就應將4個編碼數據的后兩個字節都交換成等號。假設最后一組剩下兩個字節,那么
44、產生的4個編碼數據中,前三個帶有剩余數據字節的位,這時就將4個編碼數據的最后一個字節交換成等號。留意到,等號并不包含在上面的轉換表中,接納端根據等號的數目,就可以判知最后一組中有效的字節數,從而正確地譯碼。 3Quoted-printable編碼算法編碼算法這種編碼稱為可打印的援用編碼這種編碼稱為可打印的援用編碼(Quoted-printable encoding),被編碼的數據以,被編碼的數據以8BIT的字節為單位,這種編碼方法的要點就是對于一切的字節為單位,這種編碼方法的要點就是對于一切可打印的可打印的ASCII碼,除了特殊符號碼,除了特殊符號“=以外,都以外,都不改動。編碼算法的要點是:
45、不改動。編碼算法的要點是:1假設被編碼數據字節的值在假設被編碼數據字節的值在33到到60之間之間(字字符符!至字符至字符至字符至字符),這部分字符是可打印的,那么該數據字節編,這部分字符是可打印的,那么該數據字節編碼為碼為7bit的對應的對應ASCII字符,實踐就是將最高位字符,實踐就是將最高位去掉。去掉。 2其他的數據,包括“=字符,空格,ASCII碼在0-32的不可打印字符,以及非ASCII碼的數據,都必需進展編碼。被編碼的數據以8bit的字節為單位,先將每個字節的二進制代碼用兩個16進制數字表示,然后在前面加上一個等號“=,就是該字節的編碼。例如,字節值12被編碼為 “=0C,字節值61
46、被編碼為 “=3D。再比如,漢字“系統的二進制代碼是:11001111 10110101 11001101 10110011,其16進制數字表示為:CFB5CDB3,相應的Quoted-printable編碼表示為:=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個字符中
47、。例如,ABCDEFGHEJKLMNOPQRSTUVWXYZ 經過編碼后將此行變成較短的方式:ABCDEFG=HEJKLMNOPQRSTUV=WXYZ容易看出,接納端只需將插入的分割字符刪掉,就很容易將它們恢復成原來的樣子。 10.5 POP3與接納電子郵件與接納電子郵件10.5.1 POP3協議協議用來接納電子郵件的用來接納電子郵件的POP郵局協議最初是在郵局協議最初是在1984年發表的年發表的RFC918中定義的,中定義的,1985年的年的RFC937發表了它的第二個版本。隨著發表了它的第二個版本。隨著POP協議的廣泛運用,協議的廣泛運用,1988年的年的RFC1081又發表了它的第三版本
48、,簡又發表了它的第三版本,簡稱稱POP3,這個版本又在,這個版本又在RFC1225,RFC1460,RFC1725,RFC1939中幾經修訂,其中中幾經修訂,其中RFC1939是當前的是當前的POP3規范。規范。 10.5.2 POP3的會話過程 圖10.5 POP3會話 POP也運用客戶/效力器任務方式,在接納郵件的用戶的PC機中,運轉POP客戶程序,在用戶所銜接的ISP的郵件效力器中,運轉POP效力程序,二者之間按照POP協議相互發送信息,POP客戶發送給POP效力器的音訊稱為POP命令,POP效力器前往的音訊稱為POP呼應。交互的過程稱為POP會話。例如:(Connect to the
49、POP3 Server .) /首先銜接到POP3效力器S: +OK POP3 server ready /效力器曾經預備好C: USER Wang /用戶名是Wang S: +OKC: PASS vegetables /口令是vegetablesS: +OK login successful /客戶登錄勝利了C: LIST /請列出信箱中的信件清單 S: 1 AAAA /第一封信S: 2 BBBB /第二封信S: 3 CCCC /第三封信C: RETR 1 /取回第一封信S: +OK (send message 1) /好,發送第一封信C: DELE 1 /刪除第一封信S: +OK /好的C: RETR 2S: +OK (send message 2)C: DELE 2S: +OKC: QUIT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化藝術節社團組織策劃計劃
- 網絡編輯師證書努力與試題及答案分享
- 學校社團工作計劃培養領導力技巧
- 理財師考試核心理論試題及答案
- 逐步提升2025年特許金融分析師考試試題及答案
- 2025年銀行從業資格考試實操演練試題及答案
- 理財師備考過程中的案例分析與真實價值探討試題及答案
- 小語種證書考試常見錯誤試題及答案
- 2025年銀行從業資格證考察側重點試題及答案
- Unit4EatWellSectionB(2a-2c)教學設計人教版(2024)七年級英語下冊
- 《服務決定成敗》課件
- 2025年金剛石工具項目可行性研究報告
- 醫療器械年度培訓計劃
- 《定投指數基金有效性的實證探析》17000字(論文)
- 門診醫療技術操作規范
- 23年貴州省資格復審委托書
- 2025年河北省雄安新區事業單位招聘203人歷年高頻重點提升(共500題)附帶答案詳解
- 心肌炎病歷模板
- 舞蹈治療理論與實踐-洞察分析
- 退股資金分期退還合同樣本
- 自如租賃電子合同范例
評論
0/150
提交評論