runfetchmail
上传用户:xxcykj
上传日期:2007-01-04
资源大小:727k
文件大小:5k
- #!/bin/sh
- # Runfetchmail 1.1
- #
- # Copyright (c) 1997 Doug Muth, Wescosville, Pennsylvania USA
- # All rights reserved.
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
- # in the Software without restriction, including without limitation the rights
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- # copies of the Software, and to permit persons to whom the Software is
- # furnished to do so, subject to the following conditions:
- #
- # The above copyright notice and this permission notice shall be included in
- # all copies or substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- # THE SOFTWARE.
- #
- # Please send bug reports, suggestions, and flames to: dmuth@ot.com
- #
- # This shell script is used as a "frontend" for running fetchmail. It will
- # start up fetchmail and save the session to disk, generate statistics
- # of the e-mail that you downloaded, and tell you how many messages
- # you have in various folders. A copy of these results are also
- # e-mailed to you.
- #
- # An rc file is also supported. If the file $HOME/.runfetchmailrc
- # exists, it will be sourced. This way, you can place runfetchmail
- # into /usr/local/bin, and individual users can have their own settings.
- #
- # Pre-requisites: You must have procmail, or at least `mailstat', a
- # utility that comes with procmail, running on your system. You must
- # also have `timer', a shell script written by me, if you would like the
- # total time that the transfer took to be displayed.
- #
- # Syntax: runfetchmail [-every]
- # -every Downloads all messages from the mailserver, regardless of
- # their size and whether they have been previously downloaded.
- #
- # Changes in version 1.1: The argument "-every" is supported. I removed the
- # $EXIT_CODE variable since I had problems assigning the exit code from
- # fetchmail to it.
- # Command line to run fetchmail
- FETCHMAIL="/usr/local/bin/fetchmail"
- # Your procmail logfile
- LOG=$HOME/procmail/log
- # Do we want to use timer? Set to 0 to disable.
- TIMER=1
- # Our path to sendmail with parameters
- SENDMAIL="/usr/bin/sendmail -oi -t"
- # Who am I?
- SELF="dmuth@ot.com"
- # The folders that I should check for the number of messages
- FOLDERS="$MAIL $HOME/mail/lists"
- # Number of seconds to "sleep" for while procmail finishes up, increase
- # this if you have a really slow system
- LATENT=10
- # Do we want to use mailstat? Set to 0 to disable
- MAILSTAT=1
- # Do we want to e-mail the output to myself? Set to 0 to disable.
- # I strongly suggest doing this so that if you lose your connection to
- # the net part of the way through a download, you can see how much
- # progess was made
- E_MAIL=1
- ###
- # End of user defined variables
- ###
- # The temp file, and ensure my privacy!
- TMP=/tmp/fetchmail.sh.$$
- # The version of this program
- VERSION="Runfetchmail 1.1"
- # Trap errors
- trap "rm -f $TMP; echo ""Exiting at user request"" ;
- test $TIMER -eq 1 && timer -stop -id $$ >/dev/null; exit 1"
- 2 3 4 15
- # Source the user's rc file if it exists
- test -e $HOME/.runfetchmailrc && . $HOME/.runfetchmailrc
- num_mail()
- { # This procedure tells me how many messages there are in each folder
- for D in $*
- do
- if test -f $D
- then
- echo "There are `frm $D |wc -l` messages in $D"
- fi
- done
- }
- getmail()
- { # Fetch the mail!
- test $TIMER -eq 1 && timer -start -id $$ -quiet
- $FETCHMAIL $@
- # pause for a short while
- echo "Now sleeping for $LATENT seconds..."
- echo -n "Zzz...Zzz...Zzz..."
- sleep $LATENT
- echo "wakeup time! <yawn>"
- }
- stats()
- { # Prepare the statistics
- # Ensure we have a log file
- test ! -e $LOG && touch $LOG
- echo -e "nttt $VERSION Statistics"
- test $MAILSTAT -eq 1 && mailstat -k <$LOG
- echo ""
- num_mail $FOLDERS
- test $TIMER -eq 1 && echo -e "n`timer -stop -id $$ -quiet` have elapsed."
- }
- prepmail()
- { # Let's prepare our e-mail
- cat <<EOF >$TMP
- From: $LOGNAME ($VERSION)
- To: $LOGNAME
- X-Loop: $SELF
- Subject: Mail stats from `date "+%D %X"`
- EOF
- }
- ### Main Program
- # Let's have some initial cleanup
- rm -f $LOG
- clear
- # Create and secure the temporary file
- test $E_MAIL -eq 1 && { cat /dev/null >$TMP; chmod 600 $TMP }
- # Prepare the e-mail before the logs are added to it
- test $E_MAIL -eq 1 && prepmail
- # See if we are downloading every message or not
- if test "$1" = "-every"
- then
- FETCHMAIL="$FETCHMAIL -a -l 0"
- shift
- fi
- # Fetch the mail and have the output written to stdout and (optionally) $TMP
- test $E_MAIL -eq 1 && getmail $@ 2>&1 |tee -a $TMP || getmail $@
- clear
- # Do the same thing with the statistics
- test $E_MAIL -eq 1 && stats $@ 2>&1 |tee -a $TMP || stats $@
- # Now send $TMP to myself and clean up the mess
- test $E_MAIL -eq 1 && { cat $TMP |$SENDMAIL; rm -f $TMP }
- # cleanup the log file for next time
- rm -f $LOG
- # The End