文章詳情頁
用PHP發(fā)送MIME郵件(二)
瀏覽:2日期:2023-12-29 17:55:20
作者:Kartic Krishnamurthy 譯者:limodou "好,如何創(chuàng)建符合MIME的信息呢?" 通過上面的一般性的描述,讓我們現(xiàn)在看一下所謂的MIME信息到底是什么! 最簡單的MIME信息 這個信息沒有任何段,也就是,沒有附件。然而,因?yàn)樗且粋€MIME消息,它必須有必要的頭。 From: php@php.net To: 'Alex (the Great)' <alex@greece.net> Subject: Bucephalus MIME-Version: 1.0 Hello Alexander, How's Bucephalus doing? 這里面沒有什么,它只是一個簡單的擁有MIME頭的符合RFC-822 的信息(文本郵件)。注意,如果沒有 指定Content-Type頭,則假設(shè)為Content-Type: text/plain;charset='us-ascii'!當(dāng)然,它有些簡單,復(fù)雜 一些的如下: From: 'Alex (the Great)' <alex@greece.net> 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...> "嗨,但是我想發(fā)送一個word文檔和一張我的小狗的圖片在同一封郵件中... !"一個用戶說!如果是真 的,上面的那個例子就太簡單了,并且它沒有足夠的內(nèi)容來支持愛好者和現(xiàn)代郵件處理方面的需要。實(shí)際上, 許多的郵件客戶端軟件甚至不能顯示描述字段! 這就是我們所面臨的"多部分信息"。 多部分信息(Multipart Messages) 這個概念允許在一封郵件中發(fā)送多條項(xiàng)目。例如,假設(shè)Alexander想要給php@php.net發(fā)送一封他的馬的 照片的郵件,同時還附帶有馬的家族圖譜及精彩的說明!這樣一個簡單的要求沒有多部分消息的概念是無法 被滿足的。在這種情況下,我們創(chuàng)建了一個使用Content-Type的信息頭的封裝來支持郵件的不同部分,以便 收信人得到圖片,家族圖譜和精彩的說明! Content-Type 頭現(xiàn)在擁有一個"multipart"的值,它表示這是一個完整的郵件信息并且這個頭只封裝了 信息。而且它還有一個"mixed"的子類型(畢竟圖片,家族圖譜和7bit文本信息是不同的類型,對嗎?)。 讓我們看一下整個圖片看上去象: From: 'Alex (the Great)' <alex@greece.net> 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-- 喲,看上去很復(fù)雜,不是嗎?不管怎樣,讓我們?yōu)g覽一遍細(xì)節(jié)吧: 如果你注意到了在MIME信息頭中的Content-Transfer-Encoding,為"7bit"。因?yàn)镃ontent-Type為 multipart/mixed,編碼應(yīng)該是7bit,8bit或二進(jìn)制中的一種,7bit是一種廣泛使用的格式。 象這樣一條信息包含了多種信息??蛻舫绦蚴侨绾沃繨PG圖片,文檔和普通文本之間的區(qū)別呢?你會 注意到在Content-Type后面有一個boundary="XX-1234DED00099A"參數(shù)。這個值用來分離郵件中的不同 部分。它叫做MIME邊界標(biāo)記。邊界標(biāo)記的值必須盡可能的唯一,以免在超出郵件范圍時發(fā)生混亂。 "警告"信息(譯者:指"This is a MIME Encoded Message")在那里是為了讓不符合MIME的客戶程序 能夠把它顯示給用戶,否則他們就不理解一個空白郵件是什么意思。 現(xiàn)在,回到邊界標(biāo)記。如果你觀察這個簡單的郵件,會發(fā)現(xiàn)邊界標(biāo)記(XX-1234DED00099A在每一個分 都出現(xiàn)了,也就是,在每部分之間都使用了一個邊界標(biāo)記,然而,每個邊界標(biāo)記都以兩個連接符開始。 很重要的一點(diǎn)需要注意的就是在最后一個MIME段的后面,邊界標(biāo)記不僅僅以那兩個邊接符作為開始, 同時也以它倆作為結(jié)束。這一點(diǎn)一定不能忘記,因?yàn)樗x了郵件的范圍。 讓我們看一下前兩個MIME段: 第一段是普通文本信息,因此Content-Type為text/plain,并且編碼為7bit(我們也可以省略它, 因?yàn)槿绻恢该魉矔J(rèn)為如此)。 第二個就是JPEG圖片。相應(yīng)的表示為Content-Type: image/jpg。name="buce.jpg"(出現(xiàn)在 Content-Type的后面,稱之為參數(shù)),指出了文件的名字;它就是可以在客戶程序中看到的附件 的名字。如果不給出name="buce.jpg" ,描述字段(如果給出)將作為附件的名字顯示出來(然 而,在所有客戶程序中它不是統(tǒng)一的做法)。 注意JPEG 圖片可以在郵件件中被顯示出來,如果客戶程序可以顯示行內(nèi)附件?;蛘?,你可以向客戶程 指明你想如何顯示附件。例如,如果存在 Content-Disposition: attachment 頭,JPEG圖片將被顯示為一個附件圖標(biāo)。
標(biāo)簽:
PHP
排行榜
