Bugfix by "Chiu Wai Pun" <pun@alumni.ust.hk>
[squirrelmail.git] / plugins / mail_fetch / fetch.php
index cb2a7f672f5dad340d5a27db60644bc462e28b73..eb00fff5974f127b65f4219e7d3cf1a47ae48caa 100644 (file)
         //   register_shutdown_function($pop3->quit());
         
         $msglist = $pop3->uidl();
-        
+
         $i = 1;
         for ($j = 1; $j < sizeof($msglist); $j++) {
            if ($msglist["$j"] == $mailfetch_uidl) {
             $Message = "";
             $MessArray = $pop3->get($i);
             
-            if ( (!$MessArray) or (gettype($MessArray) != "array")) {
-                  Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR);
-                  continue 2;
-            }
+            while ( (!$MessArray) or (gettype($MessArray) != "array")) {
+                 Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR);
+                 // re-connect pop3
+                 Mail_Fetch_Status(_("Server error...Disconnect"));
+                $pop3->quit();
+                 Mail_Fetch_Status(_("Re-connect from dead connectoin"));
+                 if (!$pop3->connect($mailfetch_server)) {
+                     Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR );
+                     Mail_Fetch_Status(_("Saving UIDL"));
+                     setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]);
+
+                     continue;
+                 }
+                 $Count = $pop3->login($mailfetch_user, $mailfetch_pass);
+                 if (($Count == false || $Count == -1) && $pop3->ERROR != '') {
+                     Mail_Fetch_Status(_("Login Failed:") . ' ' . $pop3->ERROR );
+                     Mail_Fetch_Status(_("Saving UIDL"));
+                     setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]);
+
+                     continue;
+                 }
+                 Mail_Fetch_Status(_("Re-fetching message ") . "$i" );
+                $MessArray = $pop3->get($i);
+
+            } // end while
             
             while (list($lineNum, $line) = each ($MessArray)) {
                  $Message .= $line;
             if (substr($Line, 0, 1) == '+') {
                 fputs($imap_stream, $Message);
                 sqimap_read_data($imap_stream, "A3$i", false, $response, $message);
-                Mail_Fetch_Status(_("Message appended to mailbox"));
+                if ( $response <> 'OK' ) {
+                    Mail_Fetch_Status(_("Error Appending Message!")." ".$message );
+                    Mail_Fetch_Status(_("Closing POP"));
+                    $pop3->quit();
+                    Mail_Fetch_Status(_("Logging out from IMAP"));
+                    sqimap_logout($imap_stream);
+
+                    Mail_Fetch_Status(_("Saving UIDL"));
+                    setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]);
+                   exit;
+                } else {
+                    Mail_Fetch_Status(_("Message appended to mailbox"));
+                }
                 
                 if ($mailfetch_lmos != 'on') {
                    if( $pop3->delete($i) ) {
             } else {
                 echo "$Line";
                 Mail_Fetch_Status(_("Error Appending Message!"));
+                Mail_Fetch_Status(_("Closing POP"));
+                $pop3->quit();
+                Mail_Fetch_Status(_("Logging out from IMAP"));
+                sqimap_logout($imap_stream);
+
+                // not gurantee corect!
+                Mail_Fetch_Status(_("Saving UIDL"));
+                setPref($data_dir,$username,"mailfetch_uidl_$i_loop", $mailfetch_uidl[$i-1]);
+                exit;
             }
         }