文章詳情頁
用PHP發送MIME郵件(二)
瀏覽:3日期:2023-12-29 17:55:20
作者:Kartic Krishnamurthy 譯者:limodou "好,如何創建符合MIME的信息呢?" 通過上面的一般性的描述,讓我們現在看一下所謂的MIME信息到底是什么! 最簡單的MIME信息 這個信息沒有任何段,也就是,沒有附件。然而,因為它是一個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頭,則假設為Content-Type: text/plain;charset='us-ascii'!當然,它有些簡單,復雜 一些的如下: 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...> "嗨,但是我想發送一個word文檔和一張我的小狗的圖片在同一封郵件中... !"一個用戶說!如果是真 的,上面的那個例子就太簡單了,并且它沒有足夠的內容來支持愛好者和現代郵件處理方面的需要。實際上, 許多的郵件客戶端軟件甚至不能顯示描述字段! 這就是我們所面臨的"多部分信息"。 多部分信息(Multipart Messages) 這個概念允許在一封郵件中發送多條項目。例如,假設Alexander想要給php@php.net發送一封他的馬的 照片的郵件,同時還附帶有馬的家族圖譜及精彩的說明!這樣一個簡單的要求沒有多部分消息的概念是無法 被滿足的。在這種情況下,我們創建了一個使用Content-Type的信息頭的封裝來支持郵件的不同部分,以便 收信人得到圖片,家族圖譜和精彩的說明! Content-Type 頭現在擁有一個"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-- 喲,看上去很復雜,不是嗎?不管怎樣,讓我們瀏覽一遍細節吧: 如果你注意到了在MIME信息頭中的Content-Transfer-Encoding,為"7bit"。因為Content-Type為 multipart/mixed,編碼應該是7bit,8bit或二進制中的一種,7bit是一種廣泛使用的格式。 象這樣一條信息包含了多種信息。客戶程序是如何知道JPG圖片,文檔和普通文本之間的區別呢?你會 注意到在Content-Type后面有一個boundary="XX-1234DED00099A"參數。這個值用來分離郵件中的不同 部分。它叫做MIME邊界標記。邊界標記的值必須盡可能的唯一,以免在超出郵件范圍時發生混亂。 "警告"信息(譯者:指"This is a MIME Encoded Message")在那里是為了讓不符合MIME的客戶程序 能夠把它顯示給用戶,否則他們就不理解一個空白郵件是什么意思。 現在,回到邊界標記。如果你觀察這個簡單的郵件,會發現邊界標記(XX-1234DED00099A在每一個分 都出現了,也就是,在每部分之間都使用了一個邊界標記,然而,每個邊界標記都以兩個連接符開始。 很重要的一點需要注意的就是在最后一個MIME段的后面,邊界標記不僅僅以那兩個邊接符作為開始, 同時也以它倆作為結束。這一點一定不能忘記,因為它定義了郵件的范圍。 讓我們看一下前兩個MIME段: 第一段是普通文本信息,因此Content-Type為text/plain,并且編碼為7bit(我們也可以省略它, 因為如果不指明它也會默認為如此)。 第二個就是JPEG圖片。相應的表示為Content-Type: image/jpg。name="buce.jpg"(出現在 Content-Type的后面,稱之為參數),指出了文件的名字;它就是可以在客戶程序中看到的附件 的名字。如果不給出name="buce.jpg" ,描述字段(如果給出)將作為附件的名字顯示出來(然 而,在所有客戶程序中它不是統一的做法)。 注意JPEG 圖片可以在郵件件中被顯示出來,如果客戶程序可以顯示行內附件?;蛘?,你可以向客戶程 指明你想如何顯示附件。例如,如果存在 Content-Disposition: attachment 頭,JPEG圖片將被顯示為一個附件圖標。
標簽:
PHP
排行榜
