esac
}
+#### Convenience function to allow concise code below.
+die() {
+ [ $# -gt 0 ] && printf '%s\n' "$1" >&2
+ exit 1
+}
+
+
bindir=`finddir $0`
nmhbindir=`cd "$bindir" && pwd`
+nmhlibexecdir=`$nmhbindir/mhparam libexecdir`
+case `printf 'OK\n' | tail -n 1 2>&1` in
+ OK) tail='tail -n ' ;;
+ *) tail='tail -' ;;
+esac
#### Checks for missing mandatory arguments.
checkforargs() {
if [ $attacharg -eq 1 ]; then
- printf 'mhmail: missing argument to -attach\n' >&2; exit 1
+ die 'mhmail: missing argument to -attach'
elif [ $bodyarg -eq 1 ]; then
- printf 'mhmail: missing argument to -body\n' >&2; exit 1
+ die 'mhmail: missing argument to -body'
elif [ $ccarg -eq 1 -a "$cclist"x = x ]; then
- printf 'mhmail: missing argument to -cc\n' >&2; exit 1
+ die 'mhmail: missing argument to -cc'
elif [ $fromarg -eq 1 ]; then
- printf 'mhmail: missing argument to -from\n' >&2; exit 1
+ die 'mhmail: missing argument to -from'
elif [ $headerfieldarg -eq 1 ]; then
- printf 'mhmail: missing argument to -headerfield\n' >&2; exit 1
+ die 'mhmail: missing argument to -headerfield'
elif [ $subjectarg -eq 1 ]; then
- printf 'mhmail: missing argument to -subject\n' >&2; exit 1
+ die 'mhmail: missing argument to -subject'
elif [ $toarg -eq 1 ]; then
- printf 'mhmail: missing argument to -to\n' >&2; exit 1
+ die 'mhmail: missing argument to -to'
fi
}
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
-attachind=Nmh-Attachment ## attachment indicator
+attachind=Attach ## attachment indicator
body= ## contents of the message body
bodyarg=0 ## whether currently handling -body
cclist= ## Cc: addresses
mhmailswitch=1
attacharg=1
use_send=1
- if [ $attach_send_switch_added -eq 0 ]; then
- #### Override any send -attach switch in user's profile.
- postsendargs="${postsendargs:+$postsendargs }-attach $attachind"
- attach_send_switch_added=1
- fi ;;
+ ;;
-b|-bo|-bod|-body) mhmailswitch=1; bodyarg=1 ;;
-c|-cc) mhmailswitch=1; ccarg=1 ;;
-f|-fr|-fro|-from) mhmailswitch=1; fromarg=1 ;;
-hel|-help) printf '%s\n' "$usage"; exit ;;
-nose|-nosen|-nosend) mhmailswitch=1; sendsw=0 ;;
-p|-pr|-pro|-prof|-profi|-profil|-profile) mhmailswitch=1; use_send=1 ;;
- -resend) printf 'mhmail: did you mean -resent instead of -resend?\n' >&2
- exit 1 ;;
+ -resend) die 'mhmail: did you mean -resent instead of -resend?' ;;
-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 ;;
#### It's not strictly necessary to have one space after
#### the : that separates the header field name from the
#### body, but do it to avoid surprising someone.
- add=`printf %s "$arg" | sed -e 's/:/: /' -e 's/: /: /'`
+ #### Solaris sed wants the trailing newline in its input.
+ add=`printf '%s\n' "$arg" | sed -e 's/:/: /' -e 's/: /: /'`
headerfieldlist="${headerfieldlist:+$headerfieldlist}$add
"
headerfieldarg=0
#### Check for at least one address and -from.
if [ "$tolist"x = x ]; then
- printf 'Usage: mhmail [-t(o)] addrs ... [switches]\n' >&2; exit 1
+ die 'Usage: mhmail [-t(o)] addrs ... [switches]'
fi
if [ "$from"x = x ]; then
- nmhlibdir=`$nmhbindir/mhparam libdir`/
- from=`${nmhlibdir}ap -format '%(localmbox)' 0`
+ from=`${nmhlibexecdir}/ap -format '%(localmbox)' 0`
fi
#### Check for missing mandatory arguments.
header="$header$headerfieldlist"
fi
-#### Set up a file to supply as a draft to post/send. And set a
-#### trap to remove it. send moves the file to a backup, so it will
-#### remove that, too.
+#### Set up a file to supply as a draft to post/send. And set a trap
+#### to remove it. send moves the file to a backup and can create a
+#### .orig file, so it will remove them, too.
umask 077
-tmpdir="${MHTMPDIR:-${TMPDIR:-${TMP:-`$nmhbindir/mhpath +`}}}"
-tmpfile="$tmpdir/mhmail$$"
-tmpfilebackup="'$tmpdir'/,mhmail$$ '$tmpdir'/#mhmail$$"
+tmpdir="${MHTMPDIR:-${TMPDIR:-`$nmhbindir/mhpath +`}}"
+tmpfilename=`cd "$tmpdir" && "${nmhlibexecdir}/mkstemp" -p mhmail`
+[ $? -ne 0 ] && die "mhmail: failed to create temporary file in $tmpdir"
+tmpfile="$tmpdir/$tmpfilename"
+backup_char=`"$nmhbindir"/mhparam sbackup`
+tmpfilebackup="$tmpdir/${backup_char}${tmpfilename}*"
tmpfileresent=
message_file=
#### When resending with send, tmpfile will just contain the
#### Resent- header fields. "$tmpfileresent" will contain
#### the message that is being resent.
- tmpfileresent="$tmpdir/mhmail-resent$$"
+ tmpfileresent=`"${nmhlibexecdir}/mkstemp" -d "$tmpdir" -p mhmail-resent`
+ [ $? -ne 0 ] && die "mhmail: failed to create temporary file in $tmpdir"
mhdist=1; export mhdist
mhaltmsg=$tmpfileresent; export mhaltmsg
message_file="$tmpfileresent"
#### Don't allow an empty body (from stdin). Use string
#### comparison so we don't have to strip the filename, etc.
if [ "$tmpfile_size_before" = "$tmpfile_size_after" ]; then
- printf 'mhmail: empty message not sent, use -body '"''"' to force.\n' >&2
- exit 1
+ die 'mhmail: empty message not sent, use -body '"''"' to force.'
fi
#### Add trailing newline to body if it doesn't have one.
- if [ `tail -n 1 "$message_file" | wc -l` -ne 1 ]; then
+ if [ `${tail}1 "$message_file" | wc -l` -ne 1 ]; then
printf '\n' >>"$message_file" || exit 2
fi
else
#### Add trailing newline to body if it doesn't have one.
- [ `printf %s "$body" | tail -n 1 | wc -l` -ne 1 ] && body="$body
+ [ `printf %s "$body" | ${tail}1 | wc -l` -ne 1 ] && body="$body
"
if [ "$tmpfileresent" ]; then