alecpl
2008-09-16 81b573d98ae143bd11b37ff2027bfad78e2d460c
program/lib/imap.inc
@@ -65,6 +65,7 @@
      - RFC3501 [7.1] don't call CAPABILITY if was returned in server 
        optional resposne in iil_Connect(), added iil_C_GetCapability()
      - remove 'undisclosed-recipients' string from 'To' header
      - iil_C_HandlePartBody(): added 6th argument and fixed endless loop
********************************************************/
@@ -2353,19 +2354,19 @@
   return $result;
}
function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode, $file=NULL) {
   /* modes:
        1: return string
        1: return string (or write to $file pointer)
        2: print
        3: base64 and print
        3: base64 and print (or write to $file pointer)
   */
   
   $fp     = $conn->fp;
   $result = false;
   if (($part == 0) || empty($part)) {
       $part = 'TEXT';
      $part = 'TEXT';
   }
   if (iil_C_Select($conn, $mailbox)) {
          $reply_key = '* ' . $id;
        
@@ -2399,8 +2400,11 @@
                   if ($mode == 2) {
                      echo $result;
                   } else if ($mode == 3) {
                      echo base64_decode($result);
                   }
            if ($file)
               fwrite($file, base64_decode($result));
                     else
               echo base64_decode($result);
         }
          } else if ($line[$len-1] == '}') {
                   //multi-line request, find sizes of content and receive that many bytes
              $from     = strpos($line, '{') + 1;
@@ -2408,34 +2412,47 @@
              $len      = $to - $from;
                   $sizeStr  = substr($line, $from, $len);
              $bytes    = (int)$sizeStr;
                   $received = 0;
              while ($received < $bytes) {
                     $remaining = $bytes - $received;
                      $line      = iil_ReadLine($fp, 1024);
              while ($bytes > 0) {
                          $line      = iil_ReadLine($fp, 1024);
                     $len       = strlen($line);
                
                      if ($len > $remaining) {
                             $line = substr($line, 0, $remaining);
                      if ($len > $bytes) {
                             $line = substr($line, 0, $bytes);
                      }
                     $received += strlen($line);
                     $bytes -= strlen($line);
                      if ($mode == 1) {
                             $result .= rtrim($line, "\t\r\n\0\x0B") . "\n";
               if ($file)
                  fwrite($file, rtrim($line, "\t\r\n\0\x0B") . "\n");
                             else
                  $result .= rtrim($line, "\t\r\n\0\x0B") . "\n";
                      } else if ($mode == 2) {
                             echo rtrim($line, "\t\r\n\0\x0B") . "\n";
                      } else if ($mode == 3) {
                        echo base64_decode($line);
                     }
               if ($file)
                  fwrite($file, base64_decode($line));
                        else
                  echo base64_decode($line);
            }
              }
          }
           // read in anything up until 'til last line
           // read in anything up until last line
      do {
              $line = iil_ReadLine($fp, 1024);
      } while (!iil_StartsWith($line, $key));
        
      if ($mode == 3 && $file) {
         return true;
      }
          if ($result) {
             $result = rtrim($result, "\t\r\n\0\x0B");
              return $result; // substr($result, 0, strlen($result)-1);
         if ($file) {
            fwrite($file, $result);
            return true;
         }
         return $result; // substr($result, 0, strlen($result)-1);
          }
          
      return false;
@@ -2444,13 +2461,18 @@
   }
    
   if ($mode==1) {
      if ($file) {
         fwrite($file, $result);
         return true;
      }
          return $result;
   }
   return $received;
   return false;
}
function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part) {
   return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1);
function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part, $file=NULL) {
   return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1, $file);
}
function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) {