- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
- Класс: CMailFilter
- Вызов: CMailFilter::SpamAction
static function SpamAction($message, $bIsSPAM, $bDelete = false)
{
global $DB;
global $BX_MAIL_SPAM_CNT;
if(!is_set($BX_MAIL_SPAM_CNT, "G"))
{
$strSql = "SELECT MAX(GOOD_CNT) as G, MAX(BAD_CNT) as B FROM b_mail_spam_weight";
if($res = $DB->Query($strSql))
$BX_MAIL_SPAM_CNT = $res->Fetch();
if(intval($BX_MAIL_SPAM_CNT["G"])<=0)
$BX_MAIL_SPAM_CNT["G"] = 1;
if(intval($BX_MAIL_SPAM_CNT["B"])<=0)
$BX_MAIL_SPAM_CNT["B"] = 1;
}
if($bDelete && $bIsSPAM)
$BX_MAIL_SPAM_CNT["B"]--;
elseif($bDelete && !$bIsSPAM)
$BX_MAIL_SPAM_CNT["G"]--;
elseif(!$bDelete && $bIsSPAM)
$BX_MAIL_SPAM_CNT["B"]++;
elseif(!$bDelete && !$bIsSPAM)
$BX_MAIL_SPAM_CNT["G"]++;
@set_time_limit(30);
// split to words
$arWords = CMailFilter::getWords($message, 1000);
// for every word find Si
$strWords = "''";
foreach($arWords as $word)
{
$word_md5 = md5($word);
// change weight
$strSql =
"INSERT INTO b_mail_spam_weight(WORD_ID, WORD_REAL, GOOD_CNT, BAD_CNT, TOTAL_CNT) ".
"VALUES('".$word_md5."', '".$DB->ForSql($word, 40)."', ".($bIsSPAM?0:1).", ".($bIsSPAM?1:0).", 1)";
if($bDelete || (!$DB->Query($strSql, true)))
{
if($bDelete)
{
$strSql =
"UPDATE b_mail_spam_weight SET ".
" GOOD_CNT = GOOD_CNT - ".($bIsSPAM?0:1).", ".
" BAD_CNT = BAD_CNT - ".($bIsSPAM?1:0).", ".
" TOTAL_CNT = TOTAL_CNT - 1 ".
"WHERE WORD_ID = '".$word_md5."' ".
" AND ".($bIsSPAM?"BAD_CNT>0":"GOOD_CNT>0");// AND WORD_REAL = '".$DB->ForSql($word, 40)."'";
}
else
{
$strSql =
"UPDATE b_mail_spam_weight SET ".
" GOOD_CNT = GOOD_CNT + ".($bIsSPAM?0:1).", ".
" BAD_CNT = BAD_CNT + ".($bIsSPAM?1:0).", ".
" TOTAL_CNT = TOTAL_CNT + 1 ".
"WHERE WORD_ID='".$word_md5."'";// AND WORD_REAL = '".$DB->ForSql($word, 40)."'";
}
$DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
}
}
if(COption::GetOptionString("mail", "reset_all_spam_result", "N") == "Y")
$DB->Query("UPDATE b_mail_message SET SPAM_LAST_RESULT='N'");
}