From 44a3ca20aa2a2c1bb4e0ee66ce9106d88c83c312 Mon Sep 17 00:00:00 2001 From: fidian Date: Wed, 13 Jun 2001 17:46:13 +0000 Subject: [PATCH] * Numerous fixes for Eudora's IMAP (That's the EIMS thing, right?) git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1414 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_mailbox.php | 80 ++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 21 deletions(-) diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 5d59aafb..0ed33a1c 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -203,19 +203,26 @@ $dm = sqimap_get_delimiter ($imap_stream); /** LSUB array **/ - $inbox_subscribed = false; - fputs ($imap_stream, "a001 LSUB \"$folder_prefix\" \"*%\"\r\n"); + fputs ($imap_stream, "a001 LSUB \"$folder_prefix\" \"*\"\r\n"); $lsub_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message); + + // Section about removing the last element was removed + // We don't return "* OK" anymore from sqimap_read_data - /** OS: we don't want to parse last element of array, 'cause it is OK command, so we unset it **/ - /** LUKE: This introduced errors.. do a check first **/ - if (substr($lsub_ary[count($lsub_ary)-1], 0, 4) == "* OK") { - unset($lsub_ary[count($lsub_ary)-1]); - } - + $sorted_lsub_ary = array(); for ($i=0;$i < count($lsub_ary); $i++) { - $sorted_lsub_ary[$i] = find_mailbox_name($lsub_ary[$i]); - if ($sorted_lsub_ary[$i] == "INBOX") + // Workaround for EIMS + // Doesn't work if the mailbox name is multiple lines + if (isset($lsub_ary[$i + 1]) && + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + $lsub_ary[$i], $regs)) { + $i ++; + $lsub_ary[$i] = $regs[1] . '"' . addslashes(trim($lsub_ary[$i])) . + '"' . $regs[2]; + } + $temp_mailbox_name = find_mailbox_name($lsub_ary[$i]); + $sorted_lsub_ary[] = $temp_mailbox_name; + if (strtoupper($temp_mailbox_name) == 'INBOX') $inbox_subscribed = true; } $new_ary = array(); @@ -226,11 +233,12 @@ } $sorted_lsub_ary = $new_ary; if (isset($sorted_lsub_ary)) { - usort($sorted_lsub_ary, "user_strcasecmp"); + usort($sorted_lsub_ary, 'user_strcasecmp'); //sort($sorted_lsub_ary); } /** LIST array **/ + $sorted_list_ary = array(); for ($i=0; $i < count($sorted_lsub_ary); $i++) { if (substr($sorted_lsub_ary[$i], -1) == $dm) $mbx = substr($sorted_lsub_ary[$i], 0, strlen($sorted_lsub_ary[$i])-1); @@ -239,26 +247,39 @@ fputs ($imap_stream, "a001 LIST \"\" \"$mbx\"\r\n"); $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message); + // Another workaround for EIMS + if (isset($read[1]) && + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + $read[0], $regs)) { + $read[0] = $regs[1] . '"' . addslashes(trim($read[1])) . + '"' . $regs[2]; + } if (isset($sorted_list_ary[$i])) $sorted_list_ary[$i] = ""; if (isset($read[0])) - $sorted_list_ary[$i] = $read[0]; + $sorted_list_ary[$i] = $read[0]; else - $sorted_list_ary[$i] = ""; - if (isset($sorted_list_ary[$i]) && find_mailbox_name($sorted_list_ary[$i]) == "INBOX") + $sorted_list_ary[$i] = ""; + if (isset($sorted_list_ary[$i]) && + strtoupper(find_mailbox_name($sorted_list_ary[$i])) == "INBOX") $inbox_in_list = true; } - /** Just in case they're not subscribed to their inbox, we'll get it for them anyway **/ + /** 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); - - $pos = count($sorted_list_ary); - $sorted_list_ary[$pos] = $inbox_ary[0]; - - $pos = count($sorted_lsub_ary); - $sorted_lsub_ary[$pos] = find_mailbox_name($inbox_ary[0]); + // Another workaround for EIMS + if (isset($inbox_ary[1]) && + ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$", + $inbox_ary[0], $regs)) { + $inbox_ary[0] = $regs[1] . '"' . addslashes(trim($inbox_ary[1])) . + '"' . $regs[2]; + } + + $sorted_list_ary[] = $inbox_ary[0]; + $sorted_lsub_ary[] = find_mailbox_name($inbox_ary[0]); } $boxes = sqimap_mailbox_parse ($sorted_list_ary, $sorted_lsub_ary, $dm); @@ -335,6 +356,15 @@ $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") { // Store the raw IMAP reply @@ -372,6 +402,14 @@ /** 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]; + } $flags = substr($read_mlbx[0], strpos($read_mlbx[0], "(")+1); $flags = substr($flags, 0, strpos($flags, ")")); -- 2.25.1