Здраствуйте помогите найти ошибку. Задача такая чтобы при доставке письма оно прверялось dspam-ом если в базе поставлена 1. Вот мой maildroprc:
SHELL="/bin/sh"
SENDER=$1
`test -d $HOME$DEFAULT`
if ($RETURNCODE!=0)
{
`mkdir -p -m 0700 $HOME$DEFAULT`
`mkdir -m 0700 $HOME$DEFAULT/cur`
`mkdir -m 0700 $HOME$DEFAULT/new`
`mkdir -m 0700 $HOME$DEFAULT/tmp`
}
QUOTA="$MAILDIRQUOTA"'S'
`maildirmake -q $QUOTA $HOME$DEFAULT`
if ($LOGNAME ne "spam@nova.lv" && $LOGNAME ne "nospam@nova.lv")
{
DSPAM=`/etc/dspam/spam.pl $LOGNAME`
if ($DSPAM eq "1" && $SIZE < 2048000)
{
xfilter "/usr/bin/dspam --user $LOGNAME --stdout --process --deliver=innocent,spam"
if (/^X-DSPAM-Result: Spam/)
{
`test -d $HOME$DEFAULT/.Trash`
if ($RETURNCODE!=0)
{
`/usr/bin/maildirmake $HOME$DEFAULT/.Trash`
}
to "$HOME$DEFAULT/.Trash"
}
else
{
to "$HOME$DEFAULT"
}
}
else
{
to "$HOME$DEFAULT"
}
}
if ($LOGNAME eq "spam@nova.lv")
{
DSPAM=`/etc/dspam/spam.pl $SENDER`
if ($DSPAM eq "1" && $SIZE < 2048000)
{
xfilter "/usr/bin/dspam --user $SENDER --class=spam --source=error"
}
}
if ($LOGNAME eq "nospam@nova.lv")
{
DSPAM=`/etc/dspam/spam.pl $SENDER`
if ($DSPAM eq "1" && $SIZE < 2048000)
{
xfilter "/usr/bin/dspam --user $SENDER --class=innocent --source=error"
}
}
Perl скрипт работает и выдаёт верные значения. Если запускать в ручную всё тоже работает.
>
>Perl скрипт работает и выдаёт верные значения. Если запускать в ручную всё
>тоже работает.во-первых, можно пойти по пути упрощения и оставить пару простых строк, проверяющих на спам безо всяких условий -- работает ли
во-вторых, для отладки можно поставить в начале скрипта
VERBOSE="4"
настроить сислог писать логи в /var/log/maildrop.logи выводить также туда значения переменных (внутри скрипта добавляя):
`echo $HOME$DEFAULT >> /var/log/maildrop.log`и т.д.
P.S. Директиву xfilter возможно лучше использовать в виде
log " running message through spam engine $LOGNAME"
exception {
xfilter .....
}