【php开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了php开源代码-class_mime_decode.php的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
<?
class mime_decode {
var $content = Array();
function mime_encode_headers($string) {
if($string == "") return;
if(!eregi("^([[:print:]]*)$",$string))
$string = "=?ISO-8859-1?Q?".str_replace("+","_",str_replace("%","=",urlencode($string)))."?=";
return $string;
}
function decode_mime_string($string) {
if(($pos = strpos($string,"=?")) === false) return $string;
while(!($pos === false)) {
$newresult .= substr($string,0,$pos);
$string = substr($string,$pos+2,strlen($string));
$intpos = strpos($string,"?");
$charset = substr($string,0,$intpos);
$enctype = strtolower(substr($string,$intpos+1,1));
$string = substr($string,$intpos+3,strlen($string));
$endpos = strpos($string,"?=");
$mystring = substr($string,0,$endpos);
$string = substr($string,$endpos+2,strlen($string));
if($enctype == "q") {
$mystring = str_replace("_"," ",$mystring);
$mystring = $this->decode_qp($mystring);
} else if ($enctype == "b")
$mystring = base64_decode($mystring);
$newresult .= $mystring;
$pos = strpos($string,"=?");
}
return $newresult.$string;
}
function decode_header($header) {
$headers = explode("\r\n",$header);
$decodedheaders = Array();
for($i=0;$i<count($headers);$i++) {
$thisheader = $headers[$i];
if(strpos($thisheader,": ") === false) {
$decodedheaders[$lasthead] .= " $thisheader";
} else {
$dbpoint = strpos($thisheader,": ");
$headname = strtolower(substr($thisheader,0,$dbpoint));
$headvalue = trim(substr($thisheader,$dbpoint+1));
if($decodedheaders[$headname] != "") $decodedheaders[$headname] .= "; $headvalue";
else $decodedheaders[$headname] = $headvalue;
$lasthead = $headname;
}
}
return $decodedheaders;
}
function fetch_structure($email) {
$ARemail = Array();
$separador = "\r\n\r\n";
$header = trim(substr($email,0,strpos($email,$separador)));
$bodypos = strlen($header)+strlen($separador);
$body = substr($email,$bodypos,strlen($email)-$bodypos);
$ARemail["header"] = $header; $ARemail["body"] = $body;
return $ARemail;
}
function get_names($strmail) {
$ARfrom = Array();
$strmail = stripslashes(ereg_replace("\t","",ereg_replace("\n","",ereg_replace("\r","",$strmail))));
if(trim($strmail) == "") return $ARfrom;
$armail = Array();
$counter = 0; $inthechar = 0;
$chartosplit = ",;"; $protectchar = "\""; $temp = "";
$lt = "<"; $gt = ">";
$closed = 1;
for($i=0;$i<strlen($strmail);$i++) {
$thischar = $strmail[$i];
if($thischar == $lt && $closed) $closed = 0;
if($thischar == $gt && !$closed) $closed = 1;
if($thischar == $protectchar) $inthechar = ($inthechar)?0:1;
if(!(strpos($chartosplit,$thischar) === false) && !$inthechar && $closed) {
$armail[] = $temp; $temp = "";
} else
$temp .= $thischar;
}
if(trim($temp) != "")
$armail[] = trim($temp);
for($i=0;$i<count($armail);$i++) {
$thisPart = trim(eregi_replace("^\"(.*)\"$", "\\1", trim($armail[$i])));
if($thisPart != "") {
if (eregi("(.*)<(.*)>", $thisPart, $regs)) {
$email = trim($regs[2]);
$name = trim($regs[1]);
} else {
if (eregi("([-a-z0-9_$+.]+@[-a-z0-9_.]+[-a-z0-9_]+)((.*))", $thisPart, $regs)) {
$email = $regs[1];
$name = $regs[2];
} else
$email = $thisPart;
}
$email = eregi_replace("^\<(.*)\>$", "\\1", $email);
$name = eregi_replace("^\"(.*)\"$", "\\1", trim($name));
$name = eregi_replace("^\((.*)\)$", "\\1", $name);
if ($name == "") $name = $email;
if ($email == "") $email = $name;
$ARfrom[$i]["name"] = $this->decode_mime_string($name);
$ARfrom[$i]["mail"] = $email;
unset($name);unset($email);
}
}
return $ARfrom;
}
function build_alternative_body($ctype,$body) {
global $mime_show_html;
$boundary = $this->get_boundary($ctype);
$part = $this->split_parts($boundary,$body);
$thispart = ($mime_show_html)?$part[1]:$part[0];
$email = $this->fetch_structure($thispart);
$header = $email["header"];
$body = $email["body"];
$headers = $this->decode_header($header);
$body = $this->compile_body($body,$headers["content-transfer-encoding"]);
return $body;
}
function build_related_body($ctype,$body) {
global $mime_show_html,$sid,$lid,$ix,$folder;
$Rtype = trim(substr($ct