用PHP發送MIME郵件(二)

來源:互聯網
上載者:User
關鍵字 用PHP發送MIME郵件(二)
作者:Kartic Krishnamurthy 譯者:limodou

"好,如何建立符合MIME的資訊呢?"
  通過上面的一般性的描述,讓我們現在看一下所謂的MIME資訊到底是什麼!


最簡單的MIME資訊
  這個資訊沒有任何段,也就是,沒有附件。然而,因為它是一個MIME訊息,它必須有必要的頭。


From: php@php.net
To: 'Alex (the Great)'
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)'
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)'
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圖片將被顯示為一個附件表徵圖。


  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.