2014-01-26 3 views
1

Я использую sylfilter уже более года (он доступен от http://sylpheed.sraoss.jp/sylfilter/), и он отлично работает как инструмент фильтрации (без жалоб). Тем не менее, я пытаюсь использовать procmail с sylfilter, но у меня много проблем.Использование sylfilter с procmail

Веб-страница для фильтра показывает:

sylfilter ~/Mail/inbox/1234 

в качестве примера для классификации сообщения.

Возвращение значения следующим образом:

0 мусорной (спам)

1 чистый (не спам)

2 неопределенные

127 другие ошибки

У меня есть пытался включить sylfilter с procmail, но не с большим успехом. Большая проблема по сравнению с некоторыми другими спамовыми инструментами, такими как bogofilter, заключается в том, что sylfilter не вносит никаких изменений в само сообщение электронной почты (в отличие от богофильтра, для которого примеры изобилуют в Интернете и который помещает в поле X-Bogosity в заголовке сообщения). Я хочу, чтобы все , которое классифицировалось как Junk, чтобы перейти в $ HOME/Mail/Junk, и все, что не следует отнести к таким папкам, как правила procmail. Возможно, материал, который возвращает 2, может перейти в $ HOME/Mail/неопределенный.

Вот моя последняя попытка, основанная на предложениях, внесенных в список рассылки Fedora.

:0 Wc 
| /usr/bin/sylfilter /dev/stdin 
:0 a 
$HOME/Mail/Junk/. 

Однако это не обрабатывает сообщения электронной почты с помощью sylfilter (и журнального файла не говорит: «Нет входного файла.», Прежде чем переходить к обработке других правил). Итак, мне было интересно, знал ли кто-нибудь о подобном случае и знал ответ на этот вопрос.

ответ

0

Я не знаком с sylfilter, а описание проблемы (несколько смутное) заставляет меня думать, что что-то не так с подачей сообщения на стандартный ввод. Но если вы можете сделать эту работу, следующим является то, как вы просматриваете код выхода программы в Procmail.

:0 
* ? sylfilter /dev/stdin 
$HOME/Mail/Junk/. 

# You should now have the exit code in $? if you want it for further processing 
SYLSTATUS=$? 

:0 
* SYLSTATUS ?? ^^1^^ 
$HOME/Mail/INBOX/. 
# ... etc 

Условие успешно, если sylfilter возвращает код успеха (ноль) выхода; если это не удается, мы переходим к последующим рецептам. Мы сохраняем $? с именованной переменной, чтобы мы могли проверить ее значение, даже если последующий рецепт сбрасывает глобальную систему $? путем вызова другой внешней программы.

К сожалению, вам не нужно жестко закодировать путь до sylfilter. Если он находится в нестандартном месте, измените значение PATH в начале вашего .procmailrc, а не засоряйте свой код с явными путями к исполняемым файлам.Так что, если это в /usr/local/really/sf/sylfilter, ты бы поставил

PATH=/usr/local/really/sf:$PATH 

Если вам нужно сообщение во временном файле, попробовать что-то вроде этого;

TMP=`mktemp -t sylf.XXXXXXXX` 
TRAP='rm -f $TMP' 
:0c 
$TMP 

:0 
* ? sylfilter $TMP 
$HOME/Mail/Junk/. 

# etc as above 

Команда mktemp создает уникальный временный файл. Назначение TRAP устанавливает последовательность команд для запуска, когда Procmail завершается; это позаботится о том, чтобы очистить временный файл, когда мы закончили. Поскольку мы будем единственным автором этого файла, мы не заботимся о блокировке при написании копии сообщения этому файлу.

Для более мельчайших деталей синтаксиса, смотрите также http://porkmail.org/era/procmail/quickref.html

+0

Привет, Спасибо! Я также пришел к мнению, что sylfilter не может быть отключен для обработки сообщения, подаваемого на стандартный ввод. Таким образом, возникает вопрос: можно ли временно скопировать копию в файл, использовать sylfilter в этом файле, а затем перейти к последствиям (как вы предлагаете, скажем)? – user3236841

+0

См. Редактирование. Надеюсь это поможет. – tripleee

+0

Благодарим вас за это изменение! Я теперь подтвердил, что это работает. Я очень благодарен за это. Если у вас есть время, я хотел бы узнать подробности этого рецепта! Еще раз спасибо!! – user3236841