Added -attach switch to mhmail.
authorDavid Levine <levinedl@acm.org>
Tue, 19 Jun 2012 15:13:28 +0000 (10:13 -0500)
committerDavid Levine <levinedl@acm.org>
Tue, 19 Jun 2012 15:13:28 +0000 (10:13 -0500)
Makefile.am
man/mhmail.man
test/common.sh.in
test/mhmail/test-mhmail
test/mhparam/test-mhparam
uip/mhmail

index 970eb60..3f56a70 100644 (file)
@@ -226,7 +226,8 @@ EXTRA_DIST = config/version.sh sbr/sigmsg.awk etc/mts.conf.in etc/sendfiles.in \
             man/unseen.man man/whatnow.man man/whom.man \
             test/README $(TESTS) test/inc/deb359167.mbox \
             test/inc/fromline.txt test/inc/msgheader.txt test/inc/filler.txt \
-            test/inc/md5sums test/post/test-post-common.sh uip/mhmail \
+            test/inc/md5sums test/mhmail/attachment.txt \
+            test/post/test-post-common.sh uip/mhmail \
             SPECS/nmh.spec SPECS/build-nmh-cygwin
 
 ##
index 3abd6d3..3b382af 100644 (file)
@@ -10,6 +10,8 @@ mhmail \- send or read mail
 .B mhmail
 .RI [ addrs
 \&...]
+.RB [ \-attach
+.IR file ]
 .RB [ \-body
 .IR text ]
 .RB [ \-cc
@@ -143,6 +145,14 @@ recipient@example.com
 .fi
 .RE
 .PP
+Note about this example:  the
+.B \-attach
+switch causes
+.I MIME-Version
+and
+.I Content-Type
+headers to be added to the message.
+.PP
 The
 .B \-profile
 switch instructs
@@ -154,6 +164,22 @@ instead of
 to send the message.  This allows use of the user's context and aliases.
 .PP
 The
+.B \-attach
+.I file
+switch attaches the specified file to the message.  Use of
+.B \-attach
+enables
+.B \-profile
+because
+.B mhmail
+uses
+.B send
+to handle the attachment.  It is usually best to enclose the argument
+in quotes to protect it from the shell.  The
+.B \-attach
+switch may be given multiple times to add multiple attachments.
+.PP
+The
 .B \-nosend
 option shows the draft file that would be posted/sent on the command's
 standard output but does not post or send it.
@@ -186,7 +212,12 @@ is used.
 dist(1), inc(1), post(8), send(1)
 
 .SH DEFAULTS
+.nf
 .RB ` \-send '
+.fi
+.RB ` \-profile' ,
+enabled by default only with
+.B \-attach
 
 .SH CONTEXT
 If
index e5da52c..aa34927 100644 (file)
@@ -161,6 +161,7 @@ setup_test ()
   mkdir $MH_TEST_DIR/Mail || exit 1
   cat > $MH <<EOF || exit 1
 Path: ${MH_TEST_DIR}/Mail
+buildmimeproc: ${MH_INST_DIR}${bindir}/mhbuild
 libdir: ${MH_LIB_DIR}
 mhlproc: ${MH_LIB_DIR}/mhl
 moreproc: cat
index 422c647..e8fbac8 100755 (executable)
@@ -57,7 +57,8 @@ test_mhmail ()
 
     sed -e 's/^Date:.*/Date:/' \
         -e 's/^Resent-Date:.*/Resent-Date:/' \
-        -e 's/^Message-ID:.*/Message-ID:/' "$actual" > "$actual".nodate
+        -e 's/^Message-ID:.*/Message-ID:/' \
+        -e 's/^Content-ID:.*/Content-ID:/' "$actual" > "$actual".nodate
     rm -f "$actual"
 
     check "$actual".nodate "$1"
@@ -74,6 +75,7 @@ actual_err=$MH_TEST_DIR/test-mhmail$$.actual_err
 cat >$expected <<EOF
 Usage: mhmail [addrs ... [switches]]
   switches are:
+  -at(tach) file [-at(tach) file] ...
   -b(ody) text
   -c(c) addrs ...
   -f(rom) addr
@@ -740,4 +742,45 @@ test_mhmail "$expected" \
 [ ${failed:-0} -eq 0 ] || exit ${failed:-0}
 
 
+# check -attach
+# Not supported by compiled mhmail.
+cat > "$expected" <<EOF
+EHLO nosuchhost.example.com
+MAIL FROM:<sender@example.com>
+RCPT TO:<recipient@example.com>
+DATA
+To: recipient@example.com
+From: sender@example.com
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+Content-ID:
+Date:
+Message-ID:
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="us-ascii"
+
+See how easy it is to add an attachment!
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; name="attachment.txt"; charset="us-ascii"
+Content-Description: attachment.txt
+Content-Disposition: attachment; filename="attachment.txt"
+
+The future disappears into memory, With only a moment between,
+Forever dwells in that moment, hope is what remains to be seen
+Forever dwells in that moment, hope is what remains to be seen.
+
+------- =_aaaaaaaaaa0--
+.
+QUIT
+EOF
+
+test_mhmail "$expected" \
+  "-from sender@example.com -attach ${srcdir}/test/mhmail/attachment.txt" \
+  -b 'See how easy it is to add an attachment!'
+
+[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
+
+
 exit ${failed:-0}
index cde481c..a56945c 100755 (executable)
@@ -79,7 +79,7 @@ AliasFile: aliases"
 cat >$expected <<EOF
 context
 .mh_sequences
-$bindir/mhbuild
+$MH_INST_DIR$bindir/mhbuild
 $MH_INST_DIR$bindir/refile
 700
 $bindir/inc
index 235eeba..bcb9bd3 100755 (executable)
@@ -7,21 +7,19 @@
 # complete copyright information.
 #
 # Emulation of compiled mhmail(1), with these differences:
-# * Instead of silently not sending an empty message, notifies user
-#   "mhmail: empty message not sent, use -body '' to force."
-# * The compiled mhmail dropped a trailing newline from the -body argument.
+# * Adds -send/-nosend, -header-field, and -attach options.
 # * Supports all post(8) (by default, without -profile) or send(1)
 #   (with -profile) options.
 # * Optionally (with -profile) obeys the users profile, including
 #   AliasFile and send entries.
-# * Adds -send/-nosend and -header-field options.
+# * Instead of silently not sending an empty message, notifies user
+#   "mhmail: empty message not sent, use -body '' to force."
+# * The compiled mhmail dropped a trailing newline from the -body argument.
 # * Drops support for undocumented -queue option.
-#
-# To do:
-# * add -attach file ... switch
 
 usage='Usage: mhmail [addrs ... [switches]]
   switches are:
+  -at(tach) file [-at(tach) file] ...
   -b(ody) text
   -c(c) addrs ...
   -f(rom) addr
@@ -44,6 +42,8 @@ if [ $# -eq 0 ]; then
 else
   #### Go through all the switches so we can build the draft.
   tolist=
+  attacharg=0
+  attach_send_switch_added=0
   body=
   bodyarg=0
   cclist=
@@ -69,7 +69,18 @@ else
       #### ambiguous, so no conflicts with them.  And they don't have
       #### -b, -c, or -r.  For the new switches that compiled mhmail
       #### didn't have:  let -p indicate mhmail -profile, not send
-      #### -port.  -send masks the send(1) -send switch.
+      #### -port.  -send masks the send(1) -send switch.  -attach
+      #### masks the send(1) -attach switch.
+      -at|-att|-atta|-attac|-attach)
+         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 Nmh-Attachment"
+           attach_send_switch_added=1
+         fi
+         ;;
       -b|-bo|-bod|-body) bodyarg=1 ;;
       -c|-cc) ccarg=1 ;;
       -f|-fr|-fro|-from) fromarg=1 ;;
@@ -99,6 +110,11 @@ else
          elif [ ${subjectarg} -eq 1 ]; then
            subject="${arg}"
            subjectarg=0
+         elif [ ${attacharg} -eq 1 ]; then
+           headerfieldlist="${headerfieldlist:+${headerfieldlist}}\
+Nmh-Attachment: ${arg}
+"
+           attacharg=0
          elif [ ${headerfieldarg} -eq 1 ]; then
            #### It's not strictly necessary to have one space after
            #### the : that separates the header field name from the