class.uebimiau.php

来自「通达OA2007SE源代码 非常好的」· PHP 代码 · 共 868 行 · 第 1/2 页

PHP
868
字号
', '
', $text);
      $text = quoted_printable_decode ($text);
      return $text;
    }
    function make_link_clickable ($str)
    {
      $str = eregi_replace ('([[:space:]])((f|ht)tps?:\\/\\/[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)', '\\1<a class=autolink href="\\2" target="_blank">\\2</a>', $str);
      $str = eregi_replace ('([[:space:]])(www\\.[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)', '\\1<a class=autolink href="http://\\2" target="_blank">\\2</a>', $str);
      $str = eregi_replace ('([[:space:]])([_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3})', '\\1<a class=autolink href="mailto:\\2">\\2</a>', $str);
      $str = eregi_replace ('^((f|ht)tp:\\/\\/[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)', '<a href="\\1" target="_blank">\\1</a>', $str);
      $str = eregi_replace ('^(www\\.[a-z0-9~#%@\\&:=?+\\/\\.,_-]+[a-z0-9~#%@\\&=?+\\/_-]+)', '<a class=autolink href="http://\\1" target="_blank">\\1</a>', $str);
      $str = eregi_replace ('^([_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3})', '<a class=autolink href="mailto:\\1">\\1</a>', $str);
      return $str;
    }
    function process_message ($header, $body)
    {
      $mail_info = $this->get_mail_info ($header);
      $ctype = $mail_info['content-type'];
      $ctenc = $mail_info['content-transfer-encoding'];
      if (($ctype == ''))
      {
        $ctype = 'text/plain';
      }
      $type = $ctype;
      $ctype = split (';', $ctype);
      $types = split ('/', $ctype[0]);
      $maintype = trim (strtolower ($types[0]));
      $subtype = trim (strtolower ($types[1]));
      switch ($maintype)
      {
        case 'text':
        {
          $body = $this->compile_body ($body, $ctenc, $mail_info['content-type']);
          switch ($subtype)
          {
            case 'html':
            {
              if (!$this->use_html)
              {
                $body = eregi_replace ('(
|
)', '', $body);
                $body = eregi_replace ('<br[ ]?[/]?>', '
', $body);
                $body = eregi_replace ('</p>', '
', $body);
                $body = $this->build_text_body (strip_tags ($body));
              }
              $msgbody = $body;
              break;
            }
            default:
            {
              $msgbody = $this->build_text_body ($body);
              break;
            }
          }
          $this->add_body ($msgbody);
          break;
        }
        case 'multipart':
        {
          if (ereg ($subtype, 'signed,mixed,related'))
          {
            $subtype = 'complex';
          }
          switch ($subtype)
          {
            case 'alternative':
            {
              $msgbody = $this->build_alternative_body ($ctype[1], $body);
              break;
            }
            case 'complex':
            {
              $msgbody = $this->build_complex_body ($type, $body);
              break;
            }
            default:
            {
              $thisattach = $this->build_attach ($header, $body, '', 0);
            }
          }
          break;
        }
        default:
        {
          $thisattach = $this->build_attach ($header, $body, '', 0);
        }
      }
    }
    function build_attach ($header, $body, $boundary, $part, $mode = 'info', $down = 0, $nametosave = 'tmp.eml')
    {
      global $mail;
      global $temporary_directory;
      global $userfolder;
      $headers = $this->decode_header ($header);
      $cdisp = $headers['content-disposition'];
      $ctype = $headers['content-type'];
      $ctype2 = explode (';', $ctype);
      $ctype2 = $ctype2[0];
      $Atype = split ('/', $ctype);
      $Acdisp = split (';', $cdisp);
      $tenc = $headers['content-transfer-encoding'];
      $is_embebed = ($headers['content-id'] != '');
      $body = $this->compile_body ($body, $tenc, $ctype);
      $fname = $Acdisp[1];
      if (ereg ('filename=(.*)', $fname, $regs))
      {
        $filename = $regs[1];
      }
      if ((($filename == '') AND ereg ('name=(.*)', $ctype, $regs)))
      {
        $filename = $regs[1];
      }
      $filename = ereg_replace ('"(.*)"', '\\1', $filename);
      $filename = trim ($this->decode_mime_string ($filename));
      if ((($filename == '') AND ($Atype[0] == 'message')))
      {
        $attachheader = $this->fetch_structure ($body);
        $attachheader = $this->decode_header ($attachheader['header']);
        $filename = $this->decode_mime_string ($attachheader['subject']);
        unset ($attachheader);
        $filename = (substr (ereg_replace ('[^A-Za-z0-9]', '_', $filename), 0, 20).'.eml');
      }
      else
      {
        if (($filename == ''))
        {
          $filename = (uniqid ('').'.tmp');
        }
      }
      switch ($mode)
      {
        case 'info':
        {
          $temp_array['name'] = $filename;
          $temp_array['size'] = strlen ($body);
          $temp_array['temp'] = $temp;
          $temp_array['content-type'] = $ctype2;
          $temp_array['content-disposition'] = $Acdisp[0];
          $temp_array['boundary'] = $boundary;
          $temp_array['part'] = $part;
          $indice = count ($this->_content['attachments']);
          if (!$is_embebed)
          {
            $this->_content['attachments'][$indice] = $temp_array;
          }
          return $temp_array;
          break;
        }
        case 'down':
        {
          $content_type = ($down ? 'application/octet-stream' : strtolower ($ctype2));
          $filesize = strlen ($body);
          header ((((((''.'Content-Type: ').$content_type).'; name="').$filename).'"'));
          header (((''.'Content-Length: ').$filesize));
          $cdisp = ($down ? 'attachment' : 'inline');
          header ((((((''.'Content-Disposition: ').$cdisp).'; filename="').$filename).'"'));
          echo $body;
          break;
        }
        case 'save':
        {
          if (!ereg ('\\.\\.', $nametosave))
          {
            $this->_save_file ($nametosave, $body);
          }
          return 1;
          break;
        }
      }
    }
    function compile_body ($body, $enctype, $ctype)
    {
      $enctype = explode (' ', $enctype);
      $enctype = $enctype[0];
      if ((strtolower ($enctype) == 'base64'))
      {
        $body = base64_decode ($body);
      }
      else
      {
        if ((strtolower ($enctype) == 'quoted-printable'))
        {
          $body = $this->decode_qp ($body);
        }
      }
      if (ereg ('koi8', $ctype))
      {
        $body = convert_cyr_string ($body, 'k', 'w');
      }
      return $body;
    }
    function download_attach ($header, $body, $bound = '', $part = 0, $down = 1)
    {
      if (($bound != ''))
      {
        $parts = $this->split_parts ($bound, $body);
        $email = $this->fetch_structure ($parts[$part]);
        $header = $email['header'];
        $body = $email['body'];
        unset ($email);
      }
      $this->build_attach ($header, $body, '', 0, $mode = 'down', $down);
    }
    function save_attach ($header, $body, $filename)
    {
      $this->build_attach ($header, $body, '', 0, $mode = 'save', 0, $filename);
    }
    function get_mail_info ($header)
    {
      $myarray = array ();
      $headers = $this->decode_header ($header);
      $message_id = ereg_replace ('<(.*)>', '\\1', $headers['message-id']);
      $myarray['content-type'] = $headers['content-type'];
      $myarray['priority'] = $headers['x-priority'][0];
      $myarray['content-transfer-encoding'] = str_replace ('GM', '-', $headers['content-transfer-encoding']);
      $myarray['message-id'] = trim ($message_id);
      $received = ereg_replace ('  ', ' ', $headers['received']);
      $user_date = ereg_replace ('  ', ' ', $headers['date']);
      if (eregi ('([0-9]{1,2}[ ]+[A-Z]{3}[ ]+[0-9]{4}[ ]+[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[ ]?((\\+|-)[0-9]{4})?', $received, $regs))
      {
        $mydate = $regs[1];
        $mytimezone = $regs[2];
        if (empty ($mytimezone))
        {
          if (eregi ('((\\+|-)[0-9]{4})', $user_date, $regs))
          {
            $mytimezone = $regs[1];
          }
          else
          {
            $mytimezone = $this->timezone;
          }
        }
      }
      else
      {
        if (eregi ('(([A-Z]{3})[ ]+([0-9]{1,2})[ ]+([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[ ]+([0-9]{4}))', $received, $regs))
        {
          $mydate = (((((($regs[3].' ').$regs[2]).' ').$regs[5]).' ').$regs[4]);
          if (eregi ('((\\+|-)[0-9]{4})', $user_date, $regs))
          {
            $mytimezone = $regs[1];
          }
          else
          {
            $mytimezone = $this->timezone;
          }
        }
        else
        {
          if (eregi ('([0-9]{1,2}[ ]+[A-Z]{3}[ ]+[0-9]{4}[ ]+[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[ ]?((\\+|-)[0-9]{4})?', $user_date, $regs))
          {
            $mydate = $regs[1];
            $mytimezone = $regs[2];
            if (empty ($mytimezone))
            {
              if (eregi ('((\\+|-)[0-9]{4})', $user_date, $regs))
              {
                $mytimezone = $regs[1];
              }
              else
              {
                $mytimezone = $this->timezone;
              }
            }
          }
          else
          {
            $mydate = date ('d M Y H:i');
            $mytimezone = $this->timezone;
          }
        }
      }
      $myarray['date'] = $this->build_mime_date ($mydate, $mytimezone);
      $myarray['subject'] = $this->decode_mime_string ($headers['subject']);
      $myarray['from'] = $this->get_names ($headers['from']);
      $myarray['to'] = $this->get_names ($headers['to']);
      $myarray['cc'] = $this->get_names ($headers['cc']);
      $myarray['status'] = $headers['status'];
      $myarray['read'] = $headers['x-um-status'];
      return $myarray;
    }
    function build_mime_date ($mydate, $timezone = '+0000')
    {
      if (!ereg ('((\\+|-)[0-9]{4})', $timezone))
      {
        $timezone = '+0000';
      }
      $parts = explode (' ', $mydate);
      if ((count ($parts) < 4))
      {
        return time ();
      }
      $day = $parts[0];
      switch (strtolower ($parts[1]))
      {
        case 'jan':
        {
          $mon = 1;
          break;
        }
        case 'feb':
        {
          $mon = 2;
          break;
        }
        case 'mar':
        {
          $mon = 3;
          break;
        }
        case 'apr':
        {
          $mon = 4;
          break;
        }
        case 'may':
        {
          $mon = 5;
          break;
        }
        case 'jun':
        {
          $mon = 6;
          break;
        }
        case 'jul':
        {
          $mon = 7;
          break;
        }
        case 'aug':
        {
          $mon = 8;
          break;
        }
        case 'sep':
        {
          $mon = 9;
          break;
        }
        case 'oct':
        {
          $mon = 10;
          break;
        }
        case 'nov':
        {
          $mon = 11;
          break;
        }
        case 'dec':
        {
          $mon = 12;
          break;
        }
      }
      $year = $parts[2];
      $ahours = explode (':', $parts[3]);
      $hour = $ahours[0];
      $min = $ahours[1];
      $sec = $ahours[2];
      $timezone_oper = $timezone[0];
      $timezone_hour = (intval (((''.$timezone_oper).substr ($timezone, 1, 2))) * 3600);
      $timezone_min = (intval (((''.$timezone_oper).substr ($timezone, 3, 2))) * 60);
      $timezone_diff = ($timezone_hour + $timezone_min);
      $user_timezone_oper = $this->timezone[0];
      $user_timezone_hour = (intval (((''.$user_timezone_oper).substr ($this->timezone, 1, 2))) * 3600);
      $user_timezone_min = (intval (((''.$user_timezone_oper).substr ($this->timezone, 3, 2))) * 60);
      $user_timezone_diff = ($user_timezone_hour + $user_timezone_min);
      $diff = ($timezone_diff - $user_timezone_diff);
      $mytimestamp = (mktime ($hour, $min, $sec, $mon, $day, $year) - $diff);
      return $mytimestamp;
    }
    function decode ($email)
    {
      $email = $this->fetch_structure ($email);
      $this->_msgbody = '';
      $body = $email['body'];
      $header = $email['header'];
      $mail_info = $this->get_mail_info ($header);
      $this->process_message ($header, $body);
      $this->_content['headers'] = $header;
      $this->_content['date'] = $mail_info['date'];
      $this->_content['subject'] = $mail_info['subject'];
      $this->_content['message-id'] = $mail_info['message-id'];
      $this->_content['from'] = $mail_info['from'];
      $this->_content['to'] = $mail_info['to'];
      $this->_content['cc'] = $mail_info['cc'];
      $this->_content['body'] = $this->_msgbody;
      $this->_content['read'] = $mail_info['read'];
      $this->_content['priority'] = $mail_info['priority'];
      return $this->_content;
    }
    function split_parts ($boundary, $body)
    {
      $startpos = ((strpos ($body, $boundary) + strlen ($boundary)) + 2);
      $lenbody = (strpos ($body, (((''.'
').$boundary).'--')) - $startpos);
      $body = substr ($body, $startpos, $lenbody);
      $parts = split ($boundary, $body);
      return split (((''.$boundary).'
'), $body);
    }
    function fetch_structure ($email)
    {
      $ARemail = array ();
      $separador = '
';
      $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_boundary ($ctype)
    {
      if (preg_match ('/boundary[ ]?=[ ]?(["]?.*)/i', $ctype, $regs))
      {
        $boundary = $regs[1];
        $boundary = preg_replace ('/^\\"(.*)\\"$/', '\\1', $boundary);
        $boundary = ('--'.str_replace ('[', '\\[', str_replace (']', '\\]', $boundary)));
        return $boundary;
      }
    }
  }
  require './inc/class.uebimiau_mail.php';
?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?