用PHP实现POP3邮件的解码(三)
实现 MIME 解码的类 (作者:陈俊清 2000年10月24日 15:11) 一个实现 MIME 解码的类 该类实现解码的方法是 decode($head=null,$body=null,$content_num=-1),为了处理上的方便,要求输入的是两个字符数组,在我们的上篇中,所用到的POP类所收取得到的就是两个这样的数组,一个是邮件头内容,一个是邮件的正文内容。限于篇幅,不对其做详细的说明,其实现思想跟本文上篇中所介绍的POP类类似。请参考其中的注释。 该类中用到了大量的正则表达式的操作,对此不熟悉的读者,请参考正则表达式的有关资料。 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); } if (gettype($body)=="array") { $this->get_content_num=$content_num; $this->body_temp=$body; $have_decode=true; $this->decode_body(); unset($this->body_temp); } if (!$have_decode) { $this->err_str="传递的参数不对,用法:new decode_mail(head,body) 两个参数都是数组"; return false; } } function decode_head($head) // 邮件头内容 的解码,取出邮件头中有意义的内容 { $i=0; $this->from_name=$this->to_name=$this->mail_time=$this->from_mail=$this-> to_mail=$this->reply_to=$this->cc_to=$this->subject=""; $this->body_t |
查看所有评论
