X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_messages.php;h=859702b59e41cf7c30f337a658bac9de5167b3c9;hb=c0d04f9753371080831e9e79f41d7b4756df83ab;hp=2f3ffe665a092ddb56eab977cdfc910cec5aab2d;hpb=0147197faf7cc0e7128342939eca97f05604646d;p=squirrelmail.git
diff --git a/functions/imap_messages.php b/functions/imap_messages.php
index 2f3ffe66..859702b5 100755
--- a/functions/imap_messages.php
+++ b/functions/imap_messages.php
@@ -24,19 +24,19 @@ function sqimap_messages_delete ($imap_stream, $start, $end, $mailbox) {
if (($move_to_trash == true) && (sqimap_mailbox_exists($imap_stream, $trash_folder) && ($mailbox != $trash_folder))) {
sqimap_messages_copy ($imap_stream, $start, $end, $trash_folder);
}
- sqimap_messages_flag ($imap_stream, $start, $end, "Deleted");
+ sqimap_messages_flag ($imap_stream, $start, $end, "Deleted", true);
}
/* Sets the specified messages with specified flag */
-function sqimap_messages_flag ($imap_stream, $start, $end, $flag) {
+function sqimap_messages_flag ($imap_stream, $start, $end, $flag, $handle_errors) {
global $uid_support;
- $read = sqimap_run_command ($imap_stream, "STORE $start:$end +FLAGS (\\$flag)", true, $response, $message, $uid_support);
+ $read = sqimap_run_command ($imap_stream, "STORE $start:$end +FLAGS (\\$flag)", $handle_errors, $response, $message, $uid_support);
}
/* Remove specified flag from specified messages */
-function sqimap_messages_remove_flag ($imap_stream, $start, $end, $flag) {
+function sqimap_messages_remove_flag ($imap_stream, $start, $end, $flag, $handle_errors) {
global $uid_support;
- $read = sqimap_run_command ($imap_stream, "STORE $start:$end -FLAGS (\\$flag)", true, $response, $message, $uid_support);
+ $read = sqimap_run_command ($imap_stream, "STORE $start:$end -FLAGS (\\$flag)", $handle_errors, $response, $message, $uid_support);
}
/* Returns some general header information -- FROM, DATE, and SUBJECT */
@@ -90,7 +90,7 @@ function get_reference_header ($imap_stream, $message) {
$responses = sqimap_read_data_list($imap_stream, $sid, true, $responses, $message);
if (!eregi("^\\* ([0-9]+) FETCH", $responses[0][0], $regs)) {
$responses = array ();
- }
+ }
return $responses;
}
@@ -105,8 +105,8 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
$internal_date_sort, $server_sort_array,
$sent_folder, $mailbox, $uid_support;
- if (session_is_registered('server_sort_array')) {
- session_unregister('server_sort_array');
+ if (sqsession_is_registered('server_sort_array')) {
+ sqsession_unregister('server_sort_array');
}
$sid = sqimap_session_id($uid_support);
@@ -118,10 +118,14 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
if ($sort == 6) {
if ($uid_support) {
- $uidnext = $mbxresponse['UIDNEXT']-1;
+ if (isset($mbxresponse['UIDNEXT']) && $mbxresponse['UIDNEXT']) {
+ $uidnext = $mbxresponse['UIDNEXT']-1;
+ } else {
+ $uidnext = '*';
+ }
$uid_query = "$sid SEARCH UID 1:$uidnext\r\n";
fputs($imap_stream, $uid_query);
- $uids = sqimap_read_data($imap_stream, $sid, true ,&$response, $message);
+ $uids = sqimap_read_data($imap_stream, $sid, true ,$response, $message);
if (isset($uids[0])) {
if (preg_match("/^\* SEARCH (.+)$/", $uids[0], $regs)) {
$server_sort_array = preg_split("/ /", trim($regs[1]));
@@ -134,7 +138,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
$qty = $mbxresponse['EXISTS'];
$server_sort_array = range(1, $qty);
}
- session_register('server_sort_array');
+ sqsession_register($server_sort_array, 'server_sort_array');
return $server_sort_array;
}
@@ -155,7 +159,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
if (!empty($sort_on[$sort])) {
$sort_query = "$sid SORT ($sort_on[$sort]) ".strtoupper($default_charset)." ALL\r\n";
fputs($imap_stream, $sort_query);
- $sort_test = sqimap_read_data($imap_stream, $sid, true ,&$response, $message);
+ $sort_test = sqimap_read_data($imap_stream, $sid, true ,$response, $message);
}
if (isset($sort_test[0])) {
if (preg_match("/^\* SORT (.+)$/", $sort_test[0], $regs)) {
@@ -168,7 +172,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
if (!preg_match("/OK/", $response)) {
$server_sort_array = 'no';
}
- session_register('server_sort_array');
+ sqsession_register($server_sort_array, 'server_sort_array');
return $server_sort_array;
}
@@ -176,18 +180,22 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
function sqimap_get_php_sort_order ($imap_stream, $mbxresponse) {
global $uid_support;
- if (session_is_registered('php_sort_array')) {
- session_unregister('php_sort_array');
+ if (sqsession_is_registered('php_sort_array')) {
+ sqsession_unregister('php_sort_array');
}
$sid = sqimap_session_id($uid_support);
$php_sort_array = array();
if ($uid_support) {
- $uidnext = $mbxresponse['UIDNEXT']-1;
+ if (isset($mbxresponse['UIDNEXT']) && $mbxresponse['UIDNEXT']) {
+ $uidnext = $mbxresponse['UIDNEXT']-1;
+ } else {
+ $uidnext = '*';
+ }
$uid_query = "$sid SEARCH UID 1:$uidnext\r\n";
fputs($imap_stream, $uid_query);
- $uids = sqimap_read_data($imap_stream, $sid, true ,&$response, $message);
+ $uids = sqimap_read_data($imap_stream, $sid, true ,$response, $message);
if (isset($uids[0])) {
if (preg_match("/^\* SEARCH (.+)$/", $uids[0], $regs)) {
$php_sort_array = preg_split("/ /", trim($regs[1]));
@@ -200,7 +208,7 @@ function sqimap_get_php_sort_order ($imap_stream, $mbxresponse) {
$qty = $mbxresponse['EXISTS'];
$php_sort_array = range(1, $qty);
}
- session_register('php_sort_array');
+ sqsession_register($php_sort_array, 'php_sort_array');
return $php_sort_array;
}
@@ -311,11 +319,11 @@ function get_parent_level ($imap_stream) {
function get_thread_sort ($imap_stream) {
global $thread_new, $sort_by_ref, $default_charset, $server_sort_array, $uid_support;
- if (session_is_registered('thread_new')) {
- session_unregister('thread_new');
+ if (sqsession_is_registered('thread_new')) {
+ sqsession_unregister('thread_new');
}
- if (session_is_registered('server_sort_array')) {
- session_unregister('server_sort_array');
+ if (sqsession_is_registered('server_sort_array')) {
+ sqsession_unregister('server_sort_array');
}
$sid = sqimap_session_id($uid_support);
$thread_temp = array ();
@@ -369,14 +377,14 @@ function get_thread_sort ($imap_stream) {
}
}
}
- session_register('thread_new');
+ sqsession_register($thread_new, 'thread_new');
$thread_new = array_reverse($thread_new);
$thread_list = implode(" ", $thread_new);
$thread_list = str_replace("(", " ", $thread_list);
$thread_list = str_replace(")", " ", $thread_list);
$thread_list = preg_split("/\s/", $thread_list, -1, PREG_SPLIT_NO_EMPTY);
$server_sort_array = $thread_list;
- session_register('server_sort_array');
+ sqsession_register($server_sort_array, 'server_sort_array');
return $thread_list;
}
@@ -386,7 +394,7 @@ function elapsedTime($start) {
return $timepassed;
}
-function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) {
+function sqimap_get_small_header_list ($imap_stream, $msg_list) {
global $squirrelmail_language, $color, $data_dir, $username, $imap_server_type;
global $uid_support;
@@ -488,10 +496,10 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) {
foreach ($read as $read_part) {
//unfold multi-line headers
- while ($prevline && strspn($read_part, "\t ") > 0) {
- $read_part = substr($prevline, 0, -2) . ' ' . ltrim($read_part);
- }
- $prev_line = $read_part;
+ if ($prevline && strpos($read_part, "\t ") === true) {
+ $read_part = substr($prevline, 0, -2) . preg_replace('/(\t\s+)/',' ',$read_part);
+ }
+ $prevline = $read_part;
if ($read_part{0} == '*') {
if ($internaldate) {
if (preg_match ("/^.+INTERNALDATE\s+\"(.+)\".+/iUA",$read_part, $reg)) {
@@ -593,12 +601,8 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) {
}
}
+
$header = new small_header;
- if ($issent) {
- $header->from = (trim($to) != '' ? $to : '(' ._("No To Address") . ')');
- } else {
- $header->from = $from;
- }
if ($uid_support) {
$header->uid = $unique_id;
@@ -608,6 +612,7 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) {
$header->date = $date;
$header->subject = $subject;
$header->to = $to;
+ $header->from = $from;
$header->priority = $priority;
$header->message_id = $messageid;
$header->cc = $cc;
@@ -624,6 +629,60 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) {
return $result;
}
+function sqimap_get_headerfield($imap_stream, $field) {
+ $sid = sqimap_session_id(false);
+
+ $results = array();
+ $read_list = array();
+
+ $query = "$sid FETCH 1:* (UID BODY.PEEK[HEADER.FIELDS ($field)])\r\n";
+ fputs ($imap_stream, $query);
+ $readin_list = sqimap_read_data_list($imap_stream, $sid, false, $response, $message);
+ $i = 0;
+
+ foreach ($readin_list as $r) {
+ $r = implode('',$r);
+ /* first we unfold the header */
+ $r = str_replace(array("\r\n\t","\r\n\s"),array('',''),$r);
+ /*
+ * now we can make a new header array with each element representing
+ * a headerline
+ */
+ $r = explode("\r\n" , $r);
+ if (!$uid_support) {
+ if (!preg_match("/^\\*\s+([0-9]+)\s+FETCH/iAU",$r[0], $regs)) {
+ set_up_language($squirrelmail_language);
+ echo '
' .
+ _("ERROR : Could not complete request.") .
+ '
' .
+ _("Unknown response from IMAP server: ") . ' 1.' .
+ $r[0] . "
\n";
+ } else {
+ $id = $regs[1];
+ }
+ } else {
+ if (!preg_match("/^\\*\s+([0-9]+)\s+FETCH.*UID\s+([0-9]+)\s+/iAU",$r[0], $regs)) {
+ set_up_language($squirrelmail_language);
+ echo '
' .
+ _("ERROR : Could not complete request.") .
+ '
' .
+ _("Unknown response from IMAP server: ") . ' 1.' .
+ $r[0] . "
\n";
+ } else {
+ $id = $regs[2];
+ }
+ }
+ $field = $r[1];
+ $field = substr($field,strlen($field)+2);
+ $result[] = array($id,$field);
+ }
+ return $result;
+}
+
+
+
+
+
/*
* Returns a message array with all the information about a message.
* See the documentation folder for more information about this array.
@@ -646,9 +705,9 @@ function sqimap_get_message ($imap_stream, $id, $mailbox) {
$bodystructure = implode('',$read);
$msg = mime_structure($bodystructure,$flags);
$read = sqimap_run_command ($imap_stream, "FETCH $id BODY[HEADER]", true, $response, $message, $uid_support);
- $msg->addRFC822Header($read);
- $msg->id = $id;
- $msg->mailbox = $mailbox;
+ $rfc822_header = new Rfc822Header();
+ $rfc822_header->parseHeader($read);
+ $msg->rfc822_header = $rfc822_header;
return $msg;
}