#! /bin/sh # $Id: mysend,v 1.3 1994/09/06 12:14:16 jerry book3 $ ### mysend -- sendproc that adds signature (or anything) to mail ### Usage (in MH profile): sendproc: /xxx/yyy/mysend ## ## INSTALL THIS SCRIPT AS YOUR sendproc, whatnow WILL RUN ## IT AFTER YOU TYPE send OR push AT THE What now? PROMPT. ## THE SCRIPT PARSES ALL THE ARGUMENTS YOU TYPE AT THE ## What now? PROMPT (IF ANY) AND LOOKS FOR -signature OR ## -nosignature (OR THE ABBREVIATIONS -sig AND -nosig). ## ALSO, -face ADDS A X-Face: COMPONENT FROM THE ~/.face FILE; ## -noface STOPS THE FACE IF IT'S BEEN SET AS THE DEFAULT. ## ## IF THE SCRIPT FINDS THOSE FLAGS, IT SETS A FLAG VARIABLE; ## THE REST OF THE ARGUMENTS, INCLUDING THE DRAFT PATHNAME ## (ADDED BY whatnow) ARE PASSED TO THE *REAL* MH send COMMAND. ## ## NOTE: whatnow RUNS THIS SCRIPT; IT DOES NOT PASS THIS SCRIPT ## ANY send: ARGUMENTS FROM YOUR MH PROFILE. (YOU CAN GET mysend: ## ARGUMENTS FROM THE MH PROFILE BY USING THE mhparam SCRIPT.) ## ## BEFORE IT ADDS YOUR SIGNATURE TO THE DRAFT, mysend CHECKS ## CHECKS THE $mhdist ENVIRONMENT VARIABLE TO BE SURE YOU AREN'T ## USING dist (YOU CAN'T ADD ANY TEXT TO THE BODY OF A dist'ED ## MESSAGE). THEN IT CHECKS TO SEE WHETHER YOU WANT A SIGNATURE ## (YOU CAN HARD-CODE THE DEFAULT ON THE dosig= LINE OF THE SCRIPT, ## BY THE WAY). IF YOU DO, IT APPENDS YOUR $HOME/.signature FILE ## TO THE DRAFT WITH A LINE OF TWO DASHES (--) BEFORE. ## ## FINALLY, THE SCRIPT execS THE REAL MH send COMMAND. ## ## NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE ## ## NOTE: THERE SEEMS TO BE A BUG IN MH 6.7.2 (AT LEAST) THAT WON'T ## PASS THE -dist SWITCH TO THE post COMMAND IF AN EXTERNAL ## sendproc (LIKE THIS!) IS USED. THE RESULT IS ERRORS LIKE ## THESE IF YOU USE THIS sendproc DURING THE dist COMMAND: ## What now? send ## post: illegal header line -- Resent-To: ## ... ## THE mydist SHELL SCRIPT WORKS AROUND THIS PROBLEM. ## IT'S A FRONT-END dist SHELL SCRIPT THAT MAKES A ## TEMPORARY COPY OF YOUR MH PROFILE WITHOUT ITS ## sendproc: ENTRY. UGLY... BUT WORTH IT IF YOU USE dist. ## ## NOTE: IF YOU RENAME THIS, DON'T CALL send; whatnow WON'T USE IT. mh=/usr/local/mh # WHERE MH COMMANDS LIKE send LIVE doface=n # DEFAULT: NO FACE dosig=n # DEFAULT: NO SIGNATURE face=$HOME/.face # FACE FILE, INCLUDING X-Face: signature=$HOME/.signature # SIGNATURE FILE TO READ # PARSE COMMAND LINE, GRAB OUR OPTIONS. # FIRST ARGS ARE OPTIONS; LAST IS DRAFT FILENAME: while : do case "$1" in "") break ;; # ALL DONE -sig*) dosig=y ;; -nosig*) dosig=n ;; -face) doface=y ;; -noface) doface=n ;; *) args="$args $1" ;; # FOR send esac draft="$1" # EVENTUALLY THIS GETS DRAFT PATHNAME shift done # NO EDITS IF $mhdist ENVARIABLE IS 1 (DRAFT IS A dist HEADER): case "$mhdist" in 1) ;; *) # BEFORE DOING EDITS, EXIT IF DRAFT ISN'T READY: if [ ! -w "$draft" -o ! -r "$draft" ]; then echo "$0 quitting: unwritable or unreadable '$draft'" 1>&2 exit 1 fi # SET UP FOR ANY sed EDITS BY BUILDING $sedcmd EDITING COMMAND: case "$doface" in y) if [ -r "$face" ]; then # WE CAN'T KNOW IF ANY HEADER COMPONENTS ARE MULTI-LINE # OR IF MESSAGE HAS To:, cc: ETC. SO ADD FACE TO TOP: sedcmd="${sedcmd} -e '1r $face'" else echo "$0 quitting: unreadable '$face'" 1>&2 exit 1 fi ;; esac # DO ANY sed EDITS. (USE sed BECAUSE ed BOMBS ON HUGE FILES.) # CAN TEST ALL sed-EDITING VARIABLES AT ONCE (case "$var1$var2") case "$doface" in *y*) temp=/tmp/MYSEND$$ # sed COMMAND MAY HAVE QUOTES IN IT, SO USE eval: eval /bin/sed $sedcmd $draft > $temp || exit 1 /bin/cp $temp $draft || exit 1 /bin/rm -f $temp ;; esac # ADD SIGNATURE FILE: case "$dosig" in y) if [ -r "$signature" ]; then # SOME echoS CHOKE ON DASHES, SO DO IT THIS WAY: /bin/cat - "$signature" << \ENDPRESIG >> $draft || exit 1 -- ENDPRESIG else echo "$0 quitting: unreadable '$signature'" 1>&2 exit 1 fi ;; esac ;; esac if $mh/send $args then exit 0 else # send returned non-zero. If "push" command was used, # try to ring bell (by making a control-G) and print warning # (there's no second chance; "whatnow" always exits after "push"). case "$args" in *-push*) /bin/cat << END 1>&2 ******************************************************* `echo x | /bin/tr x '\07'`$0 WARNING: $mh/send $args returned a non-zero status. Check for an unsent draft. ******************************************************* END ;; esac # If "push" not used, this will make "whatnow" prompt again: exit 1 fi
[Table of Contents] [Index] [Return to Explanation of mysend] [The mydist Shell Script]
This file is from the third edition of the book MH & xmh: Email for Users & Programmers, ISBN 1-56592-093-7, by Jerry Peek. Copyright © 1991, 1992, 1995 by O'Reilly & Associates, Inc. This file is freely-available; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. For more information, see the file copying.htm.
Suggestions are welcome: Jerry Peek <jpeek@jpeek.com>