Victor Ustugov wrote:
>> А вот симлинки в ~nospam, они к обучению относятся, про это расскажи.
>> ну, это моя личная заморочка, давай я напишу позже. мне сейчас уезжать
> надо, но сегодня я заеду к asm'у, от него и напишу
я на разных хостах я использую две схемы:
1. используется на всех хостах asm'а и на части моих хостов:
ОС: FreeBSD
MTA: exim
mail storage: maildir
2. используется на остальных моих хостах:
ОС: RedHat/Fedora
MTA: sendmail
mail storage: mailbox
итак, подробнее:
1-я схема, юзаем maildir'Ы:
весь механизм обучения живет в /home/nospam. но на самом деле - это неважно,
ты можешь его расположить, где угодно...
письма для обучения копируются по IMAP/IMAPS в maildir'ы.
пример (с bsd.falbi.kiev.ua):
путь к maildir'у для обучения спамом:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-spam
путь к maildir'у для обучения не спамом:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-nonspam
после обучения письма складываются в два maildir'а:
путь к maildir'у для сохранения спама после обучения:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.spam
путь к maildir'у для сохранения не спама после обучения:
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.nonspam
на эти maildir'ы создаются симлинки в /home/nospam и /home/nospam/backup:
/home/nospam/sa-learn-nospam-cur ->
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-nonspam/cur
/home/nospam/sa-learn-nospam-new ->
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-nonspam/new
/home/nospam/sa-learn-spam-cur ->
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-spam/cur
/home/nospam/sa-learn-spam-new ->
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.sa-learn-spam/new
/home/nospam/backup/nospam ->
/var/vmail/bsd.falbi.kiev.ua/corvax/.spam.nonspam/new
/home/nospam/backup/spam-cur -> /var/vmail/bsd.falbi.kiev.ua/corvax/.spam.spam/cur
/home/nospam/backup/spam-new -> /var/vmail/bsd.falbi.kiev.ua/corvax/.spam.spam/new
еще - необходимо создать пару временных каталогов:
/home/nospam/tmp/nospam
/home/nospam/tmp/spam
теперь собственно сам обучающий скрипт:
~~~~~~~~~~
#!/bin/sh
sa_conf_file=/usr/local/etc/mail/spamassassin/local.cf
default_log=/usr/home/nospam/sa-learn.log
if test "$SHELL" = "/bin/sh" ; then
log=${default_log}
else
showdots="--showdots"
fi
learn() {
msg_dir=$2
tmp_dir=$3
bak_dir=$4
if test ! -z "`ls ${msg_dir}`" ; then
rm -rf ${tmp_dir}/* 2>/dev/null
mv ${msg_dir}/* ${tmp_dir}/
if test -z "$log" ; then
echo /usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/
--prefs-file=${sa_conf_file}
/usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/
--prefs-file=${sa_conf_file}
else
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >>${log}
date >>${log}
echo /usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/
--prefs-file=${sa_conf_file} >>${log}
/usr/local/bin/sa-learn ${showdots} --$1 --dir ${tmp_dir}/
--prefs-file=${sa_conf_file} >>${log}
fi
mv ${tmp_dir}/* ${bak_dir}
fi
}
learn nonspam sa-learn-nospam-new tmp/nospam backup/nospam
learn nonspam sa-learn-nospam-cur tmp/nospam backup/nospam
learn spam sa-learn-spam-new tmp/spam backup/spam-new
learn spam sa-learn-spam-cur tmp/spam backup/spam-new
~~~~~~~~~~
строки слегка перенеслись, но ты поймешь...
если будешь использовать эту схему на линуксе, просто замени пути на sa-learn
и на local.cf
в остальном - можно использовать скрипт без изменений. нужно только
подрихтовать симлинки, чтобы они указывали на твои мейлдиры для обучения и
сохранения обученных писем
2-я схема, юзаем mailbox'ы:
весь механизм обучения живет в /usr/local/debug/mail/spamassassin/bayes. но на
самом деле - это неважно, ты можешь его расположить, где угодно...
письма для обучения копируются по IMAP/IMAPS в mailbox'ы.
пример (с corvax.falbi.kiev.ua):
путь к mailbox'у для обучения спамом:
/home/corvax/Mail/spam/sa-learn-spam
путь к mailbox'у для обучения не спамом:
/home/corvax/Mail/spam/sa-learn-nonspam
после обучения письма складываются в два mailbox'а:
путь к mailbox'у для сохранения спама после обучения:
/home/corvax/Mail/spam/spam
путь к mailbox'у для сохранения не спама после обучения:
/home/corvax/Mail/spam/nonspam
на каталог с этими mailbox'ами создается симлинк в
/usr/local/debug/mail/spamassassin/bayes:
/usr/local/debug/mail/spamassassin/bayes/spam -> /home/corvax/Mail/spam
в качестве временного каталога используется ~/tmp
теперь собственно сам обучающий скрипт:
~~~~~~~~~~
#!/bin/bash
spam_dir=/home/corvax/Mail/spam
tmp_dir=~/tmp
if [ "$BASH_ENV" == "" ]; then
log=/home/corvax/logs/sa-learn.log
else
showdots="--showdots"
fi
if [ "$log" != "" ]; then
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> ${log} 2>&1
date >> ${log} 2>&1
fi
learn() {
# 1-й параметр - признак спам/не спам
spam_flag=$1
# 2-й параметр - mailbox с обучаемыми письмами
mbox=$2
# 3-й параметр - временный mailbox
tmp_mbox=$3
# 4-й параметр - резервный mailbox
bak_mbox=$4
cat ${mbox} > ${tmp_mbox}
echo -n>${mbox}
if [ "$log" == "" ]; then
echo sa-learn --${spam_flag} --mbox ${tmp_mbox}
sa-learn ${showdots} --${spam_flag} --mbox ${tmp_mbox}
else
echo sa-learn --${spam_flag} --mbox ${tmp_mbox} >> ${log} 2>&1
sa-learn ${showdots} --${spam_flag} --mbox ${tmp_mbox} >> ${log} 2>&1
fi
cat ${tmp_mbox} >> ${bak_mbox}
}
learn nonspam ${spam_dir}/sa-learn-nonspam ${tmp_dir}/sa-learn-nonspam
${spam_dir}/nonspam
learn spam ${spam_dir}/sa-learn-spam ${tmp_dir}/sa-learn-spam
${spam_dir}/spam
~~~~~~~~~~
в конце две строки перенеслись, но ты поймешь...
нужно только подрихтовать симлинки, чтобы они указывали на твой каталог с
mailbox'ами для обучения и сохранения обученных писем
в общем, вроде все. если что неясно написано - спрашивай
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ: 77186900, 32418694 CRV2-RIPE, CRV-UANIC