用PHP实现POP3邮件的解码(三)
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
件头信息中取得 {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=[\"|\''](.*)[\''|\"]",$comm,$reg)) $char_set=$reg[1]; if (eregi("Content-ID:[ ]*\<(.*)\>",$comm,$reg)) // 图片的标识符。 $content_id=$reg[1]; $this->body[$this->tem_num][type]=$sub_type; $this->body[$this->tem_num][content_id]=$content_id; $this->body[$this->tem_num][char_set]=$char_set; if ($name) $this->body[$this->tem_num][name]=$name; else switch (strtolower($sub_type)) { case "text/html": $this->body[$this- |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: PHP魔法函数应用详解下一篇: PHP文件缓存的性能测试
关于用PHP实现POP3邮件的解码(三)的所有评论