URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 75002
[ Назад ]

Исходное сообщение
"maildroprc"

Отправлено Antixrict , 04-Июл-07 11:06 
Здраствуйте помогите найти ошибку. Задача такая чтобы при доставке письма оно прверялось 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 скрипт работает и выдаёт верные значения. Если запускать в ручную всё тоже работает.


Содержание

Сообщения в этом обсуждении
"maildroprc"
Отправлено magr , 04-Июл-07 11:40 

>
>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 .....
    }