Наконец-то дошли руки до локального почтовика. Решил прикрутить к клиенту плагин markasjunk2, который позволяет помечать письма как спам и тут же обучать SpamAssassin.
Я использую Roundcube 0.7.2 и markasjunk2 0.8-beta
Качаем плагин и помещаем в папку plugins
Папка с плагином обязательно должна называться markasjunk2, так что если что - переименовываем.
Далее изменяем config/main.inc.php
Дописываем название папки плагина в список активных плагинов
$rcmail_config['plugins'] = array('markasjunk2');
Изменяем plugins/markasjunk2/config.inc.php
Если файла "config.inc.php" нет, создаем его из plugins/markasjunk2/config.inc.php.dist и меняем параметры:
...
$rcmail_config['markasjunk2_learning_driver'] = 'cmd_learn' ;
...
$rcmail_config['markasjunk2_spam_cmd'] = 'sa-learn --spam --no-sync --username=%u %f';
...
$rcmail_config['markasjunk2_ham_cmd'] ='sa-learn --ham --no-sync --username=%u %f';
%u - имя пользователя
%f - путь к письму
По идее это все. Однако у меня как обычно возникли проблемы: при попытке пометить письмо как спам, я получал сообщение "Внутренняя ошибка сервера"
В /logs/errors я обнаружил следующее:
PHP Fatal error: Call to undefined method stdClass::get_raw_body() in /var/www/plugins/markasjunk2/drivers/cmd_learn.php on line 55
Идем в cmd_learn.php в строчку 55 и видим:
file_put_contents($tmpfname, $rcmail->storage->get_raw_body($uid));
Класс rcmail у нас хранится в файле program/include/rcmail.php. Идем туда и видим, что никакого storage там нет и в помине. А есть в помине всякая другая ерунда, среди которой нужно найти объект, который содержит функцию get_raw_body.
Из документации (ура-ура!) я узнал, что get_raw_body - это функция класса rcube_imap. А поле этого класса в rcmail называется вовсе не storage, а (шок!) imap.
Соответственно - меняем срочку 55 в cmd_learn.php:
file_put_contents($tmpfname, $rcmail->imap->get_raw_body($uid));
Правда, после этого все равно ничего не запустилось и я получил:
PHP Fatal error: Call to undefined method stdClass::set_flag() in /var/www/plugins/markasjunk2/markasjunk2.php on line 103
Идем туда и видим злополучный $rcmail->storage. Меняем и там 2 строчки:
...
$storage = $rcmail->imap;
...
if ($flag = array_search($rcmail->config->get('markasjunk2_spam_flag'), $rcmail->imap->conn->flags))
Все, допилили, все работает, помечается и обучается.
Комментариев нет:
Отправить комментарий