From 0e82199cf3c991a173e0ac8aa776efdb3ded61e6 Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Wed, 8 Feb 2012 17:46:27 +0100 Subject: [PATCH] Replaced sendfiles with a simpler version that uses send instead of viamail. Also moved it from etc/ to uip/. Updated man pages. Note: The splitting of large messages by sendfile/viamail/or elsewhere seems not to be available anymore, although it had been documented in the man page. Either the man pages don't match the code or I've not found this function yet. --- etc/Makefile.in | 30 ++--------- etc/sendfiles.in | 81 ----------------------------- man/mhstore.man1 | 42 +++++++++++++++ man/sendfiles.man1 | 144 +++++++++------------------------------------------- uip/Makefile.in | 8 ++- uip/sendfiles.sh | 35 +++++++++++++ 6 files changed, 113 insertions(+), 227 deletions(-) delete mode 100755 etc/sendfiles.in create mode 100755 uip/sendfiles.sh diff --git a/etc/Makefile.in b/etc/Makefile.in index 5de4e41..10111e7 100644 --- a/etc/Makefile.in +++ b/etc/Makefile.in @@ -42,12 +42,7 @@ STATIC_FILES = components digestcomps distcomps forwcomps \ scan.timely scan.unseen # templates and scripts from which non-static files are generated -GENERATED_FILE_SRCS = mhn.defaults.sh mhn.find.sh sendfiles.in - -# scripts generated using above GENERATED_FILE_SRCs; don't add binaries -# to this list, as they'll get installed with INSTALL_SCRIPT and won't -# be stripped. -GENERATED_BIN_FILES = sendfiles +GENERATED_FILE_SRCS = mhn.defaults.sh mhn.find.sh # non-scripts generated using above GENERATED_FILE_SRCs GENERATED_ETC_FILES = mhn.defaults @@ -60,23 +55,13 @@ DIST = $(STATIC_FILES) $(GENERATED_FILE_SRCS) $(AUX) # ========= DEPENDENCIES FOR BUILDING ========== -all: $(GENERATED_BIN_FILES) $(GENERATED_ETC_FILES) +all: $(GENERATED_ETC_FILES) mhn.defaults: $(srcdir)/mhn.defaults.sh $(MHNSEARCHPROG) rm -f $@ $(srcdir)/mhn.defaults.sh $(MHNSEARCHPATH) $(MHNSEARCHPROG) > $@ -sendfiles: $(srcdir)/sendfiles.in Makefile - rm -f $@ - $(SED) -e 's,%libdir%,$(libdir),' < $(srcdir)/sendfiles.in > $@ - -install: install-bin-files install-etc-files - -install-bin-files: - $(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir) - for script in $(GENERATED_BIN_FILES); do \ - $(INSTALL_SCRIPT) $$script $(DESTDIR)$(bindir)/$$script; \ - done +install: install-etc-files install-etc-files: $(top_srcdir)/mkinstalldirs $(DESTDIR)$(etcdir) @@ -98,12 +83,7 @@ install-etc-files: fi; \ done -uninstall: uninstall-bin-files uninstall-etc-files - -uninstall-bin-files: - for script in $(GENERATED_BIN_FILES); do \ - rm -f $(DESTDIR)$(bindir)/$$script; \ - done +uninstall: uninstall-etc-files uninstall-etc-files: for file in $(STATIC_FILES) $(GENERATED_ETC_FILES); do \ @@ -116,7 +96,7 @@ mostlyclean: rm -f *~ clean: mostlyclean - rm -f $(GENERATED_ETC_FILES) $(GENERATED_BIN_FILES) + rm -f $(GENERATED_ETC_FILES) distclean: clean rm -f Makefile diff --git a/etc/sendfiles.in b/etc/sendfiles.in deleted file mode 100755 index 5582b2a..0000000 --- a/etc/sendfiles.in +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/sh -# -# Send multiples files and/or directories as a tar/compressed -# image, in a MIME message. -# - -FROM= - -# compression method (none, gzip or compress) -METHOD=none -# compression filter -COMPRESS=cat -# uncompression filter -UNCOMPRESS=cat -# compression description to append to content-type -CONVERSION= - -# default compression method based on installed software -# prefer compress over gzip for backward compatibility -if command -v compress >/dev/null 2>&1 ; then - METHOD=compress -elif command -v gzip >/dev/null 2>&1 ; then - METHOD=gzip -fi - -# handle command-line options to override compression method -while [ $# -gt 3 ]; do - case "$1" in - -gzip) - METHOD=gzip - shift - ;; - -compress) - METHOD=compress - shift - ;; - -none) - METHOD=none - shift - ;; - *) - break - ;; - esac -done - -# set variables based on chosen compression method -if [ $METHOD = compress ]; then - COMPRESS=compress - UNCOMPRESS=uncompress - CONVERSION="; x-conversions=compress" -elif [ $METHOD = gzip ]; then - COMPRESS="gzip -c" - UNCOMPRESS="gzip -dc" - CONVERSION="; x-conversions=gzip" -fi - -if [ ! -z "$PERSON" ]; then - FROM="-from $PERSON" -fi - -if [ $# -lt 3 ]; then - echo 'usage: sendfiles: "mailpath" "subject-string" directory-or-file ...' 1>&2 - exit 1; -fi - -mailpath="$1" -echo "mailpath = $mailpath" 1>&2 -shift - -subject="$1" -echo "subject-string = $subject" 1>&2 -shift - -echo "files = $*" 1>&2 - -tar cvf - "$@" | $COMPRESS | \ - %libdir%/viamail -to "$mailpath" -subject "$subject" \ - -parameters "type=tar$CONVERSION" \ - -comment "extract with $UNCOMPRESS | tar xvpf -" \ - -verbose $FROM diff --git a/man/mhstore.man1 b/man/mhstore.man1 index ddb43f8..395b76a 100644 --- a/man/mhstore.man1 +++ b/man/mhstore.man1 @@ -312,6 +312,48 @@ are combined in the correct order. But if can not locate every partial necessary to reassemble the message, it will not store anything. +RE +.PP +By using the +.B \-auto +switch, +.B mhstore +will automatically do the extraction for you: +.PP +.RS 5 +.nf +% mhlist 5-8 + msg part type/subtype size description + 5 message/partial 47K part 1 of 4 + 6 message/partial 47K part 2 of 4 + 7 message/partial 47K part 3 of 4 + 8 message/partial 18K part 4 of 4 +% mhstore 5-8 +reassembling partials 5,6,7,8 to folder inbox as message 9 +% mhlist -verbose 9 + msg part type/subtype size description + 9 application/octet-stream 118K + (extract with uncompress | tar xvpf -) + type=tar + conversions=compress +% mhstore -auto 9 +-- tar listing appears here as files are extracted +.fi +.RE +.PP +As the second +.B tar +listing is generated, the files are extracted. +A prudent user will never put +.B \-auto +in the profile. +The correct procedure is to first use +.B mhlist +to find out what will be extracted. Then +.B mhstore +can be invoked with +.B \-auto +to perform the extraction. .SS "External Access" For contents of type message/external-body, \fImhstore\fR supports these access-types: diff --git a/man/sendfiles.man1 b/man/sendfiles.man1 index a2bf7be..f2015b4 100644 --- a/man/sendfiles.man1 +++ b/man/sendfiles.man1 @@ -3,12 +3,12 @@ .\" .TH SENDFILES %manext1% "%nmhdate%" MH.6.8 [%nmhversion%] .SH NAME -sendfiles \- send multiple files via a MIME message +sendfiles \- send multiple files in a MIME message .SH SYNOPSIS .HP .na .B sendfiles -.I mailpath +.I recipient .I subject .I file1 .RI [ file2 @@ -18,114 +18,15 @@ sendfiles \- send multiple files via a MIME message The shell script .BR sendfiles , is used to send a collection -of files and directories via electronic mail. -.PP -.RS 5 -sendfiles mailpath \*(lqsubject\*(rq files\0... -.RE -.PP -.B sendfiles -will archive the files and directories you name -with the -.B tar -command, and then mail the compressed -archive to the \*(lqmailpath\*(rq with the given \*(lqsubject\*(rq. -.PP -Sometimes you want -.B sendfiles -to pause after posting a partial -message. This is usually the case when you are running -.B sendmail -and expect to generate a lot of partial messages. If the first -argument given to +of files via electronic mail. .B sendfiles -starts with a dash, then it is -interpreted as the number of seconds to pause in between postings, -e.g., -.PP -.RS 5 -sendfiles -30 mailpath \*(lqsubject\*(rq files\0... -.RE -.PP -will pause 30 seconds in between each posting. -.PP -.SS "Extracting the Received Files" -When these messages are received, invoke -.B mhstore -once for -the list of messages. The default is for -.B mhstore -to store -the combined parts as a new message in the current folder, although -this can be changed using storage formatting strings. You can then -use -.B mhlist -to find out what's inside; possibly followed by -.B mhstore -again to write the archive to a file where you can -subsequently uncompress and untar it. For instance: -.PP -.RS 5 -.nf -% mhlist 5-8 - msg part type/subtype size description - 5 message/partial 47K part 1 of 4 - 6 message/partial 47K part 2 of 4 - 7 message/partial 47K part 3 of 4 - 8 message/partial 18K part 4 of 4 -% mhstore 5-8 -reassembling partials 5,6,7,8 to folder inbox as message 9 -% mhlist -verbose 9 - msg part type/subtype size description - 9 application/octet-stream 118K - (extract with uncompress | tar xvpf -) - type=tar - conversions=compress -% mhstore 9 -% uncompress < 9.tar.Z | tar xvpf - -.fi -.RE -.PP -Alternately, by using the -.B \-auto -switch, -.B mhstore -will automatically do the extraction for you: -.PP -.RS 5 -.nf -% mhlist 5-8 - msg part type/subtype size description - 5 message/partial 47K part 1 of 4 - 6 message/partial 47K part 2 of 4 - 7 message/partial 47K part 3 of 4 - 8 message/partial 18K part 4 of 4 -% mhstore 5-8 -reassembling partials 5,6,7,8 to folder inbox as message 9 -% mhlist -verbose 9 - msg part type/subtype size description - 9 application/octet-stream 118K - (extract with uncompress | tar xvpf -) - type=tar - conversions=compress -% mhstore -auto 9 --- tar listing appears here as files are extracted -.fi -.RE +will mail the files in one message with the given \*(lqsubject\*(rq +to the \*(lqrecipient\*(rq. +Take care not to generate too large messages, as there usually are +size limits enforced by the MTAs. .PP -As the second -.B tar -listing is generated, the files are extracted. -A prudent user will never put -.B \-auto -in the profile. -The correct procedure is to first use -.B mhlist -to find out what will be extracted. Then -.B mhstore -can be invoked with -.B \-auto -to perform the extraction. +To extract received files, use +.B mhstore . .SH FILES .fc ^ ~ @@ -135,23 +36,28 @@ to perform the extraction. .fi .SH "PROFILE COMPONENTS" -.fc ^ ~ -.nf -.ta 2.4i -.ta \w'ExtraBigProfileName 'u -^Path:~^To determine the user's mail storage -^Current\-Folder:~^To find the default current folder -.fi +None .SH "SEE ALSO" -mhbuild(1), mhlist(1), mhshow(1), mhstore(1). -.I "Proposed Standard for Message Encapsulation" -(RFC\-934) +send(1), mhlist(1), mhstore(1). .SH DEFAULTS .nf -.RB ` \-noverbose ' .fi .SH CONTEXT None + +.SH HISTORY +.PP +This is a new and simpler version of +.B sendfiles , +which directly invokes +.B send . +The old one had invoked +.B viamail . +The old version had been able to send whole directories, be automatically +tarballing them. This new version is not able to do so. +The old man page had described some kind of automatical splitting of +large content into `message/partial' parts. However, it appears as if this +had been removed earlier, only its documentation remained. diff --git a/uip/Makefile.in b/uip/Makefile.in index 1634f7b..b36bc75 100644 --- a/uip/Makefile.in +++ b/uip/Makefile.in @@ -51,7 +51,7 @@ SETGID_MAIL = @SETGID_MAIL@ # commands to build CMDS = ali anno burst comp dist flist folder forw mmh mark mhbuild \ mhlist mhmail mhparam mhpath mhshow mhstore msgchk \ - new packf pick prompter refile repl rmf rmm scan send show \ + new packf pick prompter refile repl rmf rmm scan send sendfiles show \ sortm whatnow # commands that are links to other commands @@ -74,7 +74,7 @@ SRCS = ali.c aliasbr.c anno.c annosbr.c ap.c burst.c comp.c \ msgchk.c new.c packf.c pick.c picksbr.c \ prompter.c rcvdist.c rcvpack.c rcvstore.c rcvtty.c \ refile.c repl.c replsbr.c rmf.c rmm.c scan.c scansbr.c send.c \ - sendsbr.c show.c slocal.c sortm.c spost.c termsbr.c \ + sendsbr.c sendfiles.sh show.c slocal.c sortm.c spost.c termsbr.c \ whatnow.c whatnowproc.c # auxiliary files @@ -207,6 +207,10 @@ scan: scan.o scansbr.o termsbr.o $(LOCALLIBS) send: send.o sendsbr.o annosbr.o distsbr.o $(LOCALLIBS) $(LINK) send.o sendsbr.o annosbr.o distsbr.o $(LINKLIBS) +sendfiles: sendfiles.sh + cp sendfiles.sh sendfiles + chmod +x sendfiles + show: show.o mhlsbr.o termsbr.o $(LOCALLIBS) $(LINK) show.o mhlsbr.o termsbr.o $(LINKLIBS) $(TERMLIB) diff --git a/uip/sendfiles.sh b/uip/sendfiles.sh new file mode 100755 index 0000000..40d8f72 --- /dev/null +++ b/uip/sendfiles.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Send multiples files non-interactively + +# adjust if needed +attachment_header='Attach' + + +if [ $# -lt 3 ]; then + echo 'usage: sendfiles RECIPIENT SUBJECT FILES...' 1>&2 + exit 1; +fi + +rcpt="$1" +shift +subject="$1" +shift + +cat 1>&2 <"$draft" <>"$draft" +done + +send "$draft" -- 1.7.10.4