X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_messages.php;h=859702b59e41cf7c30f337a658bac9de5167b3c9;hb=c0d04f9753371080831e9e79f41d7b4756df83ab;hp=1e2fc74727fda034a1e21ca23d104635401f8c35;hpb=cdca177a2fe66b844d186d7dcdf39ef86021fa1b;p=squirrelmail.git diff --git a/functions/imap_messages.php b/functions/imap_messages.php index 1e2fc747..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_srot_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. @@ -640,15 +699,15 @@ function sqimap_get_message ($imap_stream, $id, $mailbox) { } } } else { - echo "ERROR Yeah I know, not a very usefull errormessage (sqimap_get_message)"; + echo "ERROR Yeah I know, not a very usefull errormessage (id = $id, mailbox = $mailbox sqimap_get_message)"; exit; } $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; }