Source for file imap_search.php
Documentation is available at imap_search.php
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: imap_search.php 14840 2020-01-07 07:42:38Z pdontthink $
* @deprecated This search interface has been largely replaced by asearch
* Load up a bunch of SM functions */
require_once(SM_PATH .
'functions/imap.php');
require_once(SM_PATH .
'functions/date.php');
require_once(SM_PATH .
'functions/mailbox_display.php');
require_once(SM_PATH .
'functions/mime.php');
* @param string $search_where The location to search (see RFC3501 section 6.4.4)
* If this string contains underscores, they are
* interpreted as an OR condition, thus "TO_CC" will
* result in a search of the TO *or* CC headers
function sqimap_search($imapConnection, $search_where, $search_what, $mailbox,
$color, $search_position =
'', $search_all, $count_all) {
global $message_highlight_list, $squirrelmail_language, $languages,
/* construct the search query, taking multiple search terms into account */
$search_what =
trim($search_what);
$search_what =
preg_replace('/[ ]{2,}/', ' ', $search_what);
$multi_search =
explode(' ', $search_what);
if (strtoupper($languages[$squirrelmail_language]['CHARSET']) ==
'ISO-2022-JP') {
foreach($multi_search as $idx=>
$search_part) {
while ($pos =
strpos($search_where, '_')) {
$search_where =
'OR ' .
substr($search_where, 0, $pos) .
' %s ' .
substr($search_where, $pos +
1);
$search_literal =
array('commands'=>
array(), 'literal_args'=>
array());
$use_search_literal =
FALSE;
foreach ($multi_search as $string) {
//FIXME: why JIS? shouldn't input be in EUC-JP? this is copied from DEVEL
if (isset
($languages[$squirrelmail_language]['CHARSET']) &&
strtoupper($languages[$squirrelmail_language]['CHARSET']) ==
'ISO-2022-JP')
if (preg_match('/["\\\\\r\n\x80-\xff]/', $string))
$use_search_literal =
TRUE;
foreach ($search_parts as $chunk) {
$search_literal['commands'][] =
$chunk;
$search_literal['literal_args'][] =
$string;
.
str_replace(array('\\', '"'), array('\\\\', '\\"'), $string)
$search_string =
trim($search_string);
$original_search_literal =
$search_literal;
/* now use $search_string in the imap search */
if ($allow_charset_search && isset
($languages[$squirrelmail_language]['CHARSET']) &&
$languages[$squirrelmail_language]['CHARSET']) {
if ($use_search_literal) {
$search_literal['commands'][0] =
'SEARCH CHARSET '
.
strtoupper($languages[$squirrelmail_language]['CHARSET'])
.
' ALL ' .
$search_literal['commands'][0];
.
strtoupper($languages[$squirrelmail_language]['CHARSET'])
.
($and_search ?
' ALL' :
'') .
" $search_string";
if ($use_search_literal) {
$search_literal['commands'][0] =
'SEARCH ALL ' .
$search_literal['commands'][0];
$ss =
"SEARCH ALL $search_string";
/* read data back from IMAP */
if ($use_search_literal) {
$readin =
sqimap_run_command($imapConnection, $ss, false, $result, $message, $uid_support);
/* try US-ASCII charset if search fails */
if (isset
($languages[$squirrelmail_language]['CHARSET'])
if ($use_search_literal) {
$original_search_literal['commands'][0] =
'SEARCH CHARSET "US-ASCII" ALL '
.
$original_search_literal['commands'][0];
$ss =
"SEARCH CHARSET \"US-ASCII\" ALL $search_string";
if ($use_search_literal) {
$readin =
sqimap_run_command($imapConnection, $ss, false, $result, $message, $uid_support);
/* Keep going till we find the SEARCH response */
foreach ($readin as $readin_part) {
/* Check to see if a SEARCH response was received */
if (substr($readin_part, 0, 9) ==
'* SEARCH ') {
} else if (isset
($errors)) {
$errors =
$errors.
$readin_part;
/* If nothing is found * SEARCH should be the first error else echo errors */
if (strstr($errors,'* SEARCH')) {
$cnt =
count($messagelist);
for ($q =
0; $q <
$cnt; $q++
) {
$id[$q] =
trim($messagelist[$q]);
$issent =
($mailbox ==
$sent_folder);
Documentation generated on Mon, 13 Jan 2020 04:24:48 +0100 by phpDocumentor 1.4.3