三度网教程:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

用PHP完成POP3邮件的解码(3)

时间:2024/6/4作者:未知来源:三度网教程人气:


实现 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_type=$Sthis->boundary=$this->body_code_type="";

   while ($head[$i])

   {

   if (strpos($head[$i],"=?"))

   $head[$i]=$this->decode_mime($head[$i]);  //如果有编码的内容,则进行解码,解码函数是上文所介绍的 decode_mime()

   $pos=strpos($head[$i],":");

   $summ=substr($head[$i],0,$pos);

   $content=substr($head[$i],$pos+1);  //将邮件头信息的标识与内容分开

   if ($this->debug) echo $summ.":----:".$content."<BR>";

   switch (strtoupper($summ))

   {

   case "FROM": // 发件人地址及姓名(可能没有姓名,只有地址信息)

   if ($left_tag_pos=strpos($content,"<"))

   {

   $mail_lenth=strrpos($content,">")-$left_tag_pos-1;

   $this->from_name=substr($content,0,$left_tag_pos);

   $this->from_mail=substr($content,$left_tag_pos+1,$mail_lenth);

   if (trim($this->from_name)=="") $this->from_name=$this->from_mail;

   else

   if (ereg("[\"

关键词:  用PHP完成POP3邮件的解码(3)





Copyright © 2012-2018 三度网教程(http://www.3du8.cn) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版