Я использую dspam для фильтрации спама, запустив демон "dspamd" в Ubuntu 9.10 и затем установив правило Postfix, которое говорит:
smtpd_recipient_restrictions =
...
check_client_access pcre:/etc/postfix/dspam_everything
...
где карта PCRE выглядит так:
/./ FILTER lmtp:[127.0.0.1]:11124
Это хорошо работает и означает, что все пользователи в моей системе получают всю свою электронную почту, независимо от того, считает ли dspam ее невиновной, и имеют возможность фильтровать свои решения или игнорировать их.
Проблема возникает, когда я хочу обучить dspam, используя свои почтовые архивы. Прочитав о команде "dspam", я попробовал это на файлах в моем почтовом ящике и в ящиках для спама (дата, когда я использовал другое решение для фильтрации):
for file in Mail/Inbox/*; do cat $file | dspam --class=innocent --source=corpus; done
for file in Mail/spam/*; do cat $file | dspam --class=spam --source=corpus; done
Симптом, который я заметил после всего этого, заключался в том, что dspam ужасно плохо классифицирует спам - он не может его найти! Когда я отследил это, проблема заключалась в том, что я обучал пользователя «brandon» с помощью приведенных выше команд, но входящее письмо вместо этого сравнивалось с именем пользователя «brandon @ mydomain», поэтому оно работало с полностью пустой обучающей базой данных. !
Итак, что я могу сделать, чтобы приведенные выше команды действительно обучили мой полный адрес электронной почты, а не мое простое имя пользователя? Я бы не хотел запускать "dspam" от имени пользователя root с параметром "--user". Я ожидал, что файлы конфигурации «dspam» будут иметь атрибут «append_domain» или что-то, с помощью которого можно украсить локальные имена пользователей соответствующим доменом электронной почты, но я не могу найти ничего подобного.
Когда я использовал серверную часть Berkeley DB для «dspam», я решил эту проблему, создав символическую ссылку от одной базы данных к другой. :-) Но это решение в конечном итоге умерло, потому что серверная часть BDB не является потокобезопасной, поэтому теперь я перешел на серверную часть PostgreSQL и мне нужен способ решить проблему там. И нет, таблица, в которой хранятся имена пользователей, имеет ограничение UNIQUE, которое не позволяет мне указывать оба имени пользователя как сопоставленные с одним и тем же идентификатором. :-)
Простое решение - создать общую группу прививки.
я: brandon, brandon @ mydomain.com
/ var / spool / dspam / group - при установке Debian
Я считаю, что по умолчанию в debian включены группы инокуляции / общие группы, и в этом случае вам нужно только создать файл группы в каталоге пользователя, и он будет использоваться автоматически.