用PHP實現POP3郵件的解碼(三)
來源:互聯網
上載者:User
實現 MIME 解碼的類
(作者:陳俊清 2000年10月24日 15:11)
一個實現 MIME 解碼的類
該類實現解碼的方法是 decode($head=null,$body=null,$content_num=-1),為了處理上的方便,要求輸入的是兩個字元數組,在我們的上篇中,所用到的POP類所收取得到的就是兩個這樣的數組,一個是郵件標頭內容,一個是郵件的本文內容。限於篇幅,不對其做詳細的說明,其實現思想跟本文上篇中所介紹的POP類類似。請參考其中的注釋。
該類中用到了大量的Regex的操作,對此不熟悉的讀者,請參考Regex的有關資料。
class decode_mail
{
var $from_name;var $to_name;var $mail_time;var $from_mail;var $to_mail;
var $reply_to;var $cc_to;var $subject;
// 解碼後的郵件標頭部分的資訊:
var $body;
// 解碼後得到的本文資料,為一個數組。
var $body_type; // 本文類型
var $tem_num=0;
var $get_content_num=0;
var $body_temp=array();
var $body_code_type;
var $boundary;
// 以上是一些方法中用到的一些全域性的臨時變數,由於 PHP不能做到良好的封裝,所以只能放在這裡定義
var $err_str; // 錯誤資訊
var $debug=0; // 調試標記
var $month_num=array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,
"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12); // 把英文月份轉換成數字表示的月份
function decode($head=null,$body=null,$content_num=-1) // 調用的主方法,$head 與 $body 是兩個數組,$content_num 表示的是當本文有多個部分的時候,只取出指定部分的內容以提高效率,預設為 -1 ,表示解碼全部內容,如果解碼成功,該 方法返回 true
{
if (!$head and !$body)
{
$this->err_str="沒有指定郵件的頭與內容!!";
return false;
}
if (gettype($head)=="array")
{
$have_decode=true;
$this->decode_head($head);