Selaa lähdekoodia

Use sqimap_session_id instead of axxxx for imap connections.

philippe_mingo 24 vuotta sitten
vanhempi
commit
ca1cc1a204
5 muutettua tiedostoa jossa 111 lisäystä ja 100 poistoa
  1. 22 13
      functions/imap_general.php
  2. 47 44
      functions/imap_mailbox.php
  3. 18 18
      functions/imap_messages.php
  4. 6 6
      functions/imap_search.php
  5. 18 19
      functions/mime.php

+ 22 - 13
functions/imap_general.php

@@ -14,6 +14,15 @@
    global $imap_general_debug;
    $imap_general_debug = false;
 
+   /******************************************************************************
+    **  Sets an unique session id in order to avoid simultanous sessions crash.
+    ******************************************************************************/
+
+   function sqimap_session_id() {
+      return( substr( session_id(), -4 ) );
+   }
+
+
    /******************************************************************************
     **  Reads the output from the IMAP stream.  If handle_errors is set to true,
     **  this will also handle all errors that are received.  If it is not set,
@@ -156,9 +165,9 @@
          exit;
       }
 
-      fputs ($imap_stream, "a001 LOGIN \"" . quoteIMAP($username) . 
+      fputs ($imap_stream, sqimap_session_id() . ' LOGIN "' . quoteIMAP($username) . 
          '" "' . quoteIMAP($password) . "\"\r\n");
-      $read = sqimap_read_data ($imap_stream, 'a001', false, $response, $message);
+      $read = sqimap_read_data ($imap_stream, sqimap_session_id(), false, $response, $message);
 
       /** If the connection was not successful, lets see why **/
       if ($response != "OK") {
@@ -238,7 +247,7 @@
     **  Simply logs out the imap session
     ******************************************************************************/
    function sqimap_logout ($imap_stream) {
-      fputs ($imap_stream, "a001 LOGOUT\r\n");
+      fputs ($imap_stream, sqimap_session_id() . " LOGOUT\r\n");
    }
 
    function sqimap_capability($imap_stream, $capability) {
@@ -246,8 +255,8 @@
 	global $imap_general_debug;
 
 	if (!is_array($sqimap_capabilities)) {
-		fputs ($imap_stream, "a001 CAPABILITY\r\n");
-		$read = sqimap_read_data($imap_stream, 'a001', true, $a, $b);
+		fputs ($imap_stream, sqimap_session_id() . " CAPABILITY\r\n");
+		$read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $a, $b);
 
 		$c = explode(' ', $read[0]);
 		for ($i=2; $i < count($c); $i++) {
@@ -284,8 +293,8 @@
 			   OS:  * NAMESPACE (PERSONAL NAMESPACES) (OTHER_USERS NAMESPACE) (SHARED NAMESPACES)
 			   OS:  We want to lookup all personal NAMESPACES...
 			*/
-			fputs ($imap_stream, "a001 NAMESPACE\r\n");
-			$read = sqimap_read_data($imap_stream, 'a001', true, $a, $b);
+			fputs ($imap_stream, sqimap_session_id() . " NAMESPACE\r\n");
+			$read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $a, $b);
 			if (eregi('\\* NAMESPACE +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL)', $read[0], $data)) {
 				if (eregi('^\\( *\\((.*)\\) *\\)', $data[1], $data2))
 					$pn = $data2[1];
@@ -316,8 +325,8 @@
     **  Gets the number of messages in the current mailbox. 
     ******************************************************************************/
    function sqimap_get_num_messages ($imap_stream, $mailbox) {
-      fputs ($imap_stream, "a001 EXAMINE \"$mailbox\"\r\n");
-      $read_ary = sqimap_read_data ($imap_stream, 'a001', true, $result, $message);
+      fputs ($imap_stream, sqimap_session_id() . " EXAMINE \"$mailbox\"\r\n");
+      $read_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $result, $message);
       for ($i = 0; $i < count($read_ary); $i++) {
          if (ereg("[^ ]+ +([^ ]+) +EXISTS", $read_ary[$i], $regs)) {
 	    return $regs[1];
@@ -377,9 +386,9 @@
     **  Returns the number of unseen messages in this folder 
     ******************************************************************************/
    function sqimap_unseen_messages ($imap_stream, $mailbox) {
-      //fputs ($imap_stream, "a001 SEARCH UNSEEN NOT DELETED\r\n");
-      fputs ($imap_stream, "a001 STATUS \"$mailbox\" (UNSEEN)\r\n");
-      $read_ary = sqimap_read_data ($imap_stream, 'a001', true, $result, $message);
+      //fputs ($imap_stream, sqimap_session_id() . " SEARCH UNSEEN NOT DELETED\r\n");
+      fputs ($imap_stream, sqimap_session_id() . " STATUS \"$mailbox\" (UNSEEN)\r\n");
+      $read_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $result, $message);
       ereg("UNSEEN ([0-9]+)", $read_ary[0], $regs);
       return $regs[1];
    }
@@ -389,7 +398,7 @@
     **  Saves a message to a given folder -- used for saving sent messages
     ******************************************************************************/
    function sqimap_append ($imap_stream, $sent_folder, $length) {
-      fputs ($imap_stream, "a001 APPEND \"$sent_folder\" (\\Seen) \{$length}\r\n");
+      fputs ($imap_stream, sqimap_session_id() . " APPEND \"$sent_folder\" (\\Seen) \{$length}\r\n");
       $tmp = fgets ($imap_stream, 1024);
    } 
 

+ 47 - 44
functions/imap_mailbox.php

@@ -15,8 +15,8 @@
     **  Expunges a mailbox 
     ******************************************************************************/
    function sqimap_mailbox_expunge ($imap_stream, $mailbox,$handle_errors = true) {
-      fputs ($imap_stream, "a001 EXPUNGE\r\n");
-      $read = sqimap_read_data($imap_stream, "a001", $handle_errors, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " EXPUNGE\r\n");
+      $read = sqimap_read_data($imap_stream, sqimap_session_id(), $handle_errors, $response, $message);
    }
 
 
@@ -26,8 +26,8 @@
    function sqimap_mailbox_exists ($imap_stream, $mailbox) {
       if (! isset($mailbox))
           return false;
-      fputs ($imap_stream, "a001 LIST \"\" \"$mailbox\"\r\n");
-      $mbx = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"$mailbox\"\r\n");
+      $mbx = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
       return isset($mbx[0]);
    }
 
@@ -40,8 +40,8 @@
       if( $mailbox == _("None") )
           return;
       
-      fputs ($imap_stream, "a001 SELECT \"$mailbox\"\r\n");
-             $read = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " SELECT \"$mailbox\"\r\n");
+             $read = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
       if ($recent) {
          for ($i=0; $i<count($read); $i++) {
             if (strpos(strtolower($read[$i]), "recent")) {
@@ -51,8 +51,8 @@
          return $r[1];
       }
       if ($auto_expunge) {
-         fputs ($imap_stream, "a001 EXPUNGE\r\n");
-         $tmp = sqimap_read_data($imap_stream, "a001", false, $a, $b);
+         fputs ($imap_stream, sqimap_session_id() . " EXPUNGE\r\n");
+         $tmp = sqimap_read_data($imap_stream, sqimap_session_id(), false, $a, $b);
       }   
    }
 
@@ -66,8 +66,8 @@
          $dm = sqimap_get_delimiter($imap_stream);
          $mailbox = $mailbox.$dm;
       }
-      fputs ($imap_stream, "a001 CREATE \"$mailbox\"\r\n");
-      $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " CREATE \"$mailbox\"\r\n");
+      $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
 
       sqimap_subscribe ($imap_stream, $mailbox);
    }
@@ -78,8 +78,8 @@
     **  Subscribes to an existing folder 
     ******************************************************************************/
    function sqimap_subscribe ($imap_stream, $mailbox) {
-      fputs ($imap_stream, "a001 SUBSCRIBE \"$mailbox\"\r\n");
-      $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " SUBSCRIBE \"$mailbox\"\r\n");
+      $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
    }
 
 
@@ -91,8 +91,8 @@
    function sqimap_unsubscribe ($imap_stream, $mailbox) {
                 global $imap_server_type;
 
-      fputs ($imap_stream, "a001 UNSUBSCRIBE \"$mailbox\"\r\n");
-      $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " UNSUBSCRIBE \"$mailbox\"\r\n");
+      $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
    }
 
 
@@ -102,8 +102,8 @@
     **  This function simply deletes the given folder
     ******************************************************************************/
    function sqimap_mailbox_delete ($imap_stream, $mailbox) {
-      fputs ($imap_stream, "a001 DELETE \"$mailbox\"\r\n");
-      $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " DELETE \"$mailbox\"\r\n");
+      $read_ary = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
       sqimap_unsubscribe ($imap_stream, $mailbox);
    }
    
@@ -219,8 +219,8 @@
       $dm = sqimap_get_delimiter ($imap_stream);
 
       /** LSUB array **/
-      fputs ($imap_stream, "a001 LSUB \"$folder_prefix\" \"*\"\r\n");
-      $lsub_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " LSUB \"$folder_prefix\" \"*\"\r\n");
+      $lsub_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
       
       // Section about removing the last element was removed
       // We don't return "* OK" anymore from sqimap_read_data
@@ -261,8 +261,8 @@
          else
             $mbx = $sorted_lsub_ary[$i];
 
-         fputs ($imap_stream, "a001 LIST \"\" \"$mbx\"\r\n");
-         $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+         fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"$mbx\"\r\n");
+         $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
 	 // Another workaround for EIMS
          if (isset($read[1]) && 
 	     ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", 
@@ -284,8 +284,8 @@
       /** Just in case they're not subscribed to their inbox, we'll get it 
           for them anyway **/
       if ($inbox_subscribed == false || $inbox_in_list == false) {
-         fputs ($imap_stream, "a001 LIST \"\" \"INBOX\"\r\n");
-         $inbox_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+         fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"INBOX\"\r\n");
+         $inbox_ary = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
 	 // Another workaround for EIMS
          if (isset($inbox_ary[1]) &&
 	     ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", 
@@ -366,22 +366,24 @@
       
       $dm = sqimap_get_delimiter ($imap_stream);
 
-      fputs ($imap_stream, "a001 LIST \"$folder_prefix\" *\r\n");
-      $read_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+      $ssid = sqimap_session_id();
+      $lsid = strlen( $ssid ); 
+      fputs ($imap_stream, $ssid . " LIST \"$folder_prefix\" *\r\n");
+      $read_ary = sqimap_read_data ($imap_stream, $ssid, true, $response, $message);
       $g = 0;
-      $phase = "inbox"; 
+      $phase = "inbox";
 
       for ($i = 0; $i < count($read_ary); $i++) {
          // Another workaround for EIMS
-	 if (isset($read_ary[$i + 1]) &&
-	     ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", 
-	     $read_ary[$i], $regs)) {
-	    $i ++;
-	    $read_ary[$i] = $regs[1] . '"' . 
-	       addslashes(trim($read_ary[$i])) .
-	       '"' . $regs[2];
-	 }
-         if (substr ($read_ary[$i], 0, 4) != "a001") {
+			if (isset($read_ary[$i + 1]) &&
+			  ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", 
+			  $read_ary[$i], $regs)) {
+			 $i ++;
+			 $read_ary[$i] = $regs[1] . '"' . 
+			    addslashes(trim($read_ary[$i])) .
+			    '"' . $regs[2];
+			}
+         if (substr ($read_ary[$i], 0, $lsid) != $ssid ) {
 
             // Store the raw IMAP reply
             $boxes[$g]["raw"] = $read_ary[$i];
@@ -416,16 +418,17 @@
             $boxes[$g]["id"] = $g;
 
             /** Now lets get the flags for this mailbox **/
-            fputs ($imap_stream, "a002 LIST \"\" \"$mailbox\"\r\n"); 
-            $read_mlbx = sqimap_read_data ($imap_stream, "a002", true, $response, $message);
-	    // Another workaround for EIMS
-	    if (isset($read_mlbx[1]) &&
-	        ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", 
-	        $read_mlbx[0], $regs)) {
-	       $read_mlbx[0] = $regs[1] . '"' . 
-	          addslashes(trim($read_mlbx[1])) .
-	          '"' . $regs[2];
-	    }
+            fputs ($imap_stream, sqimap_session_id() . " LIST \"\" \"$mailbox\"\r\n"); 
+            $read_mlbx = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
+            
+				// Another workaround for EIMS
+				if (isset($read_mlbx[1]) &&
+				  ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", 
+				  $read_mlbx[0], $regs)) {
+				 $read_mlbx[0] = $regs[1] . '"' . 
+				    addslashes(trim($read_mlbx[1])) .
+				    '"' . $regs[2];
+				}
 
             $flags = substr($read_mlbx[0], strpos($read_mlbx[0], "(")+1);
             $flags = substr($flags, 0, strpos($flags, ")"));

+ 18 - 18
functions/imap_messages.php

@@ -15,8 +15,8 @@
     **  Copies specified messages to specified folder
     ******************************************************************************/
    function sqimap_messages_copy ($imap_stream, $start, $end, $mailbox) {
-      fputs ($imap_stream, "a001 COPY $start:$end \"$mailbox\"\r\n");
-      $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " COPY $start:$end \"$mailbox\"\r\n");
+      $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
    }
 
    /******************************************************************************
@@ -37,8 +37,8 @@
     **  Sets the specified messages with specified flag
     ******************************************************************************/
    function sqimap_messages_flag ($imap_stream, $start, $end, $flag) {
-      fputs ($imap_stream, "a001 STORE $start:$end +FLAGS (\\$flag)\r\n");
-      $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " STORE $start:$end +FLAGS (\\$flag)\r\n");
+      $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
    }
 
 
@@ -46,8 +46,8 @@
     **  Remove specified flag from specified messages
     ******************************************************************************/
    function sqimap_messages_remove_flag ($imap_stream, $start, $end, $flag) {
-      fputs ($imap_stream, "a001 STORE $start:$end -FLAGS (\\$flag)\r\n");
-      $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " STORE $start:$end -FLAGS (\\$flag)\r\n");
+      $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
    }
 
 
@@ -104,9 +104,9 @@
       }
 
 
-      $query = "a001 FETCH $msgs_str BODY.PEEK[HEADER.FIELDS (Date To From Cc Subject Message-Id X-Priority Content-Type)]\r\n";
+      $query = sqimap_session_id() . " FETCH $msgs_str BODY.PEEK[HEADER.FIELDS (Date To From Cc Subject Message-Id X-Priority Content-Type)]\r\n";
       fputs ($imap_stream, $query);
-      $readin_list = sqimap_read_data_list($imap_stream, "a001", true, $response, $message);
+      $readin_list = sqimap_read_data_list($imap_stream, sqimap_session_id(), true, $response, $message);
 
 
       foreach ($readin_list as $r) {
@@ -132,9 +132,9 @@
       }
       arsort($read_list);
       
-      $query = "a002 FETCH $msgs_str RFC822.SIZE\r\n";
+      $query = sqimap_session_id() . " FETCH $msgs_str RFC822.SIZE\r\n";
       fputs ($imap_stream, $query);
-      $sizesin_list = sqimap_read_data_list($imap_stream, "a002", true, $response, $message);
+      $sizesin_list = sqimap_read_data_list($imap_stream, sqimap_session_id(), true, $response, $message);
       
       foreach ($sizesin_list as $r) {
          if (!eregi("^\\* ([0-9]+) FETCH", $r[0], $regs)) {
@@ -201,8 +201,8 @@
             
          }
          if (trim($date) == "") {
-            fputs($imap_stream, "a002 FETCH $msg_list[$msgi] INTERNALDATE\r\n");
-            $readdate = sqimap_read_data($imap_stream, "a002", true, $response, $message);
+            fputs($imap_stream, sqimap_session_id() . " FETCH $msg_list[$msgi] INTERNALDATE\r\n");
+            $readdate = sqimap_read_data($imap_stream, sqimap_session_id(), true, $response, $message);
             if (eregi(".*INTERNALDATE \"(.*)\".*", $readdate[0], $regs)) {
                $date_list = explode(" ", trim($regs[1]));
                $date_list[0] = str_replace("-", " ", $date_list[0]);
@@ -237,8 +237,8 @@
     **  Returns the flags for the specified messages 
     ******************************************************************************/
    function sqimap_get_flags ($imap_stream, $i) {
-      fputs ($imap_stream, "a001 FETCH $i:$i FLAGS\r\n");
-      $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " FETCH $i:$i FLAGS\r\n");
+      $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
       if (ereg("FLAGS(.*)", $read[0], $regs))
           return explode(" ", trim(ereg_replace('[\\(\\)\\\\]', '', $regs[1])));
       return Array('None');
@@ -249,8 +249,8 @@
       for ($i = 0; $i < sizeof($msg_list); $i++) {
          $id2index[$msg_list[$i]] = $i;
       }
-      fputs ($imap_stream, "a001 FETCH $msgs_str FLAGS\r\n");
-      $result_list = sqimap_read_data_list ($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " FETCH $msgs_str FLAGS\r\n");
+      $result_list = sqimap_read_data_list ($imap_stream, sqimap_session_id(), true, $response, $message);
       $result_flags = array();
 
       for ($i = 0; $i < sizeof($result_list); $i++) {
@@ -284,8 +284,8 @@
     **  Wrapper function that reformats the header information.
     ******************************************************************************/
    function sqimap_get_message_header ($imap_stream, $id, $mailbox) {
-      fputs ($imap_stream, "a001 FETCH $id:$id BODY[HEADER]\r\n");
-      $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " FETCH $id:$id BODY[HEADER]\r\n");
+      $read = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
      
       $header = sqimap_get_header($imap_stream, $read); 
       $header->id = $id;

+ 6 - 6
functions/imap_search.php

@@ -20,20 +20,20 @@ function sqimap_search($imapConnection,$search_where,$search_what,$mailbox,$colo
    $urlMailbox = urlencode($mailbox);
    
    # Construct the Search QuERY
-   
+   $ss = sqimap_session_id();
    if (isset($languages[$squirrelmail_language]["CHARSET"]) && $languages[$squirrelmail_language]["CHARSET"]) {
-      $ss = "a001 SEARCH CHARSET ".$languages[$squirrelmail_language]["CHARSET"]." ALL $search_where \"$search_what\"\r\n";
+      $ss = " SEARCH CHARSET ".$languages[$squirrelmail_language]["CHARSET"]." ALL $search_where \"$search_what\"\r\n";
    } else {
-      $ss = "a001 SEARCH ALL $search_where \"$search_what\"\r\n";
+      $ss = " SEARCH ALL $search_where \"$search_what\"\r\n";
    }
    fputs($imapConnection,$ss);
 
    # Read Data Back From IMAP
-   $readin = sqimap_read_data ($imapConnection, "a001", false, $result, $message);
+   $readin = sqimap_read_data ($imapConnection, sqimap_session_id(), false, $result, $message);
    if (isset($languages[$squirrelmail_language]["CHARSET"]) && strtolower($result) == "no") { 
-      $ss = "a001 SEARCH CHARSET \"US-ASCII\" ALL $search_where \"$search_what\"\r\n";
+      $ss = sqimap_session_id() . " SEARCH CHARSET \"US-ASCII\" ALL $search_where \"$search_what\"\r\n";
       fputs ($imapConnection, $ss);
-      $readin = sqimap_read_data ($imapConnection, "a001", true, $result, $message);
+      $readin = sqimap_read_data ($imapConnection, sqimap_session_id(), true, $result, $message);
    }
    unset($messagelist); $msgs=""; $c = 0;
 

+ 18 - 19
functions/mime.php

@@ -57,17 +57,17 @@
       sqimap_messages_flag ($imap_stream, $header->id, $header->id, "Seen");
       
       $id = $header->id;
-      fputs ($imap_stream, "a001 FETCH $id BODYSTRUCTURE\r\n");
+      fputs ($imap_stream, sqimap_session_id() . " FETCH $id BODYSTRUCTURE\r\n");
       //
       // This should use sqimap_read_data instead of reading it itself
       //
+      $sid = sqimap_session_id();
+      $lsid = strlen( $sid );
       $read = fgets ($imap_stream, 10000);
-      $response = substr($read, 0, 4);
       $bodystructure = "";
-      while ($response != 'a001' ) && !feof( $imap_stream ) {
+      while( substr($read, 0, $lsid) <> $sid && !feof( $imap_stream ) ) {
          $bodystructure .= $read;
          $read = fgets ($imap_stream, 10000);
-         $response = substr($read, 0, 4);
       }
       $read = $bodystructure;
 
@@ -379,8 +379,8 @@
       // that it is the first one.  That is usually the case anyway.
       if (!$ent_id) $ent_id = 1;
 
-      fputs ($imap_stream, "a010 FETCH $id BODY[$ent_id]\r\n");
-      $data = sqimap_read_data ($imap_stream, 'a010', true, $response, $message);
+      fputs ($imap_stream, sqimap_session_id() . " FETCH $id BODY[$ent_id]\r\n");
+      $data = sqimap_read_data ($imap_stream, sqimap_session_id(), true, $response, $message);
       $topline = array_shift($data);
       while (! ereg('\\* [0-9]+ FETCH ', $topline) && $data)
           $topline = array_shift($data);
@@ -393,13 +393,12 @@
          return $regs[1];
       }
       
-      $str = "Body retrieval error.  Please report this bug!\n";
-      $str .= "Response:  $response\n";
-      $str .= "Message:  $message\n";
-      $str .= "FETCH line:  $topline";
-      $str .= "---------------\n$wholemessage";
-      foreach ($data as $d)
-      {
+      $str = "Body retrieval error.  Please report this bug!\n" .
+             "Response:  $response\n" .
+             "Message:  $message\n" .
+             "FETCH line:  $topline" .
+             "---------------\n$wholemessage";
+      foreach ($data as $d) {
           $str .= htmlspecialchars($d) . "\n";
       }
       return $str;
@@ -414,21 +413,21 @@
       // and it would take over 30 seconds to download it.
       set_time_limit(0);
       
-      fputs ($imap_stream, "a001 FETCH $id BODY[$ent_id]\r\n");
+      fputs ($imap_stream, sqimap_session_id() . " FETCH $id BODY[$ent_id]\r\n");
 	  $cnt = 0;
 	  $continue = true;
 	  	$read = fgets ($imap_stream,4096);
-		// This could be bad -- if the section has 'a001 OK'
+		// This could be bad -- if the section has sqimap_session_id() . ' OK'
 		// or similar, it will kill the download.
-		while (!ereg("^a001 (OK|BAD|NO)(.*)$", $read, $regs)) {
+		while (!ereg("^" . sqimap_session_id() . " (OK|BAD|NO)(.*)$", $read, $regs)) {
 			if (trim($read) == ")==") {
 				$read1 = $read;
 	  			$read = fgets ($imap_stream,4096);
-				if (ereg("^a001 (OK|BAD|NO)(.*)$", $read, $regs)) {
+				if (ereg("^" . sqimap_session_id() . " (OK|BAD|NO)(.*)$", $read, $regs)) {
 					return;
 				} else {
-					echo decodeBody($read1, $encoding);
-					echo decodeBody($read, $encoding);
+					echo decodeBody($read1, $encoding) . 
+					     decodeBody($read, $encoding);
 				}
 			} else if ($cnt) {
 				echo decodeBody($read, $encoding);