فهرست منبع

Fix IMAP PARSE reponse matching. This should get rid of retrival errors
with Missing parameters and those stupid <Undisclosed-Recipient:;> To:
lines that UW IMAP chokes on from Outlook Express.
Also changed some ereg to preg and removed some useless spacing.

indiri69 23 سال پیش
والد
کامیت
e9c6acd2f8
1فایلهای تغییر یافته به همراه31 افزوده شده و 24 حذف شده
  1. 31 24
      functions/imap_general.php

+ 31 - 24
functions/imap_general.php

@@ -78,8 +78,9 @@ function sqimap_read_data_list ($imap_stream, $pre, $handle_errors,
 
         // if (ereg("^\\* [0-9]+ FETCH.*\\{([0-9]+)\\}", $read, $regs)) {
         if (preg_match('/^\* [0-9]+ FETCH.*\{([0-9]+)\}/', $read, $regs)) {
-           $size = $regs[1];
-        } else if (ereg("^\\* [0-9]+ FETCH", $read, $regs)) {
+            $size = $regs[1];
+        //} else if (ereg("^\\* [0-9]+ FETCH", $read, $regs)) {
+        } else if (preg_match('/^\* [0-9]+ FETCH/', $read, $regs)) {
             // Sizeless response, probably single-line
             $size = -1;
             $data[] = $read;
@@ -116,18 +117,24 @@ function sqimap_read_data_list ($imap_stream, $pre, $handle_errors,
             } else {
                 if (preg_match("/^$pre (OK|BAD|NO)(.*)/", $read, $regs) ||
                 // if (ereg("^$pre (OK|BAD|NO)(.*)", $read, $regs) ||
-                   (($size == -1) && ereg("^\\* [0-9]+ FETCH.*", $read, $regs))) {
+                   (($size == -1) && preg_match('/^\* [0-9]+ FETCH.*/', $read, $regs))) {
                     break;
-                } else if ( preg_match("/^\* OK \[PARSE.*/", $read, $regs ) ) {
+                } else if ( preg_match('/^\* OK \[PARSE.*/', $read, $regs ) ) {
+                    while ( preg_match('/^\* OK \[PARSE.*/', $read, $regs ) ) {
+                        $read = fgets($imap_stream, $bufsize);
+                    }
                     /*
                         This block has been added in order to avoid the problem
                         caused by the * OK [PARSE] Missing parameter answer
                         Please, replace it with a better parsing if you know how.
+                        This block has been updated by
+                        Seth E. Randall <sethr@missoulafcu.org>.  Once we see
+                        one OK [PARSE line, we just go through and keep
+                        tossing them out until we get something different.
                     */
-                    $read = fgets ($imap_stream, $bufsize);
                     $data[] = $read;
                     $read = fgets ($imap_stream, $bufsize);
-                } else if (preg_match("/^\* BYE \[ALERT\](.*)/", $read, $regs)) {
+                } else if (preg_match('/^\* BYE \[ALERT\](.*)/', $read, $regs)) {
                     /*
                         It seems that the IMAP server has coughed a lung up
                         and hung up the connection.  Print any info we have
@@ -199,17 +206,17 @@ function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$mes
 function sqimap_login ($username, $password, $imap_server_address, $imap_port, $hide) {
 
     global $color, $squirrelmail_language, $HTTP_ACCEPT_LANGUAGE, $onetimepad;
-    
+
     $imap_stream = fsockopen ( $imap_server_address, $imap_port,
                              $error_number, $error_string, 15);
     if ( !$imap_stream ) {
         return FALSE;
     }
     $server_info = fgets ($imap_stream, 1024);
-    
+
     // Decrypt the password
     $password = OneTimePadDecrypt($password, $onetimepad);
-    
+
     /** Do some error correction **/
     if (!$imap_stream) {
         if (!$hide) {
@@ -248,13 +255,13 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $
                  * Therefore, apply the same hack as on the login
                  * screen.
                  */
-                
+
                 /* $squirrelmail_language is set by a cookie when
                  * the user selects language and logs out
                  */
-                
+
                 set_up_language($squirrelmail_language, true);
-                
+
                 displayHtmlHeader( _("Unknown user or password incorrect.") );
                 echo "<body bgcolor=\"#ffffff\">\n";
                 error_username_password_incorrect();
@@ -265,7 +272,7 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $
             exit;
         }
     }
-    
+
     return $imap_stream;
 }
 
@@ -279,7 +286,7 @@ function sqimap_logout ($imap_stream) {
 
 function sqimap_capability($imap_stream, $capability) {
     global $sqimap_capabilities;
-    
+
     if (!is_array($sqimap_capabilities)) {
         $read = sqimap_run_command($imap_stream, 'CAPABILITY', true, $a, $b);
 
@@ -306,12 +313,12 @@ function sqimap_get_delimiter ($imap_stream = false) {
 
     global $sqimap_delimiter;
     global $optional_delimiter;
-    
+
     /* Use configured delimiter if set */
     if((!empty($optional_delimiter)) && $optional_delimiter != 'detect') {
         return $optional_delimiter;
     }
-    
+
     /* Do some caching here */
     if (!$sqimap_delimiter) {
         if (sqimap_capability($imap_stream, 'NAMESPACE')) {
@@ -355,12 +362,12 @@ function sqimap_get_num_messages ($imap_stream, $mailbox) {
 
     $read_ary = sqimap_run_command ($imap_stream, "EXAMINE \"$mailbox\"", true, $result, $message);
     for ($i = 0; $i < count($read_ary); $i++) {
-     if (ereg("[^ ]+ +([^ ]+) +EXISTS", $read_ary[$i], $regs)) {
-        return $regs[1];
-     }
+        if (ereg("[^ ]+ +([^ ]+) +EXISTS", $read_ary[$i], $regs)) {
+            return $regs[1];
+        }
     }
     return sprintf( "BUG!  Couldn't get number of messages in %s!", $mailbox );
-    
+
 }
 
 
@@ -375,7 +382,7 @@ function sqimap_find_email ($string) {
     ** What about
     **    lehresma@css.tayloru.edu (Luke Ehresman)
     **/
-    
+
     if (ereg("<([^>]+)>", $string, $regs)) {
         $string = $regs[1];
     }
@@ -422,7 +429,7 @@ function sqimap_find_displayable_name ($string) {
 
     return trim($string);
 }
-    
+
 /*
 *  Returns the number of unseen messages in this folder
 */
@@ -445,12 +452,12 @@ function sqimap_unseen_messages ($imap_stream, $mailbox) {
 */
 function sqimap_append ($imap_stream, $sent_folder, $length) {
     fputs ($imap_stream, sqimap_session_id() . " APPEND \"$sent_folder\" (\\Seen) \{$length}\r\n");
-    $tmp = fgets ($imap_stream, 1024);    
+    $tmp = fgets ($imap_stream, 1024);
 }
 
 function sqimap_append_done ($imap_stream) {
     fputs ($imap_stream, "\r\n");
     $tmp = fgets ($imap_stream, 1024);
 }
-   
+
 ?>