直播中
MIME 類
在有了這些基礎(chǔ)之后,讓我們用PHP創(chuàng)建和實(shí)現(xiàn)一個(gè)MIME郵件類。在我們的PHP庫函數(shù)中,已經(jīng)有了編碼
所必須的工具。
MIME類必須能夠:
增加附件
對每一個(gè)獨(dú)立的請求,對所附的數(shù)據(jù)進(jìn)行編碼
創(chuàng)建MIME段/頭
生成一個(gè)包含MIME段/頭的完整的郵件
將整個(gè)郵件作為字符串返回
用本地的郵件處理程序進(jìn)行發(fā)送(或選擇調(diào)用一個(gè)SMTP郵件處理程序)
這個(gè)類叫做MIME_mail。我們將討論類的方法,在理論與實(shí)際的差距中建立起橋梁。(閱讀建議:Luis
Argerich的PHP的面向?qū)ο缶幊蹋洪_發(fā)大型PHP項(xiàng)目的方法)。為了便于閱讀大部分的注釋已經(jīng)被去掉了。一
些方法與類的成員變量只是用于內(nèi)部處理,并且已經(jīng)在下面的注釋中被指出來了(同時(shí)在初始的類文件中也
指出了)。
<?php
class MIME_mail {
//公有:
var $to;
var $from;
var $subject;
var $body;
var $headers = "";
var $errstr="";
var $base64_func= ''; // 如果未指定使用PHP的base64函數(shù)
var $qp_func = ''; // 此時(shí)為空
var $mailer = ""; // 將其設(shè)為有效的郵件對象的名字
?>
這里有一些公共處理的變量(也就是,可以在腳本中直接操縱的變量)。這些變量中的大部分都是自說
明的。$headers包含了可選的想要發(fā)送給郵件處理程序的頭信息。$errstr 是一個(gè)包含可讀錯(cuò)誤字符串的變
量,它可以用在調(diào)用腳本中。
$base64_func和$qp_func是"函數(shù)處理器",用戶可以進(jìn)行定制。缺省地,它們被設(shè)為空串。對于$base64_func,一個(gè)空串意味著我們將使用PHP內(nèi)置的base64_encode()函數(shù)...(是的!優(yōu)美,不是嗎!)。
Quoted Printable可以通過$qp_func被處理。在PHP中沒有內(nèi)置的quoted-printable 編碼函數(shù)(然而,安裝
了imap則可以使用imap_qprint())。在這篇文章中我們將不再討論quoted_printable方法。
<?php
//私有:
var $mimeparts = array();
?>
$mimeparts是一個(gè)內(nèi)部數(shù)組,包含了郵件信息中各自獨(dú)立的符合MIME段。請不要在這個(gè)類(或派生類)之外操縱它和其它的私有方法/變量。
<?php
// 構(gòu)造函數(shù)
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:\ ?.+?[\r\n]?\b)!i", '', $headers);
}
$this->headers = chop($headers);
$this->mimeparts[] = "" ; //增加位置0
return;
}
?>
我們擁有對象的構(gòu)造函數(shù),它使用"from"和"to"郵件地址,主題和郵件體和頭作為參數(shù)。對于郵件體部
分,可以給出你將可能輸入的正常郵件。最后一個(gè)參數(shù)是可選的(用戶自定義)頭。例如,X-Mailer:
MyMailer_1.0。請注意$headers可以是一個(gè)數(shù)組,包含了將要發(fā)給郵件發(fā)送程序的不同的頭,或者只是某個(gè)
特別頭的容器。你不能在$headers參數(shù)中發(fā)送From: 頭,如果它被找到,這部分將自動(dòng)被去掉。你可以象下
面使用多個(gè)頭:array("X-Mailer: MYMailer_1.0", "X-Organization: PHPBuilder.com")。
$mimeparts用一個(gè)空項(xiàng)(索引0)創(chuàng)建,在后面我們將看到這樣用的道理。