Hi Noah,

Am 2009-07-12 11:58:23, schrieb Admin:
> okay how do I script sa-learn to learn the contents of a particular
> file.

I use courier (Maildir) with procmail and if I have spams, then  I  move
it to the folder "INBOX.Learn_IS_Spam" and if I have ham  found  in  the
spamfolders, I move it to "INBOX.Learn_NO_Spam".

----[ '/home/michelle.konzack/bin/check_sa_learn' ]---------------------
#!/bin/bash

VAL_USERS=$(cut -d ':' -f1,3,6 /etc/passwd |tr ':' ' ')
HN=$(hostname -s)
LOG=/var/log/check_sa_learn.$(date +%Y-%m-%d).log

touch ${LOG}
chown root:adm ${LOG}
chmod 660 ${LOG}

(echo "${VAL_USERS}" ; echo) |
while read VAL_USER VAL_UID VAL_HOME
do
  if [ -n "${VAL_USER}${VAL_UID}${VAL_HOME}" ] ; then
    if [ ${VAL_UID} -ge 1000 ] && [ ${VAL_UID} -lt 65000 ] ; then


      NUM_SPAM=$(ls ${VAL_HOME}/Maildir/.Learn_IS_Spam/{cur,new}/* 2>/dev/null 
|wc -l)
      NUM_HAM=$(ls  ${VAL_HOME}/Maildir/.Learn_NO_Spam/{cur,new}/* 2>/dev/null 
|wc -l)

      NUM=$((${NUM_SPAM}+${NUM_HAM}))

      if [ ${NUM} -gt 0  ] ; then

        echo "Working on user:  ${VAL_USER}" 1>&2
        DATE=$(date +"%Y-%m-%d %H:%M:%S")
        echo -n "${DATE} [${HN}] USER=${VAL_USER}, NUM_SPAM=${NUM_SPAM}, 
NUM_HAM=${NUM_HAM}" >>${LOG}

        ################################################################

        if [ -d ${VAL_HOME}/Maildir/.Learn_IS_Spam ] ; then
          LIST_SPAM=$(find ${VAL_HOME}/Maildir/.Learn_IS_Spam/cur -type f -mmin 
+2 ; find ${VAL_HOME}/Maildir/.Learn_IS_Spam/new -type f -mmin +2)
          echo -n ", SPAM=" >>${LOG}
          if [ -n "${LIST_SPAM}" ] ; then
            for MSG in ${LIST_SPAM} ; do
              su - ${VAL_USER} -c "sa-learn --spam ${MSG} ; if [ $? -eq 0 ] ; 
then procmail <${MSG} ; if [ $? -eq 0 ] ; then rm -f ${MSG} ; fi ; fi"
            done
            echo -n "scaned" >>${LOG}
          else
            echo -n "none" >>${LOG}
          fi
        fi

        ################################################################

        if [ -d ${VAL_HOME}/Maildir/.Learn_NO_Spam ] ; then
          LIST_HAM=$(find ${VAL_HOME}/Maildir/.Learn_NO_Spam/cur -type f -mmin 
+2 ; find ${VAL_HOME}/Maildir/.Learn_NO_Spam/new -type f -mmin +2)
          echo -n ", HAM=" >>${LOG}
          if [ -n "${LIST_HAM}" ] ; then
            for MSG in ${LIST_HAM} ; do
              DE=$(date +%s)
              for CNT in $(seq --equal-width 1 100) ; do
                if [ ! -f ${VAL_HOME}/Maildir/new/${DE}.${CNT}.${HN} ] ; then
                  su - ${VAL_USER} -c "sa-learn --ham ${MSG} ; if [ $? -eq 0 ] 
; then mv -f ${MSG} ${VAL_HOME}/Maildir/new/${DE}.${CNT}.${HN} ; fi"
                  break
                fi
              done
            done
            echo "scaned" >>${LOG}
          else
            echo "none" >>${LOG}
          fi
        fi

        ################################################################

      fi
    fi
  fi
done
------------------------------------------------------------------------

and a cronjob:

----[ '/etc/cron.d/check_sa_learn' ]------------------------------------
MAILTO=cron

*/10 * * * *    root    /home/michelle.konzack/bin/check_sa_learn
------------------------------------------------------------------------

and works perfectly...  on more then 2000 user!

Thanks, Greetings and nice Day/Evening
    Michelle Konzack
    Systemadministrator
    Tamay Dogan Network
    Debian GNU/Linux Consultant


-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/
##################### Debian GNU/Linux Consultant #####################
Michelle Konzack   c/o Shared Office KabelBW  ICQ #328449886
+49/177/9351947    Blumenstasse 2             MSN LinuxMichi
+33/6/61925193     77694 Kehl/Germany         IRC #Debian (irc.icq.com)

Attachment: signature.pgp
Description: Digital signature

Reply via email to