現(xiàn)在開(kāi)始介紹我所編寫(xiě)的發(fā)送郵件類。有了上面的預(yù)備知識(shí)了,下面就是實(shí)現(xiàn)了。 類的成員變量 var $lastmessage; //記錄最后返回的響應(yīng)信息 var $lastact; //最后的動(dòng)作,字符串形式 var $welcome; //用在HELO后面,歡迎用戶 var $debug; //是否顯示調(diào)試信息 var $smtp; //smtp服務(wù)器 var $port; //smtp端口號(hào) var $fp; //socket句柄 其中,$lastmessage和$lastact用于記錄最后一次響應(yīng)信息及執(zhí)行的命令,當(dāng)出錯(cuò)時(shí),用戶可以使用它們。為了測(cè)試需要,我還定義了$debug變量,當(dāng)其值為true時(shí),會(huì)在運(yùn)行過(guò)程中顯示一些執(zhí)行信息,否則無(wú)任何輸出。$fp用于保存打開(kāi)后的socket句柄。 類的構(gòu)造
這個(gè)構(gòu)造函數(shù)主要完成一些初始值的判定及設(shè)置。$welcome用于HELO指令中,告訴服務(wù)器用戶的名字。HELO指令要求為機(jī)器名,但是不用也可以。如果用戶沒(méi)有給出$welcome,則自動(dòng)查找本地的機(jī)器名。 顯示調(diào)試信息
function send_mail($smtp, $welcome="", $debug=false) { if(empty($smtp)) die("SMTP cannt be NULL!"); $this->smtp=$smtp; if(empty($welcome)) { $this->welcome=gethostbyaddr("localhost"); } else $this->welcome=$welcome; $this->debug=$debug; $this->lastmessage=""; $this->lastact=""; $this->port="25"; }
這個(gè)函數(shù)用來(lái)顯示調(diào)試信息。可以在$inout中指定是上傳的指令還是返回的響應(yīng),如果為上傳指令,則使用"out";如果為返回的響應(yīng)則使用"in"。 第3行,判斷是否要輸出調(diào)試信息。
1 function show_debug($message, $inout)2 {3 if ($this->debug)4 {5 if($inout=="in") //響應(yīng)信息6 {7 $m='<< ';8 }9 else10 $m='>> ';11 if(!ereg("/n$", $message))12 $message .= "<br>";13 $message=nl2br($message);14 echo "<font color=#999999>${m}${message}</font>";15 }16 }
在編寫(xiě)socket處理部分發(fā)現(xiàn),一些命令的處理很相似,如HELO,MAIL FROM,RCPT TO,QUIT,DATA命令,都要求根據(jù)是否顯示調(diào)試信息將相關(guān)內(nèi)容顯示出來(lái),同時(shí)對(duì)于返回的響應(yīng)碼,如果是期望的,則應(yīng)繼續(xù)處理,如果不是期望的,則應(yīng)中斷出理。所以為了清晰與簡(jiǎn)化,專門(mén)對(duì)這些命令的處理編寫(xiě)了一個(gè)通用處理函數(shù)。函數(shù)的參數(shù)中$code為期望的響應(yīng)碼,如果響應(yīng)碼與之相同則表示處理成功,否則出錯(cuò)。 第3行,記錄最后執(zhí)行命令。
1 function do_command($command, $code)2 {3 $this->lastact=$command;4 $this->show_debug($this->lastact, "out");5 fputs ( $this->fp, $this->lastact );6 $this->lastmessage = fgets ( $this->fp, 512 );7 $this->show_debug($this->lastmessage, "in");8 if(!ereg("^$code", $this->lastmessage))9 {10 return false;11 }12 else13 return true;14 }
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注