X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fmailbox.php;h=45dbbb7a97bf802488a1e87876a8b3b5a004b119;hb=df978e807f87dce0478a71a5c264743f65bee34a;hp=1bcc6340663bc740ce9fa44723cba8745457cc10;hpb=aa4c3749e589871cd930b3cd2e94ccaeb5a71bc5;p=squirrelmail.git
diff --git a/functions/mailbox.php b/functions/mailbox.php
index 1bcc6340..45dbbb7a 100644
--- a/functions/mailbox.php
+++ b/functions/mailbox.php
@@ -20,42 +20,73 @@
}
}
- function getMessageHeaders($imapConnection, $i, &$from, &$subject, &$date) {
- fputs($imapConnection, "messageFetch FETCH $i:$i RFC822.HEADER.LINES (From Subject Date)\n");
- $read = fgets($imapConnection, 1024);
- /* I have to replace <> with [] because HTML uses <> as tags, thus not printing what's in <> */
- $read = ereg_replace("<", "[", $read);
- $read = ereg_replace(">", "]", $read);
+ /** This function sends a request to the IMAP server for headers, 50 at a time
+ ** until $end is reached. I originally had it do them all at one time, but found
+ ** it slightly faster to do it this way.
+ **
+ ** Originally we had getMessageHeaders get the headers for one message at a time.
+ ** Doing it in bunches gave us a speed increase from 9 seconds (for a box of 800
+ ** messages) to about 3.5 seconds.
+ **/
+ function getMessageHeaders($imapConnection, $start, $end, &$from, &$subject, &$date) {
+ $rel_start = $start;
+ if (($start > $end) || ($start < 1)) {
+ echo "Error in message header fetching. Start message: $start, End message: $end
";
+ exit;
+ }
- while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) {
- if (substr($read, 0, 5) == "From:") {
- $read = ereg_replace("<", "EMAILSTART--", $read);
- $read = ereg_replace(">", "--EMAILEND", $read);
- $from = substr($read, 5, strlen($read) - 6);
- }
- else if (substr($read, 0, 5) == "Date:") {
- $read = ereg_replace("<", "[", $read);
- $read = ereg_replace(">", "]", $read);
- $date = substr($read, 5, strlen($read) - 6);
- }
- else if (substr($read, 0, 8) == "Subject:") {
- $read = ereg_replace("<", "[", $read);
- $read = ereg_replace(">", "]", $read);
- $subject = substr($read, 8, strlen($read) - 9);
+ while ($rel_start <= $end) {
+ if ($end - $rel_start > 50) {
+ $rel_end = $rel_start + 50;
+ } else {
+ $rel_end = $end;
}
-
+ fputs($imapConnection, "messageFetch FETCH $rel_start:$rel_end RFC822.HEADER.LINES (From Subject Date)\n");
$read = fgets($imapConnection, 1024);
+
+ $from_num = $rel_start - 1;
+ $date_num = $rel_start - 1;
+ $subj_num = $rel_start - 1;
+ while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) {
+ if (substr($read, 0, 5) == "From:") {
+ $read = ereg_replace("<", "EMAILSTART--", $read);
+ $read = ereg_replace(">", "--EMAILEND", $read);
+ $from[$from_num] = substr($read, 5, strlen($read) - 6);
+ $from_num++;
+ }
+ else if (substr($read, 0, 5) == "Date:") {
+ $read = ereg_replace("<", "<", $read);
+ $read = ereg_replace(">", ">", $read);
+ $date[$date_num] = substr($read, 5, strlen($read) - 6);
+ $date_num++;
+ }
+ else if (substr($read, 0, 8) == "Subject:") {
+ $read = ereg_replace("<", "<", $read);
+ $read = ereg_replace(">", ">", $read);
+ $subject[$subj_num] = substr($read, 8, strlen($read) - 9);
+ $subj_num++;
+ }
+ $read = fgets($imapConnection, 1024);
+ }
+ $rel_start = $rel_start + 50;
}
}
- function setMessageFlag($imapConnection, $i, $flag) {
- fputs($imapConnection, "messageStore STORE $i:$i +FLAGS (\\$flag)\n");
+ function setMessageFlag($imapConnection, $i, $q, $flag) {
+ fputs($imapConnection, "messageStore STORE $i:$q +FLAGS (\\$flag)\n");
}
- function getMessageFlags($imapConnection, $i, &$flags) {
+ /** This function gets the flags for message $j. It does only one message at a
+ ** time, rather than doing groups of messages (like getMessageHeaders does).
+ ** I found it one or two seconds quicker (on a box of 800 messages) to do it
+ ** individually. I'm not sure why it happens like that, but that's what my
+ ** testing found. Perhaps later I will be proven wrong and this will change.
+ **/
+ function getMessageFlags($imapConnection, $j, &$flags) {
/** * 2 FETCH (FLAGS (\Answered \Seen)) */
- fputs($imapConnection, "messageFetch FETCH $i:$i FLAGS\n");
+ fputs($imapConnection, "messageFetch FETCH $j:$j FLAGS\n");
$read = fgets($imapConnection, 1024);
+ $count = 0;
while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) {
if (strpos($read, "FLAGS")) {
$read = ereg_replace("\(", "", $read);
@@ -71,6 +102,7 @@
} else {
$flags[0] = "None";
}
+ $count++;
$read = fgets($imapConnection, 1024);
}
}
@@ -146,4 +178,19 @@
echo "UNKNOWN ERROR copying messages $from_id to $to_id to folder $folder.
";
return false;
}
+
+ /** expunges a mailbox **/
+ function expungeBox($imapConnection, $mailbox) {
+ selectMailbox($imapConnection, $mailbox, $num);
+ fputs($imapConnection, "1 EXPUNGE\n");
+ }
+
+ function getFolderNameMinusINBOX($mailbox) {
+ if (substr($mailbox, 0, 6) == "INBOX.")
+ $box = substr($mailbox, 6, strlen($mailbox));
+ else
+ $box = $mailbox;
+
+ return $box;
+ }
?>