用PHP傳送MIME郵件(二)

2022-03-25 14:06:47 字數 2903 閱讀 7892

作者:kartic krishnamurthy 譯者:limodou

"好,如何建立符合mime的資訊呢?"

通過上面的一般性的描述,讓我們現在看一下所謂的mime資訊到底是什麼!

最簡單的mime資訊

這個資訊沒有任何段,也就是,沒有附件。然而,因為它是乙個mime訊息,它必須有必要的頭。

from: php(做為現在的主流開發語言)@php(做為現在的主流開發語言).net

to: alex (the great)

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)

to: php(做為現在的主流開發語言)@php(做為現在的主流開發語言).net

"嗨,但是我想傳送乙個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(做為現在的主流開發語言),

喲,看上去很複雜,不是嗎?不管怎樣,讓我們瀏覽一遍細節吧:

如果你注意到了在mime資訊頭中的content-transfer-encoding,為"7bit"。因為content-type為

multipart/mixed,編碼應該是7bit,8bit或二進位制中的一種,7bit是一種廣泛使用的格式。

象這樣一條資訊包含了多種資訊。客戶程式是如何知道jpg,文件和普通文字之間的區別呢?你會

注意到在content-type後面有乙個boundary="xx-1234ded00099a"引數。這個值用來分離郵件中的不同

部分。它叫做mime邊界標記。邊界標記的值必須盡可能的唯一,以免在超出郵件範圍時發生混亂。

用PHP傳送MIME郵件 三)

值得說明的其它兩個方法是print mail 和send mail 兩個都使用了 force引數。print mail 輸出整個郵件資訊,send mail 使用php 的mail 函式傳送資訊。可選的,send mail 使用了乙個 tp物件和它的傳送方法 由使用者指定 來傳送 郵件。結論建立乙個...

php郵件傳送

今天要用到php的郵件傳送,便用phpmailer弄了個 類檔案 emaillclass.php class phpmailer function send addr,fromname,title,content smtp array array ehlo hello lb,220,250 ehlo...

php 郵件傳送

2 修改class.phpmailer.php 增加變數 fromemail 修改下面內容 成如下內容 if this fromname else result this headerline from this fromemail.fromname result this headerline r...