/**
* Message and Spam Filter Plugin - Filtering Functions
*
- * @copyright © 1999-2005 The SquirrelMail Project Team
+ * @copyright © 1999-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package plugins
if (! defined('SM_PATH')) define('SM_PATH','../../');
/** load globals */
-global $UseSeparateImapConnection,
- $AllowSpamFilters, $SpamFilters_YourHop, $SpamFilters_ShowCommercial,
- $SpamFilters_DNScache, $SpamFilters_BulkQuery, $SpamFilters_SharedCache,
+global $UseSeparateImapConnection,
+ $AllowSpamFilters, $SpamFilters_YourHop, $SpamFilters_ShowCommercial,
+ $SpamFilters_DNScache, $SpamFilters_BulkQuery, $SpamFilters_SharedCache,
$SpamFilters_CacheTTL;
/** load default config */
$squirrelmail_plugin_hooks['special_mailbox']['filters'] = 'filters_special_mailbox';
$squirrelmail_plugin_hooks['rename_or_delete_folder']['filters'] = 'update_for_folder_hook';
$squirrelmail_plugin_hooks['webmail_bottom']['filters'] = 'start_filters_hook';
+ $squirrelmail_plugin_hooks['folder_status']['filters'] = 'filters_folder_status';
}
/**
}
}
+/* Receive the status of the folder and do something with it */
+function filters_folder_status($statusarr) {
+
+ global $filter_inbox_count;
+ if (empty($filter_inbox_count)) $filter_inbox_count=0;
+
+ //echo "GOT HOOK<br><pre>";
+ //var_dump($statusarr);
+ //echo "</pre><br>\n";
+
+ if ($statusarr['MAILBOX'] == 'INBOX')
+ {
+ if (!empty($statusarr['MESSAGES'])) $filter_inbox_count=$statusarr['MESSAGES'];
+ }
+}
+
/**
* Saves the DNS Cache to disk
* @access private
*/
function start_filters() {
global $imapServerAddress, $imapPort, $imap_stream, $imapConnection,
- $UseSeparateImapConnection, $AllowSpamFilters;
+ $UseSeparateImapConnection, $AllowSpamFilters, $filter_inbox_count;
sqgetGlobalVar('username', $username, SQ_SESSION);
sqgetGlobalVar('key', $key, SQ_COOKIE);
$previously_connected = true;
$stream = $imap_stream;
}
- $aStatus = sqimap_status_messages ($stream, 'INBOX', array('MESSAGES'));
- if ($aStatus['MESSAGES']) {
+ if (!isset($filter_inbox_count)) {
+ $aStatus = sqimap_status_messages ($stream, 'INBOX', array('MESSAGES'));
+ if (!empty($aStatus['MESSAGES'])) {
+ $filter_inbox_count=$aStatus['MESSAGES'];
+ } else {
+ $filter_inbox_count=0;
+ }
+ }
+
+ if ($filter_inbox_count > 0) {
sqimap_mailbox_select($stream, 'INBOX');
// Filter spam from inbox before we sort them into folders
if ($AllowSpamFilters) {
$should_expunge) {
global $languages, $squirrelmail_language, $allow_charset_search, $imap_server_type;
+ //TODO: make use of new mailbox cache. See mailbox_display.phpinfo
+
if (strtolower($where_to) == 'inbox') {
return array();
}
}
if ($where == 'Header') {
$what = explode(':', $what);
+ $where = strtoupper($where);
$where = trim($where . ' ' . $what[0]);
$what = addslashes(trim($what[1]));
}
// see comments in squirrelmail sqimap_search function
if ($imap_server_type == 'macosx' || $imap_server_type == 'hmailserver') {
- $search_str .= ' ' . $where . ' ' . $what;
+ $search_str .= ' ' . $where . ' ' . $what;
+ /* read data back from IMAP */
+ $read = sqimap_run_command($imap_stream, $search_str, true, $response, $message, TRUE);
} else {
- $search_str .= ' ' . $where . ' {' . strlen($what) . "}\r\n"
- . $what;
+ $search_str .= ' ' . $where . ' {' . strlen($what) . "}";
+ $sid = sqimap_session_id(true);
+ fputs ($imap_stream, $sid . ' ' . $search_str . "\r\n");
+ $read2 = sqimap_fgets($imap_stream);
+ # server should respond with Ready for argument, then we will send search text
+ #echo "RR2 $read2<br>";
+ fputs ($imap_stream, "$what\r\n");
+ #echo "SS $what<br>";
+ $read2 = sqimap_fgets($imap_stream);
+ #echo "RR2 $read2<br>";
+ $read[]=$read2;
+ $read3 = sqimap_fgets($imap_stream);
+ #echo "RR3 $read3<br>";
+ list($rtag,$response,$message)=explode(' ',$read3,3);
+## $read2 = sqimap_retrieve_imap_response($imap_stream, $sid, true,
+## $response, $message, $search_str, false, true, false);
+ #echo "RR2 $read2 / RESPONSE $response<br>";
}
- /* read data back from IMAP */
- $read = sqimap_run_command($imap_stream, $search_str, true, $response, $message, TRUE);
if (isset($read[0])) {
$ids = array();
for ($i = 0, $iCnt = count($read); $i < $iCnt; ++$i) {
if (preg_match("/^\* SEARCH (.+)$/", $read[$i], $regs)) {
- $ids = preg_split("/ /", trim($regs[1]));
- break;
+ $ids += preg_split("/ /", trim($regs[1]));
}
}
if ($response == 'OK' && count($ids)) {
$should_expunge = true;
sqimap_msgs_list_move ($imap_stream, $ids, $where_to, false);
}
+ } elseif ($response != 'OK') {
+ if ($response == 'NO') {
+ $query = $search_str . "\r\n".$what ."\r\n";
+ if (strpos($message,'BADCHARSET') !== false ||
+ strpos($message,'character') !== false) {
+ sqm_trigger_imap_error('SQM_IMAP_BADCHARSET',$query, $response, $message);
+ } else {
+ sqm_trigger_imap_error('SQM_IMAP_ERROR',$query, $response, $message);
+ }
+ } else {
+ sqm_trigger_imap_error('SQM_IMAP_ERROR',$query, $response, $message);
+ }
}
}
return $should_expunge;