電子郵件廣泛遵循的郵件技術規範。
MIME郵件由郵件頭和郵件體兩部分組成。
郵件頭包括:標題,送信人,收信人,建立日期,郵件體內容類型和郵件體編碼方式等內容。
郵件體包括:正文,超文本,內嵌數據和附件等內容。
MIME技術規範的完整內容由RFC 2045-2049定義,包括了信息格式、媒體類型、編碼方式等各方面的內容,本文只介紹其中的一些關鍵的格式和規範。
1.域
MIME郵件中的重要信息都記錄在郵件內的各個域中。
域的基本格式是 {域名}:{內容}。
一個域佔一行或多行,域的首行左側不能有空白字符,佔多行的域其後續行必須以空白字符開頭。
域的信息內容中還能夠包含屬性,屬性之間以「;」分隔,屬性格式是{屬性名}="{屬性值}"。
域的內容的編碼格式是"=?"+編碼名稱+"?"+B/Q+"?"+編碼後的字符序列+"?="。(B表明base64的編碼方式,Q表明quoted-printable的編碼方式)
2.Content-Type域
Content-Type域定義了郵件中各類內容的形式及屬性。
Content-Type域的基本格式是 Content-Type:{主類型}/{子類型}。
Content-Type的主類型分text,image,audio,video和application五種離散類型以及multiple和message兩種複合類型。
text類型有plain和html兩種經常使用的子類型。
multiple類型有mixed,alternative和related三種經常使用的子類型。
3.multiple類型
·multiple類型基本格式
multiple類型基本格式是 Content-Type: multipart/{子類型};boundary="{分段標識}"
三種子類型的對比:
------------------------------------------------------------------
|類型名 |郵件種類 |boundary做用 |
------------------------------------------------------------------
|multiple/mixed |有附件 |分隔各附件內容和郵件其餘內容 |
------------------------------------------------------------------
|multiple/alternative|有超文本 |分隔純文本,超文本和郵件其餘內容|
------------------------------------------------------------------
|multiple/related |有內嵌資源|分隔各內嵌資源和郵件其餘內容 |
------------------------------------------------------------------
·boundary屬性
multiple子類型中都定義了各自的boundary屬性,郵件中使用boundary中定義的字符串做爲標識,將郵件內容分紅不一樣的段,段內每一個字段以"--"+boundary中定義的字符串開始,父段則以"--"+boundary中定義的字符串+"--"結束,不一樣段之間用空行分隔。
·multiple類型的層次關係
------------------------------
|multiple/mixed |
------------------------------
| |multiple/related | |
------------------------------
| | |multiple/alternative| | |
------------------------------
| | |純文本正文 | | |
------------------------------
| | |超文本正文 | | |
------------------------------
| |內嵌資源 | |
------------------------------
|附件 |
------------------------------
4.Content-Transfer-Encoding域
Content-Transfer-Encoding域定義段內文字的編碼方式,不一樣段能夠有不一樣的編碼方式。
MIME郵件中的數據編碼廣泛採用base64和quoted-printable兩種編碼。
·base64編碼的算法
編碼的原則是將輸入數據所有轉換成由{'A'-'Z','a'-'z','0'-'9','+','/'}64個ASCII字符組成的字符序列。
編碼時將須要轉換的數據每次取出6bit,而後轉換成十進制數字,查詢64個ASCII字符組成的字典表,輸出對應位置的ASCII碼字符。每3個字節的數據內容會被轉換成4個字典中的ASCII碼字符。當轉換後的數據不是4的整倍數時,用"="來填充。
·quoted-printable編碼的算法
編碼的原則是將輸入的數據轉換成可打印的ASCII碼字符。
編碼時根據讀入內容來決定是否進行編碼,若是讀入的字節處於33-60,62-126範圍內,屬可直接打印的ASCII字符,則直接輸出,不然將該字節分爲兩個4bit,每一個用一個十六進制數來表示,而後再前面加上"=",每一個須要編碼的字節被轉換成三個字符來表示。html
轉載於:http://hankundev.blog.sohu.com/104046669.html算法