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: PHPBuilder.com")。
$mimeparts用一個空項(索引0)創建,在后面我們將看到這樣用的道理。