#
# Emulation of compiled mhmail(1), with these differences:
# * Adds -send/-nosend, -headerfield, and -attach options.
+# * Adds optional -to switch for recipient addresses.
# * Supports all post(8) (by default, without -profile) or send(1)
# (with -profile) options.
# * Optionally (with -profile) obeys the users profile, including
# * The compiled mhmail dropped a trailing newline from the -body argument.
# * Drops support for undocumented -queue option.
-usage='Usage: mhmail [addrs ... [switches]]
+usage='Usage: mhmail [-t(o)] addrs ... [switches]
switches are:
-at(tach) file [-at(tach) file] ...
-b(ody) text
-nose(nd)
-v(ersion)
-hel(p)
- and all post(8)/send(1) switches'
+ and all post(8)/send(1) switches
+ mhmail with no arguments is equivalent to inc'
-bindir=`dirname $0`
+
+#### Find directory of this script. Bourne shell just puts the program
+#### name in $0 if it's found from the PATH, so search that if necessary.
+finddir() {
+ case $0 in
+ */*) dirname $1 ;;
+ * ) IFS=:
+ for d in $PATH; do
+ [ -f "${d:=.}/$1" -a -x "$d/$1" ] && printf "$d" && break
+ done ;;
+ esac
+}
+
+bindir=`finddir $0`
nmhbindir=`cd "${bindir}" && pwd`
+
#### Checks for missing mandatory arguments.
checkforargs() {
if [ ${attacharg} -eq 1 ]; then
printf "mhmail: missing argument to -headerfield\n"; exit 1
elif [ ${subjectarg} -eq 1 ]; then
printf "mhmail: missing argument to -subject\n"; exit 1
+ elif [ ${toarg} -eq 1 ]; then
+ printf "mhmail: missing argument to -to\n"; exit 1
fi
}
else
#### Go through all the switches so we can build the draft.
tolist= ## To: addresses
+ toarg=0 ## whether currently handling -to
attacharg=0 ## whether currently handling -attach
attach_send_switch_added=0 ## whether added "-attach Nmh-Attachment" switch
body= ## contents of the message body
use_send=0 ## use post (default) or send (-profile)
sendsw=1 ## to send (default) or not to send
for arg in "$@"; do
- case "${arg}" in
+ case ${arg} in
#### Post and send won't accept -f -or -s because they'd be
#### ambiguous, so no conflicts with them. And they don't have
#### -b, -c, -r, -t. For the new switches that compiled mhmail
-r|-re|-res|-rese|-resen|-resent) mhmailswitch=1; resent=1 ;;
-se|-sen|-send) mhmailswitch=1; sendsw=1 ;;
-su|-sub|-subj|-subje|-subjec|-subject) mhmailswitch=1; subjectarg=1 ;;
+ -t|-to) toarg=1; ccarg=0 ;;
-v|-ve|-ver|-vers|-versi|-versio|-version)
#### Cheat instead of using autoconf and make to fill in the version.
"${nmhbindir}"/mhpath -v | sed 's/mhpath/mhmail/'; exit ;;
elif [ ${post_send_switch_arg} -eq 1 ]; then
postsendargs="${postsendargs:+${postsendargs} }${arg}"
elif [ ${ccarg} -eq 1 ]; then
- #### Never reset ccarg to 0, for compatibilty with compiled mhmail.
+ #### ccarg can only be reset to 0 by -to.
cclist="${cclist:+${cclist}, }${arg}"
else
#### An address.
tolist="${tolist:+${tolist}, }${arg}"
+ toarg=0
fi ;;
esac
done
if "${post_or_send}" "${tmpfile}" ${postsendargs}; then
exit
else
+ status=$?
+ mv -f "${tmpfile}" dead.letter
printf "Letter saved in dead.letter\n"
- #### exec skips the trap set above.
- [ "${tmpfileresent}" ] && rm -f "${tmpfileresent}"
- exec mv "${tmpfile}" dead.letter
+ exit $status
fi
fi
fi