home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / postroad.zip / prmblams.cmd < prev    next >
OS/2 REXX Batch file  |  1997-10-23  |  3KB  |  104 lines

  1. /* a spam filter to be used as a PRMRECV.CMD exit from Post Road Mailer */
  2. /* Copyright (c)1997 Kari Jackson for InnoVal Systems Solutions, Inc. */
  3. call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
  4. signal on syntax name NoREXX
  5. call SysLoadFuncs
  6. signal off syntax
  7. parse source temp
  8. parse var temp . . program "." .
  9. cfgfile=program||".Cfg"
  10. if stream(cfgfile,"c","query exists")="" then exit
  11. arg filename
  12. inbasket=substr(filename,1,lastpos('\',filename)-1)
  13. do i=1 while lines(filename)
  14.    line.i=linein(filename)
  15.    parse var line.i pop '09'x .
  16.    POPname.i=inbasket'\'pop'.POP'
  17. end
  18. call lineout filename
  19. POPname.0=i-1
  20. if POPname.0<1 then exit
  21. headerlines="NOBODY"
  22. z=0
  23. do while lines(cfgfile)
  24.    line=translate(strip(linein(cfgfile)))
  25.    if line="" then iterate
  26.    if left(line,2)="/*" then iterate
  27.    if left(line,13)="<HEADERLINES>" then do
  28.       parse var line . "=" headerlines
  29.       iterate
  30.    end
  31.    z=z+1
  32.    parse upper var line spammer "09"x headers
  33.    if strip(headers)="" then headers=headerlines
  34.    headers=translate(headers," ",",")
  35.    spammers.z=strip(spammer)||"09"x||space(headers,1)
  36. end
  37. spammers.0=z
  38. call lineout cfgfile
  39. if spammers.0=0 then exit
  40. do v=1 to POPname.0
  41.    infile=POPname.v
  42.    killit=0
  43.    r=0
  44.    do while lines(infile)
  45.       hdrline=translate(translate(linein(infile)," ","09"x))
  46.       select
  47.          when left(hdrline,1)=" " then msghdrs.r=msghdrs.r space(hdrline)
  48.          when strip(hdrline)="" then nop
  49.          otherwise do
  50.             r=r+1
  51.             msghdrs.r=space(hdrline)
  52.          end
  53.       end
  54.       if strip(hdrline)="" then leave
  55.    end
  56.    msghdrs.0=r
  57.    s=0
  58.    do while lines(infile)
  59.       s=s+1
  60.       bodylines.s=translate(linein(infile))
  61.    end
  62.    bodylines.0=s
  63.    do i=1 to spammers.0
  64.       parse var spammers.i spammer "09"x headers
  65.       if headers<>oldheaders & headers<>"NOBODY" & headers<>"ENTIRE" then do
  66.          tags.0=0
  67.          parsethem=headers
  68.          do until parsethem=""
  69.             parse var parsethem this parsethem
  70.             tags.0=tags.0+1
  71.             q=tags.0
  72.             if right(this,1)<>":" then this=this||":"
  73.             tags.q=this
  74.          end
  75.          oldheaders=headers
  76.       end
  77.       do n=1 to msghdrs.0
  78.          parse var msghdrs.n tag content
  79.          hit=0
  80.          if headers<>"ENTIRE" & headers<>"NOBODY" then do
  81.             do j=1 to tags.0
  82.                if tag<>tags.j then iterate
  83.                hit=1
  84.                leave
  85.             end
  86.          end
  87.          if (hit | headers="NOBODY" | headers="ENTIRE") & pos(spammer,content)>0 then killit=1
  88.          if killit then leave
  89.       end
  90.       if killit then leave
  91.       if headers="NOBODY" then iterate
  92.       if wordpos("MSGTEXT",headers)=0 & headers<>"ENTIRE" then iterate
  93.       do t=1 to bodylines.0
  94.          if pos(spammer,bodylines.t)>0 then killit=1
  95.          if killit then leave
  96.       end
  97.       if killit then leave
  98.    end
  99.    call lineout infile
  100.    if killit then call sysfiledelete infile
  101. end
  102. NoREXX:
  103. exit
  104.