\"]",$head[$i],$reg))
$i++;
$this->body_char_set=$reg[1];
while (!eregi("Content-Transfer-Encoding:(.*)",$head[$i],$reg))
$i++;
$this->body_code_type=trim($reg[1]);
}
break;
case "CC": //抄送到。。
if (ereg("<([^>]+)>",$content,$reg))
$this->cc_to=$reg[1];
else
$this->cc_to=$content;
default:
break;
} // end switch
$i++;
} // end while
if (trim($this->reply_to)=="") //如果没有指定回复地址,则回复地址为发送人地址
$this->reply_to=$this->from_mail;
}// end function define
function decode_body() //正文的解码,其中用到了不少邮件头解码所得来的信息
{
$i=0;
if (!eregi("multipart",$this->body_type)) // 如果不是复合类型,可以直接解码
{
$tem_body=implode($this->body_temp,"\r\n");
switch (strtolower($this->body_code_type)) // body_code_type ,正文的编码方式,由邮件头信息中取得
{case "base64":
$tem_body=base64_decode($tem_body);
break;
case "quoted-printable":
$tem_body=quoted_printable_decode($tem_body);
break;
}
$this->tem_num=0;
$this->body=array();
$this->body[$this->tem_num][content_id]="";
$this->body[$this->tem_num][type]=$this->body_type;
switch (strtolower($this->body_type))
{
case "text/html":
$this->body[$this->tem_num][name]="超文本正文";
break;
case "text/plain":
$this->body[$this->tem_num][name]="文本正文";
break;
default:
$this->body[$this->tem_num][name]="未知正文";
}
$this->body[$this->tem_num][size]=strlen($tem_body);
$this->body[$this->tem_num][content]=$tem_body;
unset($tem_body);
}
else // 如果是复合类型的
{
$this->body=array();
$this->tem_num=0;
$this->decode_mult($this->body_type,$this->boundary,0); //调用复合类型的解码方法
}
}
function decode_mult($type,$boundary,$begin_row) // 该方法用递归的方法实现 复合类型邮件正文的解码,邮件源文件取自于 body_temp 数组,调用时给出该复合类型的类型、分隔符及 在 body_temp 数组中的开始指针
{
$i=$begin_row;
$lines=count($this->body_temp);
while ($i<$lines) // 这是一个部分的结束标识;
{
while (!eregi($boundary,$this->body_temp[$i]))//找到一个开始标识
$i++;
if (eregi($boundary."--",$this->body_temp[$i]))
{
return $i;
}
while (!eregi("Content-Type:([^;]*);",$this->body_temp[$i],$reg ) and $this->body_temp[$i])
$i++;
$sub_type=trim($reg[1]); // 取得这一个部分的 类型是milt or text ....
if (eregi("multipart",$sub_type))// 该子部分又是有多个部分的;
{
while (!eregi('boundary=\"([^\"]*)\"',$this->body_temp[$i],$reg) and $this->body_temp[$i])
$i++;
$sub_boundary=$reg[1];// 子部分的分隔符;
$i++;
$last_row=$this->decode_mult($sub_type,$sub_boundary,$i);
$i=$last_row;
}
else
{
$comm="";
while (trim($this->body_temp[$i])!="")
{
if (strpos($this->body_temp[$i],"=?"))
$this->body_temp[$i]=$this->decode_mime($this->body_temp[$i]);
if (eregi("Content-Transfer-Encoding:(.*)",$this->body_temp[$i],$reg))
$code_type=strtolower(trim($reg[1])); // 编码方式
$comm.=$this->body_temp[$i]."\r\n";
$i++;
} // comm 是编码的说明部分
if (eregi('name=[\"]([^\"]*)[\"]',$comm,$reg))
$name=$reg[1];
if (eregi("Content-Disposition:(.*);",$comm,$reg))
$disp=$reg[1];
if (eregi("charset=[\"(北联网教程,专业提供视频软件下载)
……