alecpl
2009-07-11 5f571eb1dba01a5f257c52978f30cd53d773d15c
program/lib/imap.inc
@@ -197,7 +197,11 @@
}
function iil_PutLine($fp, $string, $endln=true) {
//      console('C: '. rtrim($string));
   global $my_prefs;
   if(!empty($my_prefs['debug_mode']))
          write_log('imap', 'C: '. rtrim($string));
        return fputs($fp, $string . ($endln ? "\r\n" : ''));
}
@@ -225,6 +229,8 @@
}
function iil_ReadLine($fp, $size=1024) {
   global $my_prefs;
   $line = '';
   if (!$fp) {
@@ -240,7 +246,8 @@
          if ($buffer === false) {
              break;
          }
//      console('S: '. chop($buffer));
      if(!empty($my_prefs['debug_mode']))
         write_log('imap', 'S: '. chop($buffer));
          $line .= $buffer;
   } while ($buffer[strlen($buffer)-1] != "\n");
   
@@ -265,6 +272,7 @@
}
function iil_ReadBytes($fp, $bytes) {
   global $my_prefs;
   $data = '';
   $len  = 0;
   do {
@@ -273,7 +281,8 @@
      if ($len == strlen($data)) {
                  break; //nothing was read -> exit to avoid apache lockups
          }
//      console('[...] '. $d);
      if(!empty($my_prefs['debug_mode']))
         write_log('imap', 'S: '. $d);
          $len = strlen($data);
   } while ($len < $bytes);
   
@@ -553,6 +562,8 @@
                $my_prefs['rootdir'] = $optval;
         } else if ($optkey == 'delimiter') {
                $my_prefs['delimiter'] = $optval;
         } else if ($optkey == 'debug_mode') {
                $my_prefs['debug_mode'] = $optval;
         }
      }
   }
@@ -2179,14 +2190,14 @@
   return $result;
}
function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $is_uid=false, $part=NULL) {
   $part = empty($part) ? 'HEADER' : $part.'.MIME';
        return iil_C_HandlePartBody($conn, $mailbox, $id, $part);
        return iil_C_HandlePartBody($conn, $mailbox, $id, $is_uid, $part);
}
function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part='', $encoding=NULL, $print=NULL, $file=NULL) {
function iil_C_HandlePartBody(&$conn, $mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL) {
   
   $fp     = $conn->fp;
   $result = false;
@@ -2213,7 +2224,7 @@
          // format request
      $key     = 'ftch0';
      $request = $key . " FETCH $id (BODY.PEEK[$part])";
      $request = $key . ($is_uid ? ' UID' : '') . " FETCH $id (BODY.PEEK[$part])";
          // send request
      if (!iil_PutLine($fp, $request)) {
          return false;
@@ -2238,7 +2249,7 @@
                 $len  = $to - $from;
            $result = substr($line, $from, $len);
         }
              if ($mode == 1)
            $result = base64_decode($result);
         else if ($mode == 2)
@@ -2254,7 +2265,7 @@
                   $sizeStr  = substr($line, $from, $len);
              $bytes    = (int)$sizeStr;
         $prev     = '';
              while ($bytes > 0) {
                          $line      = iil_ReadLine($fp, 1024);
                     $len       = strlen($line);
@@ -2318,7 +2329,7 @@
         do {
                 $line = iil_ReadLine($fp, 1024);
         } while (!iil_StartsWith($line, $key, true));
          if ($result) {
             $result = rtrim($result, "\t\r\n\0\x0B");
         if ($file) {
@@ -2327,20 +2338,12 @@
            echo $result;
         } else
            return $result; // substr($result, 0, strlen($result)-1);
         return true;
          }
      return true;
   }
    
   return false;
}
function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part, $file=NULL) {
   return iil_C_HandlePartBody($conn, $mailbox, $id, $part, NULL, NULL, $file);
}
function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) {
   iil_C_HandlePartBody($conn, $mailbox, $id, $part, NULL, true, NULL);
}
function iil_C_CreateFolder(&$conn, $folder) {
@@ -2466,23 +2469,22 @@
   return false;
}
function iil_C_FetchStructureString(&$conn, $folder, $id) {
function iil_C_FetchStructureString(&$conn, $folder, $id, $is_uid=false) {
   $fp     = $conn->fp;
   $result = false;
   
   if (iil_C_Select($conn, $folder)) {
      $key = 'F1247';
      if (iil_PutLine($fp, "$key FETCH $id (BODYSTRUCTURE)")) {
      if (iil_PutLine($fp, $key . ($is_uid ? ' UID' : '') ." FETCH $id (BODYSTRUCTURE)")) {
         do {
            $line = iil_ReadLine($fp, 5000);
            $line = iil_MultLine($fp, $line);
            list(, $index, $cmd, $rest) = explode(' ', $line);
            if ($cmd != 'FETCH' || $index == $id || preg_match("/^$key/", $line))
            if (!preg_match("/^$key/", $line))
               $result .= $line;
         } while (!preg_match("/^$key/", $line));
         $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -(strlen($result)-strrpos($result, $key)+1)));
         $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -1));
      }
   }
   return $result;