diff options
Diffstat (limited to 'contrib/runfetchmail')
-rw-r--r-- | contrib/runfetchmail | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/contrib/runfetchmail b/contrib/runfetchmail new file mode 100644 index 00000000..2b40f511 --- /dev/null +++ b/contrib/runfetchmail @@ -0,0 +1,182 @@ +#!/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 "\n\t\t\t $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 + |