function bayesspam_display() { if ($GLOBALS['bayesdbhandle'] == null) { return; } $GLOBALS['bayes_in_display'] = TRUE; $version_array = split('\\.', $GLOBALS['version']); if ($GLOBALS['bayesspam_show_prob']) { bindtextdomain('bayesspam', SM_PATH . 'plugins/bayesspam/locale'); textdomain('bayesspam'); $is_spam = bayesspam_get_probability($GLOBALS['imapConnection'], $GLOBALS['passed_id'], 0, 0); if ($GLOBALS['bayesspam_do_timing'] && isset($GLOBALS['token_display_string'])) { $res = $GLOBALS['bayesdbhandle']->query('SELECT UserName FROM ' . $GLOBALS['bayesdbprefix'] . 'stats WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\''); if ($GLOBALS['bayes_show_db_error'] && DB::isError($res)) { echo $res->getDebugInfo(); } if (!DB::isError($res) && !($row = $res->fetchRow())) { $GLOBALS['bayesdbhandle']->query('INSERT INTO ' . $GLOBALS['bayesdbprefix'] . 'stats SET StatsStart=NOW(),UserName=\'' . $GLOBALS['bayes_username'] . '\''); } $GLOBALS['bayesdbhandle']->query('UPDATE ' . $GLOBALS['bayesdbprefix'] . 'stats SET TimedMessages=TimedMessages+' . $GLOBALS['bayes_parsed_messages'] . ',TotalParseTime=TotalParseTime+' . $GLOBALS['bayes_parse_time'] . ' WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\''); } $do_popup_link = 1; if (!isset($GLOBALS['token_display_string'])) { $GLOBALS['token_display_string'] = _("Recalculate score to view interesting tokens."); $do_popup_link = 0; } $s = ''; if ($do_popup_link) { $s = <<<EOL <script type="text/javascript"> <!-- function do_bayesspam_popup() { bayesspamWindow = window.open("","bayesspamWindow","scrollbars=yes,resizable=yes,width=450,height=725"); bayesspamWindow.document.write("<HTML><HEAD><TITLE>BayesSpam Token Info</TITLE> EOL; if (!isset($GLOBALS['custom_css']) || $GLOBALS['custom_css'] == 'none') { if ($GLOBALS['theme_css'] != '') { $s .= '<link rel=\\"stylesheet\\" type=\\"text/css\\" href=\\"' . $GLOBALS['theme_css'] . '\\" />'; } } else { $s .= '<link rel=\\"stylesheet\\" type=\\"text/css\\" href=\\"' . $GLOBALS['base_uri'] . 'themes/css/' . $GLOBALS['custom_css'] . '\\" />'; } $s .= '</HEAD><BODY bgcolor=#ffffff>");'; $s .= <<<EOL bayesspamWindow.document.write("<table border=0 cellspacing=1 cellpadding=1 width=100%>"); bayesspamWindow.document.write("{$GLOBALS['token_html_display_string']}"); bayesspamWindow.document.write("</table>"); bayesspamWindow.document.write("</BODY></HTML>"); bayesspamWindow.document.close(); } //--> </script> EOL; } $s .= '<TR BGCOLOR="' . $GLOBALS['color'][0] . '">'; if ($version_array[0] == 1 && $version_array[1] <= 2) { $s .= '<TD align=right valign=top width=20%>' . _("BayesSpam Probability") . ':</TD>' . "\n"; $s .= '<TD align=left valign=top width=80% colspan=2>'; if ($do_popup_link) { $s .= '<a href="javascript:do_bayesspam_popup()">'; } $s .= '<b title="' . $GLOBALS['token_display_string'] . '">' . number_format((double) $is_spam * 100.0, 2) . '%'; if ($GLOBALS['bayes_was_cached']) { if ($GLOBALS['bayes_scoring_tokens']) { $s .= ' ±' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 50, 2) . '%'; } $s .= ' ('; $s .= _("Cached"); $s .= ')'; } else { if ($GLOBALS['bayes_scoring_tokens']) { $s .= ' ±' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 100, 2) . '%'; } $s .= ' ('; $s .= _("Calculated"); $s .= ')'; } $s .= '</b></a></td>' . "\n"; } else { $s .= '<TD align=right valign=top width=20%><b>BayesSpam Probability: </b></TD>' . "\n"; $s .= '<TD align=left valign=top width=80% colspan=2>'; if ($do_popup_link) { $s .= '<a href="javascript:do_bayesspam_popup()">'; } $s .= '<span title="' . $GLOBALS['token_display_string'] . '">' . number_format((double) $is_spam * 100.0, 2) . '%'; if ($GLOBALS['bayes_was_cached']) { if ($GLOBALS['bayes_scoring_tokens']) { $s .= ' ±' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 50, 2) . '%'; } $s .= ' ('; $s .= _("Cached"); $s .= ')'; } else { if ($GLOBALS['bayes_scoring_tokens']) { $s .= ' ±' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 50, 2) . '%'; } $s .= ' ('; $s .= _("Calculated"); $s .= ')'; } $s .= '</span></a></td>' . "\n"; } $s .= '</TR>'; echo $s; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } if (!$GLOBALS['bayesspam_links_enabled']) { return; } bindtextdomain('bayesspam', SM_PATH . 'plugins/bayesspam/locale'); textdomain('bayesspam'); $s = ''; $s .= '<TR BGCOLOR="' . $GLOBALS['color'][0] . '">'; if ($version_array[0] == 1 && $version_array[1] <= 2) { $s .= '<TD align=right valign=top width=20%>' . _("BayesSpam Links") . ':</TD>' . "\n"; $s .= '<TD align=left valign=top width=80% colspan=2><b>'; } else { $s .= '<TD align=right valign=top width=20%><b>' . _("BayesSpam Links") . ': </b></TD>' . "\n"; $s .= '<TD align=left valign=top width=80% colspan=2>'; } if (!$GLOBALS['bayesspam_show_prob']) { $tokens = bayesspam_get_tokens($GLOBALS['imapConnection'], $GLOBALS['passed_id']); } $check = bayesspam_check_messageid(); if ($check == 'spam') { $s .= _("Known As Spam") . '</b> -- <small><a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=nonspam&passed_id=' . urlencode($GLOBALS['passed_id']); $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']); $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']); $s .= '&show_more=' . urlencode($GLOBALS['show_more']); $s .= '">' . _("Move to NonSpam") . '</a> | '; } elseif ($check == 'nonspam') { $s .= _("Known As NonSpam") . '</b> -- <small><a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=spam&passed_id=' . urlencode($GLOBALS['passed_id']); $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']); $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']); $s .= '&show_more=' . urlencode($GLOBALS['show_more']); $s .= '">' . _("Move to Spam") . '</a> | '; } else { $s .= _("Not In DB") . '</b> -- <small><a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=spam&passed_id=' . urlencode($GLOBALS['passed_id']); $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']); $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']); $s .= '&show_more=' . urlencode($GLOBALS['show_more']); $s .= '">' . _("Spam") . '</a> | '; $s .= '<a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=nonspam&passed_id=' . urlencode($GLOBALS['passed_id']); $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']); $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']); $s .= '&show_more=' . urlencode($GLOBALS['show_more']); $s .= '">' . _("NonSpam") . '</a> | '; } $s .= '<a href="../src/read_body.php?passed_id=' . urlencode($GLOBALS['passed_id']); $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']); $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']); $s .= '&show_more=' . urlencode($GLOBALS['show_more']); $s .= '&bayes_recache=1">' . _("Recalculate Score") . '</a>'; $s .= '</small></td>' . "\n"; $s .= '</TR>'; echo $s; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); }
function bayesspam_filters($imap_stream, $use_mailbox = 0) { $spam_stats = 0; $ham_stats = 0; $unsure_stats = 0; $total_messages = 0; $run_folders = array(); $boxes = sqimap_mailbox_list($imap_stream); foreach ($boxes as $box) { if ($GLOBALS['bayesspam_inboxonly'] != 1 || $GLOBALS['bayesspam_inboxonly'] == 1 && 'INBOX' == $box['unformatted-dm']) { if ($use_mailbox == 1 && $box['unformatted-dm'] == $GLOBALS['mailbox'] && !in_array($box['unformatted-dm'], $GLOBALS['bayesspam_ignore_folders']) || $use_mailbox == 0 && !in_array($box['unformatted-dm'], $GLOBALS['bayesspam_ignore_folders'])) { if ((array_search('noselect', $box['flags']) === FALSE || array_search('noselect', $box['flags']) === NULL) && $GLOBALS['sent_folder'] != $box['unformatted-dm'] && sqimap_unseen_messages($imap_stream, $box['unformatted-dm']) > 0) { $run_folders[] = $box['unformatted-dm']; } } } } foreach ($run_folders as $box) { $spam_messages = array(); $uncertain_messages = array(); $mbxresponse = sqimap_mailbox_select($imap_stream, $box); $messages = array(); $search = "SEARCH UNSEEN UNDELETED"; if (isset($_SESSION['bayesspam_last_filter'])) { $search .= " SINCE " . date('d-M-Y', $_SESSION['bayesspam_last_filter']); } $_SESSION['bayesspam_last_filter'] = time(); $read = sqimap_run_command($imap_stream, $search, TRUE, $response, $message, TRUE); if (isset($read[0])) { for ($i = 0, $iCnt = count($read); $i < $iCnt; ++$i) { if (preg_match("/^\\* SEARCH (.+)\$/", $read[$i], $regs)) { $messages = preg_split("/ /", trim($regs[1])); break; } } } foreach ($messages as $passed_id) { bayesspam_set_message_id($imap_stream, $passed_id); $bayesspam_check_messageid = bayesspam_check_messageid(); if ($GLOBALS['bayesspam_do_stats'] && $GLOBALS['bayesspam_do_user_stats']) { $bayesspam_old_message_score = bayesspam_get_old_message_score(); } $is_spam = bayesspam_get_probability($imap_stream, $passed_id, 1); if ($is_spam > 0.9) { $spam_messages[] = $passed_id; } elseif ($is_spam >= 0.1) { $uncertain_messages[] = $passed_id; } if ($GLOBALS['bayesspam_do_stats'] && $GLOBALS['bayesspam_do_user_stats'] && $bayesspam_old_message_score === FALSE) { if ($is_spam > 0.9) { $spam_stats++; $total_messages++; } if ($is_spam <= 0.9 && $is_spam >= 0.1) { $unsure_stats++; $total_messages++; } if ($is_spam < 0.1) { $ham_stats++; $total_messages++; } } } if ($spam_messages) { $message_str = sqimap_message_list_squisher($spam_messages); if ($GLOBALS['bayesspam_delete']) { sqimap_run_command($imap_stream, 'STORE ' . $message_str . ' +FLAGS (\\Deleted)', true, $response, $message, $GLOBALS['uid_support']); } elseif (sqimap_mailbox_exists($imap_stream, $GLOBALS['bayesspam_folder'])) { sqimap_run_command($imap_stream, 'COPY ' . $message_str . ' "' . $GLOBALS['bayesspam_folder'] . '"', true, $response, $message, $GLOBALS['uid_support']); sqimap_run_command($imap_stream, 'STORE ' . $message_str . ' +FLAGS (\\Deleted)', true, $response, $message, $GLOBALS['uid_support']); } sqimap_mailbox_expunge($imap_stream, $box); } if ($uncertain_messages && $GLOBALS['bayesspam_do_uncertain_filtering']) { $message_str = sqimap_message_list_squisher($uncertain_messages); if (sqimap_mailbox_exists($imap_stream, $GLOBALS['bayesspam_uncertain_folder'])) { sqimap_run_command($imap_stream, 'COPY ' . $message_str . ' "' . $GLOBALS['bayesspam_uncertain_folder'] . '"', true, $response, $message, $GLOBALS['uid_support']); sqimap_run_command($imap_stream, 'STORE ' . $message_str . ' +FLAGS (\\Deleted)', true, $response, $message, $GLOBALS['uid_support']); } sqimap_mailbox_expunge($imap_stream, $box); } } if ($GLOBALS['bayesspam_do_stats'] && $GLOBALS['bayesspam_do_user_stats'] && $total_messages) { $res = $GLOBALS['bayesdbhandle']->query('SELECT UserName FROM ' . $GLOBALS['bayesdbprefix'] . 'stats WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\''); if (!DB::isError($res) && !($row = $res->fetchRow())) { $GLOBALS['bayesdbhandle']->query('INSERT INTO ' . $GLOBALS['bayesdbprefix'] . 'stats SET StatsStart=NOW(),UserName=\'' . $GLOBALS['bayes_username'] . '\',TotalMessages=' . $total_messages . ',HamMessages=' . $ham_stats . ',SpamMessages=' . $spam_stats . ',UnsureMessages=' . $unsure_stats . ($GLOBALS['bayesspam_do_timing'] ? ',TimedMessages=' . $GLOBALS['bayes_parsed_messages'] . ',TotalParseTime=' . $GLOBALS['bayes_parse_time'] : '')); } else { $GLOBALS['bayesdbhandle']->query('UPDATE ' . $GLOBALS['bayesdbprefix'] . 'stats SET TotalMessages=TotalMessages+' . $total_messages . ',HamMessages=HamMessages+' . $ham_stats . ',SpamMessages=SpamMessages+' . $spam_stats . ', UnsureMessages=UnsureMessages+' . $unsure_stats . ($GLOBALS['bayesspam_do_timing'] ? ',TimedMessages=TimedMessages+' . $GLOBALS['bayes_parsed_messages'] . ',TotalParseTime=TotalParseTime+' . $GLOBALS['bayes_parse_time'] : '') . ' WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\''); } } }