作者:Kartic Krishnamurthy 譯者:limodou
MIME 類
在有了這些基礎之後,讓我們用php(做為現在的主流開發語言)創建和實現一個MIME郵件類。在我們的php(做為現在的主流開發語言)庫函數中,已經有了編碼 所必須的工具。
MIME類必須能夠:
增加附件
對每一個獨立的請求,對所附的數據進行編碼創建MIME段/頭 生成一個包含MIME段/頭的完整的郵件將整個郵件作為字符串返回用本地的郵件處理程序進行發送(或選擇調用一個SMTP郵件處理程序)
這個類叫做MIME_mail。我們將討論類的方法,在理論與實際的差距中建立起橋梁。(閱讀建議:Luis Argerich的php(做為現在的主流開發語言)的面向對象編程:開發大型php(做為現在的主流開發語言)項目的方法)。為了便於閱讀大部分的注釋已經被去掉了。一些方法與類的成員變量只是用於內部處理,並且已經在下面的注釋中被指出來了(同時在初始的類文件中也指出了)。
<?php(做為現在的主流開發語言)
class MIME_mail {
//公有:
var $to;
var $from;
var $subject;
var $body;
var $headers = "";
var $errstr="";
var $base64_func= ; // 如果未指定使用php(做為現在的主流開發語言)的base64函數
var $qp_func = ; // 此時為空
var $mailer = ""; // 將其設為有效的郵件對象的名字
?>
這裡有一些公共處理的變量(也就是,可以在腳本中直接操縱的變量)。這些變量中的大部分都是自說明的。$headers包含了可選的想要發送給郵件處理程序的頭信息。$errstr 是一個包含可讀錯誤字符串的變量,它可以用在調用腳本中。
$base64_func和$qp_func是"函數處理器",用戶可以進行定制。缺省地,它們被設為空串。對於$base64_func,一個空串意味著我們將使用php(做為現在的主流開發語言)內置的base64_encode()函數...(是的!優美,不是嗎!)。
Quoted Printable可以通過$qp_func被處理。在php(做為現在的主流開發語言)中沒有內置的quoted-printable 編碼函數(然而,安裝
了imap則可以使用imap_qprint())。在這篇文章中我們將不再討論quoted_printable方法。
<?php(做為現在的主流開發語言)
//私有:
var $mimeparts = array();
?>
$mimeparts是一個內部數組,包含了郵件信息中各自獨立的符合MIME段。請不要在這個類(或派生類)之外操縱它和其它的私有方法/變量。
<?php(做為現在的主流開發語言)
// 構造函數
function MIME_mail($from="", $to="", $subject="", $body="", $headers = "") {
$this->to = $to;
$this->from = $from;
$this->subject = $subject;
$this->body = $body;
if (is_array($headers)) {
if (sizeof($headers)>1)
$headers=join(CRLF, $headers);
else
$headers=$headers[0];
}
if ($from) {
$headers = preg_replace("!(from: ?.+?[
]?)!i", , $headers);
}
$this->headers = chop($headers);
$this->mimeparts[] = "" ; //增加位置0
return;
}
?>
我們擁有對象的構造函數,它使用"from"和"to"郵件地址,主題和郵件體和頭作為參數。對於郵件體部分,可以給出你將可能輸入的正常郵件。最後一個參數是可選的(用戶自定義)頭。例如,X-Mailer:
MyMailer_1.0。請注意$headers可以是一個數組,包含了將要發給郵件發送程序的不同的頭,或者只是某個特別頭的容器。你不能在$headers參數中發送From: 頭,如果它被找到,這部分將自動被去掉。你可以象下 面使用多個頭:array("X-Mailer: MYMailer_1.0", "X-Organization: php(做為現在的主流開發語言)Builder.com")。
$mimeparts用一個空項(索引0)創建,在後面我們將看到這樣用的道理。