home *** CD-ROM | disk | FTP | other *** search
- From: falk@peregrine.Eng.Sun.COM (Ed Falk)
- Newsgroups: alt.sources
- Subject: Kill file for mail.
- Message-ID: <2258@exodus.Eng.Sun.COM>
- Date: 7 Nov 90 00:18:01 GMT
-
- In article <1990Nov06.052117.26136@ddsw1.MCS.COM>, arf@ddsw1.MCS.COM (Jack Schmidling) writes:
- >
- >
- > HATE MAIL FROM A FOOL
- >
- > [complaint about hate mail]
-
- Here's a handy shell script I use all the time. If you're running
- unix, you can use this program to sort your incoming mail based on
- anything in the header. You can send your mail to different folders,
- or even /dev/null. It's also possible to send mail through a filter,
- say to reformat it or something. It would even be easy to take mail
- from a particular user, and bounce it back to that person, or
- Postmaster at that person's site....
-
- Make this script executable, name it "sortmail", put it where the
- mailer daemon can access it (watch those permissions), and create a
- .forward file in your home directory to divert your mail through the
- script.
-
- CAVEAT: Whenever you install any script or program to filter
- your mail, test it thoroughly by sending yourself mail from other
- accounts and from other machines.
-
- This script works on Suns, I haven't tried it on other machines.
-
- #!/bin/csh -f
- #
- #
- #
- # create this $HOME/.forward file:
- #
- # "| /home/myname/bin/sortmail myname"
- #
- # (exact path depends on where you put this script. You must use a
- # full path)
- #
- # mail is classified according to the "$list" variable.
- # Classifiable mail goes to the corresponding mailbox entry.
- #
- # unclasifiable mail drops out at the bottom and goes to "$default"
- #
- # Don't forget to make sortmail executable.
- #
- # To classify mail according to who it was directed
- # to, use the variable "${TO}" rather than the string
- # "To:.*" Look at the definition of "${TO}" to see why.
- #
- # leading '+' in a filename expands to $maildir/
- #
- # if the filename is '|', then the next item in the list is the full
- # pathname of a program to run with the message as stdin. No arguments
- # may be passed, so your program will probably be a short shell script.
- #
- # Setting the "$vacation" variable also activates vacation for all mail sent
- # directly to you. If you set 'vacation', make sure there's a
- # .vacation.msg file as described in vacation(1). Also run "vacation -I"
- # as per the vacation(1) man page.
- #
- #
- # variables you may want to customize:
- #
- # list list of test lines and folder names.
- # user username. Normally provided in .forward
- # mailbox where user's mail would normally be stored.
- # maildir where user's mail folders are stored.
- # vacation set to turn on vacation program.
- # default Where unclassifiable mail goes.
-
- set user=$1
- set mailbox=/usr/spool/mail/$user
- set maildir=~$user/Mail
- #set vacation
- set noglob
-
- set TO="^(To|Cc|Apparently-To):.*"
-
- # pairs of test lines and mailbox names
- #
- # In this example, mail from MAILER-DAEMON goes to +bounces
- # mail from joe with the 132-character terminal
- # gets passed through a script to reformat it.
- # mail from isaac@goanna goes to /dev/null.
- # mail from realjerk@psuvm.edu goes through a script that
- # sends it to Postmaster@psuvm.edu.
- # mail to me specificly goes to my mailbox
- # mail to the scuba mailing list goes to the +scuba folder.
- # mail with a "Precedence: junk" line goes to +other.
- # everything else goes to +other.
-
- set list=( \
- "^From:.*MAILER-DAEMON" +bounces \
- "^From:.*joe@shmoe" | /home/myname/bin/fixjoe \
- "^From:.*isaac@goanna.cs.rmit.OZ.AU" /dev/null \
- "^From:.*realjerk@psuvm.edu" /dev/null \
- "${TO}$user" $mailbox \
- "${TO}scuba" +scuba \
- "^Precedence: junk" +other \
- )
-
- #set default=$mailbox
- set default=+other
-
- set logfile = /dev/console
- #set logfile = ~$user/msglog
-
- # end of user-customized variables
-
-
-
-
- set path=(/usr/ucb /usr/bin /bin)
- set HOST=`/bin/hostname`
- set SCRIPT=`basename $0`
- set SYNTAX="$SCRIPT username [param-file]"
- set MSGTMP=/usr/tmp/sortmail-tmp_$$
- set HDRTMP=/usr/tmp/sortmail-hdr_$$
-
- rm -f $MSGTMP $HDRTMP # Make sure temp files clear
-
- sed -e '2,$s/^From />From /' -e '1s/>From /From /' > $MSGTMP
- sed -e '/^$/,$d' < $MSGTMP > $HDRTMP
-
- #echo ===================== >> $logfile
- #cat $HDRTMP >> $logfile
- #echo ===================== >> $logfile
- #cat $MSGTMP >> $logfile
- #echo ===================== >> $logfile
-
- #egrep '^From:' $HDRTMP >> $logfile
- #egrep '^To:' $HDRTMP >> $logfile
- #egrep '^Subject:' $HDRTMP >> $logfile
-
- if ( $status != 0 ) then
- echo ${SCRIPT}: Sorry - error while receiving your message to $user.
- echo ${SCRIPT}: /usr/tmp filesystem on $HOST probably full
- cat $MSGTMP >> $mailbox
- /bin/rm -f $MSGTMP $HDRTMP
- echo `date` $SCRIPT lost a mail message >> /dev/console
- exit 1
- endif
-
- echo "" >> $MSGTMP
-
- while ( $#list > 1 && $?FILED == 0 )
- egrep -i -s "$list[1]" $HDRTMP
- if ( $status == 0 ) then
- if ( $list[2] == '|' ) then
- # echo piped through $list[3] >> $logfile
- $list[3] < $MSGTMP
- else
- set box=`echo $list[2] | sed "s.^+.$maildir/."`
- cat $MSGTMP >> $box
- # echo filed to $box >> $logfile
- endif
- if ( $status == 0 ) then
- set FILED
- break
- endif
- endif
- if ( $list[2] == '|' ) shift list
- shift list
- shift list
- end
-
-
-
- if ( $?FILED == 0 ) then
- set box=`echo $default | sed "s.^+.$maildir/."`
- cat $MSGTMP >> $box
- # echo not classified, filed to $box >> $logfile
- endif
-
-
-
- if ( $?vacation ) then
- egrep -i -s "$(TO)$user" $MSGTMP
- if ( $status == 0 ) /usr/ucb/vacation $user < $MSGTMP
- endif
-
-
- /bin/rm -f $MSGTMP $HDRTMP
- exit 0
- --
- -ed falk, sun microsystems -- sun!falk, falk@sun.com
- "What are politicians going to tell people when the
- Constitution is gone and we still have a drug problem?"
- -- William Simpson, A.C.L.U.
-