|
|
@ -79,6 +79,8 @@
|
|
|
|
- include BODYSTRUCTURE in iil_C_FetchHeaders()
|
|
|
|
- include BODYSTRUCTURE in iil_C_FetchHeaders()
|
|
|
|
- added iil_C_FetchMIMEHeaders() function
|
|
|
|
- added iil_C_FetchMIMEHeaders() function
|
|
|
|
- added \* flag support
|
|
|
|
- added \* flag support
|
|
|
|
|
|
|
|
- use PREG instead of EREG
|
|
|
|
|
|
|
|
- removed caching functions
|
|
|
|
|
|
|
|
|
|
|
|
********************************************************/
|
|
|
|
********************************************************/
|
|
|
|
|
|
|
|
|
|
|
@ -134,9 +136,6 @@ class iilConnection
|
|
|
|
var $selected;
|
|
|
|
var $selected;
|
|
|
|
var $message;
|
|
|
|
var $message;
|
|
|
|
var $host;
|
|
|
|
var $host;
|
|
|
|
var $cache;
|
|
|
|
|
|
|
|
var $uid_cache;
|
|
|
|
|
|
|
|
var $do_cache;
|
|
|
|
|
|
|
|
var $exists;
|
|
|
|
var $exists;
|
|
|
|
var $recent;
|
|
|
|
var $recent;
|
|
|
|
var $rootdir;
|
|
|
|
var $rootdir;
|
|
|
@ -258,7 +257,7 @@ function iil_ReadLine($fp, $size) {
|
|
|
|
|
|
|
|
|
|
|
|
function iil_MultLine($fp, $line) {
|
|
|
|
function iil_MultLine($fp, $line) {
|
|
|
|
$line = chop($line);
|
|
|
|
$line = chop($line);
|
|
|
|
if (ereg('\{[0-9]+\}$', $line)) {
|
|
|
|
if (preg_match('/\{[0-9]+\}$/', $line)) {
|
|
|
|
$out = '';
|
|
|
|
$out = '';
|
|
|
|
|
|
|
|
|
|
|
|
preg_match_all('/(.*)\{([0-9]+)\}$/', $line, $a);
|
|
|
|
preg_match_all('/(.*)\{([0-9]+)\}$/', $line, $a);
|
|
|
@ -320,7 +319,7 @@ function iil_StartsWith($string, $match, $error=false) {
|
|
|
|
if (strncmp($string, $match, $len) == 0) {
|
|
|
|
if (strncmp($string, $match, $len) == 0) {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($error && preg_match('/^\* (BYE|BAD) /', $string)) {
|
|
|
|
if ($error && preg_match('/^\* (BYE|BAD) /i', $string)) {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
@ -546,7 +545,6 @@ function iil_C_NameSpace(&$conn) {
|
|
|
|
function iil_Connect($host, $user, $password, $options=null) {
|
|
|
|
function iil_Connect($host, $user, $password, $options=null) {
|
|
|
|
global $iil_error, $iil_errornum;
|
|
|
|
global $iil_error, $iil_errornum;
|
|
|
|
global $ICL_SSL, $ICL_PORT;
|
|
|
|
global $ICL_SSL, $ICL_PORT;
|
|
|
|
global $IMAP_NO_CACHE;
|
|
|
|
|
|
|
|
global $my_prefs, $IMAP_USE_INTERNAL_DATE;
|
|
|
|
global $my_prefs, $IMAP_USE_INTERNAL_DATE;
|
|
|
|
|
|
|
|
|
|
|
|
$iil_error = '';
|
|
|
|
$iil_error = '';
|
|
|
@ -579,9 +577,6 @@ function iil_Connect($host, $user, $password, $options=null) {
|
|
|
|
$conn->selected = '';
|
|
|
|
$conn->selected = '';
|
|
|
|
$conn->user = $user;
|
|
|
|
$conn->user = $user;
|
|
|
|
$conn->host = $host;
|
|
|
|
$conn->host = $host;
|
|
|
|
$conn->cache = array();
|
|
|
|
|
|
|
|
$conn->do_cache = (function_exists("cache_write")&&!$IMAP_NO_CACHE);
|
|
|
|
|
|
|
|
$conn->cache_dirty = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($my_prefs['sort_field'] == 'INTERNALDATE') {
|
|
|
|
if ($my_prefs['sort_field'] == 'INTERNALDATE') {
|
|
|
|
$IMAP_USE_INTERNAL_DATE = true;
|
|
|
|
$IMAP_USE_INTERNAL_DATE = true;
|
|
|
@ -713,7 +708,6 @@ function iil_Connect($host, $user, $password, $options=null) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function iil_Close(&$conn) {
|
|
|
|
function iil_Close(&$conn) {
|
|
|
|
iil_C_WriteCache($conn);
|
|
|
|
|
|
|
|
if (iil_PutLine($conn->fp, "I LOGOUT")) {
|
|
|
|
if (iil_PutLine($conn->fp, "I LOGOUT")) {
|
|
|
|
fgets($conn->fp, 1024);
|
|
|
|
fgets($conn->fp, 1024);
|
|
|
|
fclose($conn->fp);
|
|
|
|
fclose($conn->fp);
|
|
|
@ -721,86 +715,6 @@ function iil_Close(&$conn) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function iil_ClearCache($user, $host) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function iil_C_WriteCache(&$conn) {
|
|
|
|
|
|
|
|
//echo "<!-- doing iil_C_WriteCache //-->\n";
|
|
|
|
|
|
|
|
if (!$conn->do_cache) return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (is_array($conn->cache)) {
|
|
|
|
|
|
|
|
while (list($folder,$data)=each($conn->cache)) {
|
|
|
|
|
|
|
|
if ($folder && is_array($data) && $conn->cache_dirty[$folder]) {
|
|
|
|
|
|
|
|
$key = $folder.".imap";
|
|
|
|
|
|
|
|
$result = cache_write($conn->user, $conn->host, $key, $data, true);
|
|
|
|
|
|
|
|
//echo "<!-- writing $key $data: $result //-->\n";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function iil_C_EnableCache(&$conn) {
|
|
|
|
|
|
|
|
$conn->do_cache = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function iil_C_DisableCache(&$conn) {
|
|
|
|
|
|
|
|
$conn->do_cache = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function iil_C_LoadCache(&$conn, $folder) {
|
|
|
|
|
|
|
|
if (!$conn->do_cache) {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$key = $folder.'.imap';
|
|
|
|
|
|
|
|
if (!is_array($conn->cache[$folder])) {
|
|
|
|
|
|
|
|
$conn->cache[$folder] = cache_read($conn->user, $conn->host, $key);
|
|
|
|
|
|
|
|
$conn->cache_dirty[$folder] = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function iil_C_ExpireCachedItems(&$conn, $folder, $message_set) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!$conn->do_cache) {
|
|
|
|
|
|
|
|
return; //caching disabled
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!is_array($conn->cache[$folder])) {
|
|
|
|
|
|
|
|
return; //cache not initialized|empty
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (count($conn->cache[$folder]) == 0) {
|
|
|
|
|
|
|
|
return; //cache not initialized|empty
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, 'UID');
|
|
|
|
|
|
|
|
$num_removed = 0;
|
|
|
|
|
|
|
|
if (is_array($uids)) {
|
|
|
|
|
|
|
|
//echo "<!-- unsetting: ".implode(",",$uids)." //-->\n";
|
|
|
|
|
|
|
|
while (list($n,$uid)=each($uids)) {
|
|
|
|
|
|
|
|
unset($conn->cache[$folder][$uid]);
|
|
|
|
|
|
|
|
//$conn->cache[$folder][$uid] = false;
|
|
|
|
|
|
|
|
//$num_removed++;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$conn->cache_dirty[$folder] = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//echo '<!--'."\n";
|
|
|
|
|
|
|
|
//print_r($conn->cache);
|
|
|
|
|
|
|
|
//echo "\n".'//-->'."\n";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
echo "<!-- failed to get uids: $message_set //-->\n";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
if ($num_removed>0) {
|
|
|
|
|
|
|
|
$new_cache;
|
|
|
|
|
|
|
|
reset($conn->cache[$folder]);
|
|
|
|
|
|
|
|
while (list($uid,$item)=each($conn->cache[$folder])) {
|
|
|
|
|
|
|
|
if ($item) $new_cache[$uid] = $conn->cache[$folder][$uid];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$conn->cache[$folder] = $new_cache;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function iil_ExplodeQuotedString($delimiter, $string) {
|
|
|
|
function iil_ExplodeQuotedString($delimiter, $string) {
|
|
|
|
$quotes = explode('"', $string);
|
|
|
|
$quotes = explode('"', $string);
|
|
|
|
while ( list($key, $val) = each($quotes)) {
|
|
|
|
while ( list($key, $val) = each($quotes)) {
|
|
|
@ -853,8 +767,6 @@ function iil_C_Select(&$conn, $mailbox) {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
iil_C_LoadCache($conn, $mailbox);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (iil_PutLine($conn->fp, "sel1 SELECT \"".iil_Escape($mailbox).'"')) {
|
|
|
|
if (iil_PutLine($conn->fp, "sel1 SELECT \"".iil_Escape($mailbox).'"')) {
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
$line = chop(iil_ReadLine($conn->fp, 300));
|
|
|
|
$line = chop(iil_ReadLine($conn->fp, 300));
|
|
|
@ -1285,50 +1197,7 @@ function iil_C_FetchUIDs(&$conn,$mailbox) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$message_set = '1' . ($num>1?':' . $num:'');
|
|
|
|
$message_set = '1' . ($num>1?':' . $num:'');
|
|
|
|
|
|
|
|
|
|
|
|
//if cache not enabled, just call iil_C_FetchHeaderIndex on 'UID' field
|
|
|
|
return iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, 'UID');
|
|
|
|
if (!$conn->do_cache)
|
|
|
|
|
|
|
|
return iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, 'UID');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//otherwise, let's check cache first
|
|
|
|
|
|
|
|
$key = $mailbox.'.uids';
|
|
|
|
|
|
|
|
$cache_good = true;
|
|
|
|
|
|
|
|
if ($conn->uid_cache) {
|
|
|
|
|
|
|
|
$data = $conn->uid_cache;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$data = cache_read($conn->user, $conn->host, $key);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//was anything cached at all?
|
|
|
|
|
|
|
|
if ($data === false) {
|
|
|
|
|
|
|
|
$cache_good = -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//make sure number of messages were the same
|
|
|
|
|
|
|
|
if ($cache_good > 0 && $data['n'] != $num) {
|
|
|
|
|
|
|
|
$cache_good = -2;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if everything's okay so far...
|
|
|
|
|
|
|
|
if ($cache_good > 0) {
|
|
|
|
|
|
|
|
//check UIDs of highest mid with current and cached
|
|
|
|
|
|
|
|
$temp = iil_C_Search($conn, $mailbox, 'UID ' . $data['d'][$num]);
|
|
|
|
|
|
|
|
if (!$temp || !is_array($temp) || $temp[0] != $num) {
|
|
|
|
|
|
|
|
$cache_good = -3;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if cached data's good, return it
|
|
|
|
|
|
|
|
if ($cache_good > 0) {
|
|
|
|
|
|
|
|
return $data['d'];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//otherwise, we need to fetch it
|
|
|
|
|
|
|
|
$data = array('n' => $num, 'd' => array());
|
|
|
|
|
|
|
|
$data['d'] = iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, 'UID');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cache_write($conn->user, $conn->host, $key, $data);
|
|
|
|
|
|
|
|
$conn->uid_cache = $data;
|
|
|
|
|
|
|
|
return $data['d'];
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function iil_SortThreadHeaders($headers, $index_a, $uids) {
|
|
|
|
function iil_SortThreadHeaders($headers, $index_a, $uids) {
|
|
|
@ -1355,30 +1224,7 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set) {
|
|
|
|
$uids = iil_C_FetchUIDs($conn, $mailbox);
|
|
|
|
$uids = iil_C_FetchUIDs($conn, $mailbox);
|
|
|
|
$debug = false;
|
|
|
|
$debug = false;
|
|
|
|
|
|
|
|
|
|
|
|
/* Get cached records where possible */
|
|
|
|
|
|
|
|
if ($conn->do_cache) {
|
|
|
|
|
|
|
|
$cached = cache_read($conn->user, $conn->host, $mailbox.'.thhd');
|
|
|
|
|
|
|
|
if ($cached && is_array($uids) && count($uids)>0) {
|
|
|
|
|
|
|
|
$needed_set = '';
|
|
|
|
|
|
|
|
foreach ($uids as $id=>$uid) {
|
|
|
|
|
|
|
|
if ($cached[$uid]) {
|
|
|
|
|
|
|
|
$result[$uid] = $cached[$uid];
|
|
|
|
|
|
|
|
$result[$uid]->id = $id;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$needed_set .= ($needed_set ? ',' : '') . $id;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($needed_set) {
|
|
|
|
|
|
|
|
$message_set = $needed_set;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$message_set = '';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$message_set = iil_CompressMessageSet($message_set);
|
|
|
|
$message_set = iil_CompressMessageSet($message_set);
|
|
|
|
if ($debug) {
|
|
|
|
|
|
|
|
echo "Still need: ".$message_set;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* if we're missing any, get them */
|
|
|
|
/* if we're missing any, get them */
|
|
|
|
if ($message_set) {
|
|
|
|
if ($message_set) {
|
|
|
@ -1396,7 +1242,7 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set) {
|
|
|
|
if ($debug) {
|
|
|
|
if ($debug) {
|
|
|
|
echo $line . "\n";
|
|
|
|
echo $line . "\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (ereg('\{[0-9]+\}$', $line)) {
|
|
|
|
if (preg_match('/\{[0-9]+\}$/', $line)) {
|
|
|
|
$a = explode(' ', $line);
|
|
|
|
$a = explode(' ', $line);
|
|
|
|
$new = array();
|
|
|
|
$new = array();
|
|
|
|
|
|
|
|
|
|
|
@ -1414,7 +1260,7 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set) {
|
|
|
|
|
|
|
|
|
|
|
|
$new[strtoupper($field_name)] = trim($field_val);
|
|
|
|
$new[strtoupper($field_name)] = trim($field_val);
|
|
|
|
|
|
|
|
|
|
|
|
} else if (ereg('^[[:space:]]', $line)) {
|
|
|
|
} else if (preg_match('/^\s+/', $line)) {
|
|
|
|
$new[strtoupper($field_name)] .= trim($line);
|
|
|
|
$new[strtoupper($field_name)] .= trim($line);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while ($line[0] != ')');
|
|
|
|
} while ($line[0] != ')');
|
|
|
@ -1433,13 +1279,6 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set) {
|
|
|
|
$result = iil_SortThreadHeaders($result, $index_a, $uids);
|
|
|
|
$result = iil_SortThreadHeaders($result, $index_a, $uids);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* write new set to cache */
|
|
|
|
|
|
|
|
if ($conn->do_cache) {
|
|
|
|
|
|
|
|
if (count($result)!=count($cached)) {
|
|
|
|
|
|
|
|
cache_write($conn->user, $conn->host, $mailbox . '.thhd', $result);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//echo 'iil_FetchThreadHeaders:'."\n";
|
|
|
|
//echo 'iil_FetchThreadHeaders:'."\n";
|
|
|
|
//print_r($result);
|
|
|
|
//print_r($result);
|
|
|
|
|
|
|
|
|
|
|
@ -1464,7 +1303,7 @@ function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock) {
|
|
|
|
$fp = $conn->fp;
|
|
|
|
$fp = $conn->fp;
|
|
|
|
$debug = false;
|
|
|
|
$debug = false;
|
|
|
|
|
|
|
|
|
|
|
|
$sbj_filter_pat = '[a-zA-Z]{2,3}(\[[0-9]*\])?:([[:space:]]*)';
|
|
|
|
$sbj_filter_pat = '/[a-z]{2,3}(\[[0-9]*\])?:(\s*)/i';
|
|
|
|
|
|
|
|
|
|
|
|
/* Do "SELECT" command */
|
|
|
|
/* Do "SELECT" command */
|
|
|
|
if (!iil_C_Select($conn, $mailbox)) {
|
|
|
|
if (!iil_C_Select($conn, $mailbox)) {
|
|
|
@ -1501,18 +1340,18 @@ function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* if subject contains 'RE:' or has in-reply-to header, it's a reply */
|
|
|
|
/* if subject contains 'RE:' or has in-reply-to header, it's a reply */
|
|
|
|
$sbj_pre ='';
|
|
|
|
$sbj_pre = '';
|
|
|
|
$has_re = false;
|
|
|
|
$has_re = false;
|
|
|
|
if (eregi($sbj_filter_pat, $new['SUBJECT'])) {
|
|
|
|
if (preg_match($sbj_filter_pat, $new['SUBJECT'])) {
|
|
|
|
$has_re = true;
|
|
|
|
$has_re = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($has_re||$new['IN-REPLY-TO']) {
|
|
|
|
if ($has_re || $new['IN-REPLY-TO']) {
|
|
|
|
$sbj_pre = 'RE:';
|
|
|
|
$sbj_pre = 'RE:';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* strip out 're:', 'fw:' etc */
|
|
|
|
/* strip out 're:', 'fw:' etc */
|
|
|
|
if ($has_re) {
|
|
|
|
if ($has_re) {
|
|
|
|
$sbj = ereg_replace($sbj_filter_pat, '', $new['SUBJECT']);
|
|
|
|
$sbj = preg_replace($sbj_filter_pat, '', $new['SUBJECT']);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
$sbj = $new['SUBJECT'];
|
|
|
|
$sbj = $new['SUBJECT'];
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1681,30 +1520,8 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false, $bo
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Get cached records where possible */
|
|
|
|
|
|
|
|
if ($conn->do_cache) {
|
|
|
|
|
|
|
|
$uids = iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, "UID");
|
|
|
|
|
|
|
|
if (is_array($uids) && count($conn->cache[$mailbox]>0)) {
|
|
|
|
|
|
|
|
$needed_set = '';
|
|
|
|
|
|
|
|
while (list($id,$uid)=each($uids)) {
|
|
|
|
|
|
|
|
if ($conn->cache[$mailbox][$uid]) {
|
|
|
|
|
|
|
|
$result[$id] = $conn->cache[$mailbox][$uid];
|
|
|
|
|
|
|
|
$result[$id]->id = $id;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$needed_set.=($needed_set ? ',': '') . $id;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//echo "<!-- iil_C_FetchHeader\nMessage Set: $message_set\nNeeded Set:$needed_set\n//-->\n";
|
|
|
|
|
|
|
|
if ($needed_set) {
|
|
|
|
|
|
|
|
$message_set = iil_CompressMessageSet($needed_set);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($add)
|
|
|
|
if ($add)
|
|
|
|
$add = ' '.strtoupper(trim($add));
|
|
|
|
$add = ' '.strtoupper(trim($add));
|
|
|
|
|
|
|
|
|
|
|
|
/* FETCH uid, size, flags and headers */
|
|
|
|
/* FETCH uid, size, flags and headers */
|
|
|
|
$key = 'FH12';
|
|
|
|
$key = 'FH12';
|
|
|
@ -1746,7 +1563,7 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false, $bo
|
|
|
|
$str = $matches[1];
|
|
|
|
$str = $matches[1];
|
|
|
|
|
|
|
|
|
|
|
|
// swap parents with quotes, then explode
|
|
|
|
// swap parents with quotes, then explode
|
|
|
|
$str = eregi_replace("[()]", "\"", $str);
|
|
|
|
$str = preg_replace('/[()]/', '"', $str);
|
|
|
|
$a = iil_ExplodeQuotedString(' ', $str);
|
|
|
|
$a = iil_ExplodeQuotedString(' ', $str);
|
|
|
|
|
|
|
|
|
|
|
|
// did we get the right number of replies?
|
|
|
|
// did we get the right number of replies?
|
|
|
@ -1863,7 +1680,7 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false, $bo
|
|
|
|
list($field, $string) = iil_SplitHeaderLine($str);
|
|
|
|
list($field, $string) = iil_SplitHeaderLine($str);
|
|
|
|
|
|
|
|
|
|
|
|
$field = strtolower($field);
|
|
|
|
$field = strtolower($field);
|
|
|
|
$string = ereg_replace("\n[[:space:]]*"," ",$string);
|
|
|
|
$string = preg_replace('/\n\s*/', ' ', $string);
|
|
|
|
|
|
|
|
|
|
|
|
switch ($field) {
|
|
|
|
switch ($field) {
|
|
|
|
case 'date';
|
|
|
|
case 'date';
|
|
|
@ -1904,7 +1721,7 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false, $bo
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 'in-reply-to':
|
|
|
|
case 'in-reply-to':
|
|
|
|
$result[$id]->in_reply_to = ereg_replace("[\n<>]", '', $string);
|
|
|
|
$result[$id]->in_reply_to = preg_replace('/[\n<>]/', '', $string);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 'references':
|
|
|
|
case 'references':
|
|
|
|
$result[$id]->references = $string;
|
|
|
|
$result[$id]->references = $string;
|
|
|
@ -1927,19 +1744,13 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false, $bo
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
} // end switch ()
|
|
|
|
} // end switch ()
|
|
|
|
} // end while ()
|
|
|
|
} // end while ()
|
|
|
|
|
|
|
|
|
|
|
|
if ($conn->do_cache) {
|
|
|
|
|
|
|
|
$uid = $result[$id]->uid;
|
|
|
|
|
|
|
|
$conn->cache[$mailbox][$uid] = $result[$id];
|
|
|
|
|
|
|
|
$conn->cache_dirty[$mailbox] = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
$a = explode(' ', $line);
|
|
|
|
$a = explode(' ', $line);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// process flags
|
|
|
|
// process flags
|
|
|
|
if (!empty($flags_str)) {
|
|
|
|
if (!empty($flags_str)) {
|
|
|
|
$flags_str = eregi_replace('[\\\"]', '', $flags_str);
|
|
|
|
$flags_str = preg_replace('/[\\\"]/', '', $flags_str);
|
|
|
|
$flags_a = explode(' ', $flags_str);
|
|
|
|
$flags_a = explode(' ', $flags_str);
|
|
|
|
|
|
|
|
|
|
|
|
if (is_array($flags_a)) {
|
|
|
|
if (is_array($flags_a)) {
|
|
|
@ -2089,7 +1900,6 @@ function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod) {
|
|
|
|
} while (!iil_StartsWith($line, 'flg', true));
|
|
|
|
} while (!iil_StartsWith($line, 'flg', true));
|
|
|
|
|
|
|
|
|
|
|
|
if (iil_ParseResult($line) == 0) {
|
|
|
|
if (iil_ParseResult($line) == 0) {
|
|
|
|
iil_C_ExpireCachedItems($conn, $mailbox, $messages);
|
|
|
|
|
|
|
|
return $c;
|
|
|
|
return $c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$conn->error = $line;
|
|
|
|
$conn->error = $line;
|
|
|
@ -2174,7 +1984,7 @@ function iil_C_ID2UID(&$conn, $folder, $id) {
|
|
|
|
if (iil_PutLine($fp, "$key FETCH $id (UID)")) {
|
|
|
|
if (iil_PutLine($fp, "$key FETCH $id (UID)")) {
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
$line=chop(iil_ReadLine($fp, 1024));
|
|
|
|
$line=chop(iil_ReadLine($fp, 1024));
|
|
|
|
if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)) {
|
|
|
|
if (preg_match("/^\* $id FETCH \(UID (.*)\)/i", $line, $r)) {
|
|
|
|
$result = $r[1];
|
|
|
|
$result = $r[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while (!preg_match("/^$key/", $line));
|
|
|
|
} while (!preg_match("/^$key/", $line));
|
|
|
@ -2194,7 +2004,7 @@ function iil_C_Search(&$conn, $folder, $criteria) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
$line=trim(iil_ReadLine($fp, 10000));
|
|
|
|
$line=trim(iil_ReadLine($fp, 10000));
|
|
|
|
if (eregi("^\* SEARCH", $line)) {
|
|
|
|
if (preg_match('/^\* SEARCH/i', $line)) {
|
|
|
|
$str = trim(substr($line, 8));
|
|
|
|
$str = trim(substr($line, 8));
|
|
|
|
$messages = explode(' ', $str);
|
|
|
|
$messages = explode(' ', $str);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2337,7 +2147,7 @@ function iil_C_ListMailboxes(&$conn, $ref, $mailbox) {
|
|
|
|
$folder = trim($a[count($a)-1], '"');
|
|
|
|
$folder = trim($a[count($a)-1], '"');
|
|
|
|
|
|
|
|
|
|
|
|
if (empty($ignore) || (!empty($ignore)
|
|
|
|
if (empty($ignore) || (!empty($ignore)
|
|
|
|
&& !eregi($ignore, $folder))) {
|
|
|
|
&& !preg_match('/'.preg_quote(ignore, '/').'/i', $folder))) {
|
|
|
|
$folders[$i] = $folder;
|
|
|
|
$folders[$i] = $folder;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -2405,7 +2215,7 @@ function iil_C_ListSubscribed(&$conn, $ref, $mailbox) {
|
|
|
|
$folder = trim($a[count($a)-1], '"');
|
|
|
|
$folder = trim($a[count($a)-1], '"');
|
|
|
|
|
|
|
|
|
|
|
|
if ((!in_array($folder, $folders)) && (empty($ignore)
|
|
|
|
if ((!in_array($folder, $folders)) && (empty($ignore)
|
|
|
|
|| (!empty($ignore) && !eregi($ignore, $folder)))) {
|
|
|
|
|| (!empty($ignore) && !preg_match('/'.preg_quote(ignore, '/').'/i', $folder)))) {
|
|
|
|
$folders[$i] = $folder;
|
|
|
|
$folders[$i] = $folder;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -2818,7 +2628,7 @@ function iil_C_GetQuota(&$conn) {
|
|
|
|
// return false if not found, parse if found
|
|
|
|
// return false if not found, parse if found
|
|
|
|
$min_free = PHP_INT_MAX;
|
|
|
|
$min_free = PHP_INT_MAX;
|
|
|
|
foreach ($quota_lines as $key => $quota_line) {
|
|
|
|
foreach ($quota_lines as $key => $quota_line) {
|
|
|
|
$quota_line = eregi_replace('[()]', '', $quota_line);
|
|
|
|
$quota_line = preg_replace('/[()]/', '', $quota_line);
|
|
|
|
$parts = explode(' ', $quota_line);
|
|
|
|
$parts = explode(' ', $quota_line);
|
|
|
|
$storage_part = array_search('STORAGE', $parts);
|
|
|
|
$storage_part = array_search('STORAGE', $parts);
|
|
|
|
|
|
|
|
|
|
|
|