用PHP發送MIME郵件(一)
來源:互聯網
上載者:User
mime 已經厭倦了給你的朋友和客戶發送那些單調乏味的文本通知和信件了嗎?曾經考慮過發送附件或在郵中嵌入HTML吧
答案就是MIME。接下來的幾頁解釋了MIME的基礎知識,建立符合MIME的資訊,然後用一個可以工作的PHP
類結束,這個類實現了發送符合MIME郵件。注意對呼叫指令碼,調用者等等的參考資料表示使用了將要開發的類的
指令碼,客戶程式/MUA等等表示郵件閱讀的客戶程式或郵件使用代理程式。
一些MIME基礎
MIME表示多用途Internet郵件擴允協議。MIME擴允了基本的面向文本的Internet郵件系統,以便可以在
訊息中包含二進位附件。
MIME利用了一個事實就是,RFC 822在訊息體的內容中做了一點限制:唯一的限制就是只能使用簡單的
ASCII文本。所以,MIME資訊由正常的Internet文本郵件組成,文本郵件擁有一些特別的符合RFC
822的資訊
頭和格式化過的資訊體(用ASCII
的子集來表示的附件)。這些MIME頭給出了一種在郵件中表示附件的特別
的方法。
MIME資訊的剖析
一個普通的文本郵件的資訊包含一個頭部分(To: From:
Subject: 等等)和一個體部分(Hello Mr.,
等等)。在一個符合MIME的資訊中,也包含一個資訊頭並不奇怪,郵件的各個部分叫做MIME段,每段前也綴
以一個特別的頭。MIME郵件只是基於RFC 822郵件的一個擴充。然而它有著自已的RFC規範集。
頭欄位
MIME頭根據在郵件包中的位置,大體上分為MIME資訊頭和MIME段頭。(譯者:MIME資訊頭指整個郵件
的頭,而MIME段頭只每個MIME段的頭。)
MIME資訊頭有:
MIME-Version:
這個頭提供了所用MIME的版本號碼。這個值習慣上為1.0。
Content-Type:
它定義了資料的類型,以便資料能被適當的處理。有效類型有:text,image,audio,video,
applications,multipart和message。注意任何一個二進位附件都應該被叫做application/octet-
stream。這個頭的一些用例為:image/jpg, application/mswork,multipart/mixed,這隻是很少的
一部分。
Content-Transfer-Encoding:
這是所有頭中最重要的一個,因為它說明了對資料所執行的編碼方式,客戶/MUA
將用它對附件進行解
碼。對於每個附件,可以使用7bit,8bit,binary ,quoted-printable,base64和custom中的一種編
碼方式。7bit編碼是用在US ASCII字元集上的常用的一種編碼方式,也就是,保持它的原樣。8bit
和
binary編碼一般不用。對人類可讀的標準文本,如果傳輸要經過對格式有影響的網關時對其進行保護,
可以使用quoted printable 。Base64是一種通用方法,在需要決定使用哪一種編碼方法時,它提供了
一個不用費腦子的選擇;它通常用在二進位,非文本資料上。注意,任何非7bit
資料必須用一種模式
編碼,這樣它就可以通過Internet郵件網關!
Content-ID:
如果Content-Type是message/external-body或multipart/alternative時,這個頭就有用了。它超出了本文的範圍。
Content-Description:
這是一個可選的頭。它是任何資訊段內容的自由文本描述。描述必須使用us-ascii碼。
Content-Disposition:
一個實驗性的頭,它用於給客戶程式/MUA提供提示,來決定是否在行內顯示附件或作為單獨的附件。
MIME段頭(出現在實際的MIME附件部分的頭),除了MIME-Version頭,可以擁有以上任何頭欄位。如果一個MIME頭是資訊塊的一部分,它將作用於整個資訊體。例如,如果Content-Transfer-Encoding顯示在資訊(指整個資訊)頭中,它應用於整個資訊體,但是如果它顯示在一個MIME段裡,它"只能"用於那個段中。