thomascube
2008-09-19 a3f149eb5729ef1ba6d1c05b29fead1058f4c888
program/include/rcube_imap.php
@@ -1198,9 +1198,10 @@
   }
      // some servers (eg. dovecot-1.x) have no support for parameter value continuations
      // we must fetch and parse headers "manually"
      //TODO: fetching headers for a second time is not effecient, this code should be moved somewhere earlier --tensor
      if ($i<2) {
        // TODO: fetch only Content-Type/Content-Disposition header
        $headers = iil_C_FetchPartBody($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id.'.HEADER');
        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
   $filename_mime = '';
   $i = 0;
   while (preg_match('/filename\*'.$i.'\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
@@ -1216,9 +1217,9 @@
   $filename_encoded .= $part->d_parameters['filename*'.$i.'*'];
   }
      if ($i<2) {
        $headers = iil_C_FetchPartBody($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id.'.HEADER');
        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
   $filename_encoded = '';
   $i = 0;
   $i = 0; $matches = array();
   while (preg_match('/filename\*'.$i.'\*\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
     $filename_encoded .= $matches[1];
     $i++;
@@ -1232,9 +1233,9 @@
        $filename_mime .= $part->ctype_parameters['name*'.$i];
   }
      if ($i<2) {
        $headers = iil_C_FetchPartBody($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id.'.HEADER');
        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
   $filename_mime = '';
   $i = 0;
   $i = 0; $matches = array();
   while (preg_match('/\s+name\*'.$i.'\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
     $filename_mime .= $matches[1];
     $i++;
@@ -1248,9 +1249,9 @@
        $filename_encoded .= $part->ctype_parameters['name*'.$i.'*'];
   }
      if ($i<2) {
        $headers = iil_C_FetchPartBody($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id.'.HEADER');
        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);
   $filename_encoded = '';
   $i = 0;
   $i = 0; $matches = array();
   while (preg_match('/\s+name\*'.$i.'\*\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {
     $filename_encoded .= $matches[1];
     $i++;
@@ -1283,9 +1284,10 @@
   * @param  string Part number
   * @param  object rcube_message_part Part object created by get_structure()
   * @param  mixed  True to print part, ressource to write part contents in
   * @param  resource File pointer to save the message part
   * @return string Message/part body if not printed
   */
  function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL)
  function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL, $fp=NULL)
    {
    if (!($msg_id = $this->_uid2id($uid)))
      return FALSE;
@@ -1318,7 +1320,10 @@
      }
    else
      {
      $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
      if ($fp && $o_part->encoding == 'base64')
        return iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 3, $fp);
      else
        $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
      // decode part body
      if ($o_part->encoding)
@@ -1333,8 +1338,14 @@
        $body = rcube_charset_convert($body, $o_part->charset);
        }
      if ($fp)
        {
        fwrite($fp, $body);
   return true;
        }
      }
    return $body;
    }