作者:Kartic Krishnamurthy 譯者:limodou
"好,如何創建符合MIME的信息呢?"
通過上面的一般性的描述,讓我們現在看一下所謂的MIME信息到底是什麼!
最簡單的MIME信息
這個信息沒有任何段,也就是,沒有附件。然而,因為它是一個MIME消息,它必須有必要的頭。
From: php(做為現在的主流開發語言)@php(做為現在的主流開發語言).net
To: Alex (the Great) <[email protected]>
Subject: Bucephalus
MIME-Version: 1.0
Hello Alexander,
Hows Bucephalus doing?
這裡面沒有什麼,它只是一個簡單的擁有MIME頭的符合RFC-822 的信息(文本郵件)。注意,如果沒有
指定Content-Type頭,則假設為Content-Type: text/plain;charset=us-ascii!當然,它有些簡單,復雜
一些的如下:
From: Alex (the Great) <[email protected]>
To: php(做為現在的主流開發語言)@php(做為現在的主流開發語言).net
Subject: re: Bucephalus
MIME-Version: 1.0
Content-Type: image/jpg;
name=buce.jpg
Content-Transfer-Encoding: base64
Content-Description: Take a look at him yourself
<.....base64 encoded jpg image of Bucephalus...>
"嗨,但是我想發送一個word文檔和一張我的小狗的圖片在同一封郵件中... !"一個用戶說!如果是真
的,上面的那個例子就太簡單了,並且它沒有足夠的內容來支持愛好者和現代郵件處理方面的需要。實際上,
許多的郵件客戶端軟件甚至不能顯示描述字段!
這就是我們所面臨的"多部分信息"。
多部分信息(Multipart Messages)
這個概念允許在一封郵件中發送多條項目。例如,假設Alexander想要給php(做為現在的主流開發語言)@php(做為現在的主流開發語言).net發送一封他的馬的
照片的郵件,同時還附帶有馬的家族圖譜及精彩的說明!這樣一個簡單的要求沒有多部分消息的概念是無法
被滿足的。在這種情況下,我們創建了一個使用Content-Type的信息頭的封裝來支持郵件的不同部分,以便
收信人得到圖片,家族圖譜和精彩的說明!
Content-Type 頭現在擁有一個"multipart"的值,它表示這是一個完整的郵件信息並且這個頭只封裝了
信息。而且它還有一個"mixed"的子類型(畢竟圖片,家族圖譜和7bit文本信息是不同的類型,對嗎?)。
讓我們看一下整個圖片看上去象:
From: Alex (the Great) <[email protected]>
To: php(做為現在的主流開發語言)@php(做為現在的主流開發語言).net
Subject: re: Bucephalus
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="XX-1234DED00099A";
Content-Transfer-Encoding: 7bit
This is a MIME Encoded Message
--XX-1234DED00099A
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hi php(做為現在的主流開發語言),
Attached you will find my horse, Bucephalus, pedigree chart and photo.
Alex
--XX-1234DED00099A
Content-Type: image/jpg;
name="buce.jpg";
Content-Transfer-Encoding: base64
Content-Description: "A photo of Bucephalus"
<.....base64 encoded jpg image of Bucephalus...>
--XX-1234DED00099A
Content-Type: application/octet-stream;
name="pedigree.doc"
Content-Transfer-Encoding: base64
Content-Description: "Pedigree Chart of the great horse"
<.....base64 encoded doc (pedigree.doc) of Bucephalus...>
--XX-1234DED00099A--
喲,看上去很復雜,不是嗎?不管怎樣,讓我們浏覽一遍細節吧:
如果你注意到了在MIME信息頭中的Content-Transfer-Encoding,為"7bit"。因為Content-Type為
multipart/mixed,編碼應該是7bit,8bit或二進制中的一種,7bit是一種廣泛使用的格式。
象這樣一條信息包含了多種信息。客戶程序是如何知道JPG圖片,文檔和普通文本之間的區別呢?你會
注意到在Content-Type後面有一個boundary="XX-1234DED00099A"參數。這個值用來分離郵件中的不同
部分。它叫做MIME邊界標記。邊界標記的值必須盡可能的唯一,以免在超出郵件范圍時發生混亂。