home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # $Id: Rnmail.SH,v 3.0 1992/02/23 21:25:39 davison Trn $
- #
- # This software is Copyright 1991 by Stan Barber.
- #
- # Permission is hereby granted to copy, reproduce, redistribute or otherwise
- # use this software as long as: there is no monetary profit gained
- # specifically from the use or reproduction of this software, it is not
- # sold, rented, traded or otherwise marketed, and this copyright notice is
- # included prominently in any copy made.
- #
- # The author make no claims as to the fitness or correctness of this software
- # for any use whatsoever, and it is provided as is. Any use of this software
- # is at the user's own risk.
- #
- #
- # syntax: Rnmail -h headerfile [oldart] or
- # Rnmail destination-list or just
- # Rnmail
-
- export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$)
-
- # System dependencies
-
- mailer="${RNMAILER-/usr/sbin/sendmail}"
- # if you change this to something that does signatures, take out signature code
-
- # your organization name
- orgname="/etc/origanization"
- # what pager you use--if you have kernal paging use cat
- pager="${PAGER-/bin/more}"
- # how you derive full names, bsd, usg, or other
- nametype="bsd"
- # default editor
- defeditor="/usr/bin/ue"
- # where the non-publics are
- case undef in
- define) rnlib=`/usr/lib/trn/filexp /usr/lib/trn` ;;
- undef) rnlib="/usr/lib/trn" ;;
- esac
- # how not to do a newline with echo
- n=""
- c="\c"
-
- test=test
- sed=/usr/bin/sed
- echo=/bin/echo
- cat=/bin/cat
- grep=/usr/bin/grep
- rm=/bin/rm
- sleep=/usr/bin/sleep
- who=
-
- orgname=${NEWSORG-${ORGANIZATION-$orgname}}
- dotdir=${DOTDIR-${HOME-$LOGDIR}}
- tmpart=$dotdir/.letter
- speller=$rnlib/Speller
- mail_sig=${MAILSIGNATURE-$dotdir/.mail_sig}
-
- headerfile=""
- case $# in
- 0) ;;
- *) case $1 in
- -h)
- headerfile="$2"
- case $# in
- 3) oldart=$3 ;;
- esac
- ;;
- esac
- ;;
- esac
-
- case $headerfile in
- '')
- case $# in
- 0)
- to=h
- while $test "X$to" = Xh ; do
- $echo ""
- $echo $n "To: $c"
- read to
- case $to in
- h)
- $cat <<'EOH'
-
- Type the net address of those people to whom you wish the message sent.
- Additional recipients may be added on the Cc: line when you edit.
-
- Separate multiple addresses with spaces.
-
- EOH
- ;;
- esac
- done
- ;;
- *)
- to="$*"
- ;;
- esac
- to=`$echo "$to" | $sed 's/ */ /g'`
-
- title=h
- while $test "X$title" = Xh ; do
- $echo ""
- $echo $n "Title/Subject: $c"
- read title
- case $title in
- h)
- $cat <<'EOH'
-
- Type the title for your message.
- EOH
- ;;
- esac
- done
-
- # now build a file with a header for them to edit
-
- case $orgname in
- /*) orgname=`$cat $orgname` ;;
- esac
-
- $sed -e '/^Reply-To: $/d' > $tmpart <<EOHeader
- To: $to
- Subject: $title
- Organization: $orgname
- Reply-To: $REPLYTO
- Cc:
- Bcc:
-
- EOHeader
-
- ;;
- *)
- $cat < $headerfile > $tmpart
- ;;
- esac
-
-
- file=h
- while $test X$file = Xh ; do
- $echo ""
- $echo $n "Prepared file to include [none]: $c"
- read file
- case $file in
- h)
- $cat <<'EOH'
-
- If you have already produced the body of your message, type the filename
- for it here. If you just want to proceed directly to the editor, type a
- RETURN. In any event, you will be allowed to edit as many times as you
- want before you send off the message.
- EOH
- ;;
- '')
- $echo "" >> $tmpart
- state=edit
- ;;
- *)
- $cat $file >>$tmpart
- state=ask
- ;;
- esac
- done
-
- $echo ""
-
- if $test -r $mail_sig; then
- $echo "-- " >> $tmpart
- $cat $mail_sig >> $tmpart
- fi
-
- while : ; do
- case $state in
- edit)
- rescue="$sleep 1; $cat $tmpart >>${HOME-$LOGDIR}/dead.letter ; $echo Message appended to ${HOME-$LOGDIR}/dead.letter ; exit"
- trap "$rescue" 1
- trap : 2
- case "${VISUAL-${EDITOR-}}" in
- '')
- tmp=h
- ;;
- *)
- tmp=''
- ;;
- esac
- while $test "X$tmp" = Xh ; do
- $echo $n "Editor [${VISUAL-${EDITOR-$defeditor}}]: $c"
- read tmp
- case $tmp in
- h)
- $cat <<'EOH'
-
- Type a return to get the default editor, or type the name of the editor you
- prefer. The default editor depends on the VISUAL and EDITOR environment
- variables.
-
- EOH
- ;;
- '')
- ;;
- *)
- VISUAL=$tmp
- export VISUAL
- ;;
- esac
- done
- ${VISUAL-${EDITOR-$defeditor}} $tmpart $oldart
- trap "$rescue" 2
- state=ask
- ;;
-
- ask)
- $echo ""
- $echo $n "Check spelling, Send, Abort, Edit, or List? $c"
- read ans
-
- case $ans in
- [aA]*)
- state=rescue
- ;;
- [eE]*)
- set $ans
- case $# in
- 2) VISUAL="$2" ;;
- esac
- state=edit
- ;;
- [lL]*)
- $pager $tmpart
- state=ask
- ;;
- [cC]*|[sS][pP]*)
- $speller $tmpart
- state=ask
- ;;
- [sS]*)
- state=send
- ;;
- [hH]*)
- $cat <<'EOH'
-
- Type c to check the message's spelling, s to send the message, a to abort
- and append the message to dead.letter, e to edit the message again, or l
- to list the message with your pager.
-
- To invoke an alternate editor, type 'e editor'.
- EOH
- esac
- ;;
-
- send)
- if $test -f $dotdir/.signature; then
- $echo $n "Append .signature file? [y] $c"
- read ans
- case $ans in
- ''|y*)
- $echo "-- " >> $tmpart
- cat $dotdir/.signature >> $tmpart
- ;;
- esac
- fi
- case $mailer in
- *sendmail)
- $mailer -t <$tmpart
- ;;
- # but recmail does not know about Bcc, alas
- *recmail)
- $mailer <$tmpart
- ;;
- *)
- set X `$sed <$tmpart -n -e '/^To:/{' -e 's/To: *//p' -e q -e '}'`
- shift
- set X "$@" `$sed <$tmpart -n -e '/^Cc:/{' -e 's/Cc: *//p' -e q -e '}'`
- shift
- set X "$@" `$sed <$tmpart -n -e '/^Bcc:/{' -e 's/Bcc: *//p' -e q -e '}'`
- shift
- $grep -v "^Bcc:" <$tmpart | $mailer "$@"
- ;;
- esac
- case $? in
- 0)
- state=cleanup
- ;;
- *)
- state=rescue
- ;;
- esac
- ;;
- rescue)
- $cat $tmpart >> ${HOME-$LOGDIR}/dead.letter
- $echo "Message appended to ${HOME-$LOGDIR}/dead.letter"
- $echo "A copy may be temporarily found in $tmpart"
- exit
- ;;
- cleanup)
- case "${MAILRECORD-none}" in
- none)
- ;;
- *)
- set X ${USER-${LOGNAME-`$who am i`}} unknown
- shift
- $rnlib/mbox.saver $tmpart "." "." 0 0 Pnews $MAILRECORD "From $1 `LANG= date`"
- if $test $? -eq 0 ; then
- $echo "Message appended to $MAILRECORD"
- else
- $echo "Cannot append to $MAILRECORD"
- fi
- ;;
- esac
- exit
- ;;
- esac
- done
-