runfetchmail
上传用户:xxcykj
上传日期:2007-01-04
资源大小:727k
文件大小:5k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. # Runfetchmail 1.1
  3. #
  4. # Copyright (c) 1997 Doug Muth, Wescosville, Pennsylvania USA
  5. # All rights reserved.
  6. #
  7. # Permission is hereby granted, free of charge, to any person obtaining a copy
  8. # of this software and associated documentation files (the "Software"), to deal
  9. # in the Software without restriction, including without limitation the rights
  10. # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11. # copies of the Software, and to permit persons to whom the Software is
  12. # furnished to do so, subject to the following conditions:
  13. #
  14. # The above copyright notice and this permission notice shall be included in
  15. # all copies or substantial portions of the Software.
  16. #
  17. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18. # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
  20. # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  22. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  23. # THE SOFTWARE.
  24. #
  25. # Please send bug reports, suggestions, and flames to: dmuth@ot.com
  26. #
  27. # This shell script is used as a "frontend" for running fetchmail.  It will
  28. # start up fetchmail and save the session to disk, generate statistics
  29. # of the e-mail that you downloaded, and tell you how many messages
  30. # you have in various folders.  A copy of these results are also
  31. # e-mailed to you.
  32. #
  33. # An rc file is also supported.  If the file $HOME/.runfetchmailrc 
  34. # exists, it will be sourced.  This way, you can place runfetchmail
  35. # into /usr/local/bin, and individual users can have their own settings.
  36. #
  37. # Pre-requisites: You must have procmail, or at least `mailstat', a 
  38. # utility that comes with procmail, running on your system.  You must 
  39. # also have `timer', a shell script written by me, if you would like the 
  40. # total time that the transfer took to be displayed.
  41. #
  42. # Syntax: runfetchmail [-every]
  43. # -every Downloads all messages from the mailserver, regardless of
  44. # their size and whether they have been previously downloaded.
  45. #
  46. # Changes in version 1.1: The argument "-every" is supported.  I removed the
  47. # $EXIT_CODE variable since I had problems assigning the exit code from 
  48. # fetchmail to it.
  49. # Command line to run fetchmail
  50. FETCHMAIL="/usr/local/bin/fetchmail"
  51. # Your procmail logfile
  52. LOG=$HOME/procmail/log
  53. # Do we want to use timer?  Set to 0 to disable.
  54. TIMER=1
  55. # Our path to sendmail with parameters
  56. SENDMAIL="/usr/bin/sendmail -oi -t"
  57. # Who am I?
  58. SELF="dmuth@ot.com"
  59. # The folders that I should check for the number of messages
  60. FOLDERS="$MAIL $HOME/mail/lists"
  61. # Number of seconds to "sleep" for while procmail finishes up, increase
  62. #  this if you have a really slow system
  63. LATENT=10
  64. # Do we want to use mailstat?  Set to 0 to disable
  65. MAILSTAT=1
  66. # Do we want to e-mail the output to myself?  Set to 0 to disable.
  67. # I strongly suggest doing this so that if you lose your connection to
  68. # the net part of the way through a download, you can see how much 
  69. # progess was made
  70. E_MAIL=1
  71. ###
  72. # End of user defined variables
  73. ###
  74. # The temp file, and ensure my privacy!
  75. TMP=/tmp/fetchmail.sh.$$
  76. # The version of this program
  77. VERSION="Runfetchmail 1.1"
  78. # Trap errors
  79. trap "rm -f $TMP; echo ""Exiting at user request"" ; 
  80. test $TIMER -eq 1 && timer -stop -id $$ >/dev/null; exit 1" 
  81. 2 3 4 15
  82. # Source the user's rc file if it exists
  83. test -e $HOME/.runfetchmailrc && . $HOME/.runfetchmailrc
  84. num_mail()
  85. { # This procedure tells me how many messages there are in each folder
  86. for D in $* 
  87. do
  88. if test -f $D
  89. then
  90. echo "There are `frm $D |wc -l` messages in $D"
  91. fi
  92. done
  93. }
  94. getmail()
  95. { # Fetch the mail!
  96. test $TIMER -eq 1 && timer -start -id $$ -quiet
  97. $FETCHMAIL $@
  98. # pause for a short while
  99. echo "Now sleeping for $LATENT seconds..."
  100. echo -n "Zzz...Zzz...Zzz..."
  101. sleep $LATENT
  102. echo "wakeup time! <yawn>"
  103. }
  104. stats()
  105. { # Prepare the statistics
  106. # Ensure we have a log file
  107. test ! -e $LOG && touch $LOG  
  108. echo -e "nttt   $VERSION Statistics"
  109. test $MAILSTAT -eq 1 && mailstat -k <$LOG
  110. echo ""
  111. num_mail $FOLDERS
  112. test $TIMER -eq 1 && echo -e "n`timer -stop -id $$ -quiet` have elapsed."
  113. }
  114. prepmail()
  115. { # Let's prepare our e-mail
  116. cat <<EOF >$TMP
  117. From: $LOGNAME ($VERSION)
  118. To: $LOGNAME
  119. X-Loop: $SELF
  120. Subject: Mail stats from `date "+%D %X"`
  121. EOF
  122. }
  123. ### Main Program
  124. # Let's have some initial cleanup
  125. rm -f $LOG
  126. clear
  127. # Create and secure the temporary file
  128. test $E_MAIL -eq 1 && { cat /dev/null >$TMP; chmod 600 $TMP }
  129. # Prepare the e-mail before the logs are added to it
  130. test $E_MAIL -eq 1 && prepmail
  131. # See if we are downloading every message or not
  132. if test "$1" = "-every"
  133. then
  134. FETCHMAIL="$FETCHMAIL -a -l 0"
  135. shift
  136. fi
  137. # Fetch the mail and have the output written to stdout and (optionally) $TMP
  138. test $E_MAIL -eq 1 && getmail $@ 2>&1 |tee -a $TMP || getmail $@
  139. clear
  140. # Do the same thing with the statistics
  141. test $E_MAIL -eq 1 && stats $@ 2>&1 |tee -a $TMP || stats $@
  142. # Now send $TMP to myself and clean up the mess
  143. test $E_MAIL -eq 1 && { cat $TMP |$SENDMAIL; rm -f $TMP }
  144. # cleanup the log file for next time
  145. rm -f $LOG
  146. # The End