Allow optional -to in front of To: addresses with mhmail.
authorDavid Levine <levinedl@acm.org>
Sat, 23 Jun 2012 14:55:01 +0000 (09:55 -0500)
committerDavid Levine <levinedl@acm.org>
Sat, 23 Jun 2012 14:55:01 +0000 (09:55 -0500)
man/mhmail.man
test/mhmail/test-mhmail
uip/mhmail

index a374b3d..6eacf16 100644 (file)
@@ -8,8 +8,9 @@ mhmail \- send or read mail
 .HP 5
 .na
 .B mhmail
-.RI [ addrs
-\&...]
+.RB [ \-to ]
+.RI addrs
+\&...
 .RB [ \-attach
 .IR file ]
 .RB [ \-body
@@ -34,6 +35,11 @@ mhmail \- send or read mail
 .RB [ \-send " | " \-nosend ]
 .RB [ \-version ]
 .RB [ \-help ]
+.PP
+.HP 5
+.B mhmail
+with no arguments is equivalent to
+.B inc
 .ad
 .SH DESCRIPTION
 .B mhmail
@@ -46,8 +52,8 @@ which is compatible with
 .BR nmh .
 This program is intended for the use of programs such as
 .BR cron ,
-which expect to send mail automatically to various
-users.  It is also used by various
+which expect to send mail automatically to various addresses.  It is
+also used by various
 .B nmh
 commands to mail various
 error notifications.  Although
@@ -61,15 +67,15 @@ be used instead to send messages.
 .PP
 When invoked without arguments, it simply invokes
 .B inc
-to incorporate new messages from the user's maildrop.  When one or more users
-is specified, a message is read from the standard input and spooled to
-a temporary file.
+to incorporate new messages from the user's maildrop.
+.PP
+When one or more addresses are specified, a message is read from the
+standard input and spooled to a temporary file.
 .B mhmail
 then invokes
-.B post
-with the
-name of the temporary file as its argument to deliver the message to
-the specified user.
+.BR post ,
+by default, with the name of the temporary file as its argument to
+deliver the message to the specified address.
 .PP
 The
 .B \-subject
@@ -109,7 +115,16 @@ field.  At least one such address is required when sending a message,
 i.e., if any other switches are supplied. If the
 .B \-cc
 switch is used, all addresses following it, even if there are
-intervening switches, are placed in the \*(lqcc:\*(rq field.
+intervening switches other than
+.BR \-to ,
+are placed in the \*(lqcc:\*(rq field.  The optional
+.B \-to
+switch can appear in front of any addresses to signify their placement
+in the \*(lqTo:\*(rq field.  The
+.B \-to
+and
+.B \-cc
+switches may be given multiple times.
 .PP
 By using
 .B \-from
index 80e95c5..5a7117b 100755 (executable)
@@ -73,7 +73,7 @@ actual_err=$MH_TEST_DIR/test-mhmail$$.actual_err
 # check -help
 # Verified behavior consistent with compiled sendmail.
 cat >$expected <<EOF
-Usage: mhmail [addrs ... [switches]]
+Usage: mhmail [-t(o)] addrs ... [switches]
   switches are:
   -at(tach) file [-at(tach) file] ...
   -b(ody) text
@@ -88,6 +88,7 @@ Usage: mhmail [addrs ... [switches]]
   -v(ersion)
   -hel(p)
   and all post(8)/send(1) switches
+  mhmail with no arguments is equivalent to inc
 EOF
 
 mhmail -help >$actual 2>&1
@@ -103,21 +104,21 @@ case `mhmail -v` in
 esac
 
 # check for missing argument to switches that require them
-for switch in attach body cc from headerfield subject; do
+for switch in attach body cc from headerfield subject to; do
   run_test "mhmail recipient -$switch" \
            "mhmail: missing argument to -$switch"
 done
-for switch in attach body cc from headerfield subject; do
+for switch in attach body cc from headerfield subject to; do
   run_test "mhmail recipient -$switch -nosend" \
            "mhmail: missing argument to -$switch"
 done
-for switch in attach body cc from headerfield subject; do
+for switch in attach body cc from headerfield subject to; do
   run_test "mhmail recipient -$switch -server 127.0.0.1" \
            "mhmail: missing argument to -$switch"
 done
 
 
-# check with no arguments
+# check with no switches
 # That will just run inc, which we don't want to do anything,
 # so tell inc to just display its version.
 # Verified same behavior as compiled mhmail.
@@ -308,7 +309,7 @@ test_mhmail "$expected" '-from sender@localhost -profile' '|' message
 [ ${failed:-0} -eq 0 ] || exit ${failed:-0}
 
 
-# check repeated -from and -subject arguments
+# check repeated -from and -subject switches
 # Verified same behavior as compiled mhmail.
 cat > "$expected" <<EOF
 EHLO nosuchhost.example.com
@@ -329,7 +330,7 @@ test_mhmail "$expected" '-from sender@localhost -from sender2@localhost '\
 '-subject Subject1 -subject Subject2' -b message
 [ ${failed:-0} -eq 0 ] || exit ${failed:-0}
 
-# check repeated -body arguments
+# check repeated -body switches
 # Verified same behavior as compiled mhmail.
 cat > "$expected" <<EOF
 EHLO nosuchhost.example.com
@@ -349,7 +350,7 @@ test_mhmail "$expected" "-from sender@localhost -body body1" -b body2
 [ ${failed:-0} -eq 0 ] || exit ${failed:-0}
 
 
-# check multiple -cc arguments
+# check multiple -cc switches
 # Verified same behavior as compiled mhmail.
 cat > "$expected" <<EOF
 EHLO nosuchhost.example.com
@@ -399,6 +400,33 @@ test_mhmail "$expected" \
 [ ${failed:-0} -eq 0 ] || exit ${failed:-0}
 
 
+# check -cc switch followed by -to switch
+# Verified same behavior as compiled mhmail.
+cat > "$expected" <<EOF
+EHLO nosuchhost.example.com
+MAIL FROM:<sender@localhost>
+RCPT TO:<recipient@example.com>
+RCPT TO:<recipient2@example.com>
+RCPT TO:<cc1@example.com>
+DATA
+To: recipient@example.com, recipient2@example.com
+Cc: cc1@example.com
+Subject: Test
+From: sender@localhost
+Date:
+
+message
+.
+QUIT
+EOF
+
+test_mhmail "$expected" \
+  "-from sender@localhost -cc cc1@example.com -subject Test \
+   -to recipient2@example.com" \
+  -b message
+[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
+
+
 # check with no newline on stdin
 # Shows different behavior than compiled mhmail, which was silent in this case.
 cat > "$expected" <<EOF
index 6a91600..bfcfe89 100755 (executable)
@@ -8,6 +8,7 @@
 #
 # 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
@@ -17,7 +18,7 @@
 # * 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
@@ -31,7 +32,8 @@ usage='Usage: mhmail [addrs ... [switches]]
   -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`
 nmhbindir=`cd "${bindir}" && pwd`
@@ -50,6 +52,8 @@ checkforargs() {
     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
 }
 
@@ -59,6 +63,7 @@ if [ $# -eq 0 ]; then
 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
@@ -108,6 +113,7 @@ else
       -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 ;;
@@ -147,11 +153,12 @@ Nmh-Attachment: ${arg}
          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