ACC SHELL
#!/bin/sh
# Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)
#
# Permission to use, copy, modify, and distribute this material
# for any purpose and without fee is hereby granted, provided
# that the above copyright notice and this permission notice
# appear in all copies, and that the name of Bellcore not be
# used in advertising or publicity pertaining to this
# material without the specific, prior written permission
# of an authorized representative of Bellcore. BELLCORE
# MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
# OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS",
# WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
# Conversion from C shell to Bourne shell by Z-Code Software Corp.
# Conversion Copyright (c) 1992 Z-Code Software Corp.
# Permission to use, copy, modify, and distribute this material
# for any purpose and without fee is hereby granted, provided
# that the above copyright notice and this permission notice
# appear in all copies, and that the name of Z-Code Software not
# be used in advertising or publicity pertaining to this
# material without the specific, prior written permission
# of an authorized representative of Z-Code. Z-CODE SOFTWARE
# MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
# OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS",
# WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
# Brought into line with metamail 2.7 beta release Csh version
# Dave Shield February 1994
if [ -z "$METAMAIL_TMPDIR" ]
then METAMAIL_TMPDIR=${TMPDIR:-"/tmp"}
fi
hname=`hostname -f`
idctr=0
MustDelete=0
batchmode=0
multipart=1
if test ! -z "${SPLITSIZE:-}"
then
splitsize=$SPLITSIZE
else
splitsize=100000
fi
if date --rfc-822 > /dev/null 2>&1
then
d="--rfc-822"
else
LC_TIME=POSIX
export LC_TIME
d="+%a, %e %b %Y %T %z"
fi
ouputfile=""
multipartsubtype="mixed"
cdescrip="An object packed by metasend"
isentity=0
newid=`date ${d+"$d"}| tr " :" "__"`
cid="<${newid}_$idctr@${hname}>"
idctr=`expr $idctr + 1`
while test ! -z "$*"
do
case $1 in
-S) shift
if test -z "$*"
then
echo "-S requires a following argument, the SPLIT threshhold"
exit 1
fi
splitsize=$1
shift ;;
-b) batchmode=1
shift ;;
-c) shift
if test -z "$*"
then
echo "-c requires a following argument, the CC address"
exit 1
fi
cc=$1
shift ;;
-i) shift
if test -z "$*"
then
echo "-i requires a following argument, the Content-ID value"
exit 1
fi
cid=$1
shift ;;
-I) shift
if test -z "$*"
then
echo "-I requires a following argument, the multipart Content-ID value"
exit 1
fi
multicid=$1
shift ;;
-s) shift
if test -z "$*"
then
echo "-s requires a following argument, the SUBJECT"
exit 1
fi
subject=$1
shift ;;
-t) shift
if test -z "$*"
then
echo "-t requires a following argument, the TO address"
exit 1
fi
to=$1
shift ;;
-F) shift
if test -z "$*"
then
echo "-F requires a following argument, the FROM address"
exit 1
fi
from=$1
shift ;;
-P) shift
if test -z "$*"
then
echo "-P requires a following argument, the preamble file name"
exit 1
fi
preamblefile=$1
shift ;;
-e) shift
if test -z "$*"
then
echo "-e requires a following argument, the ENCODING value"
exit 1
fi
encode=$1
case "$encode" in
"base64") encodingprog="mimencode -b";;
"x-uue") encodingprog="uuencode \$datafile";;
"7bit") encodingprog=cat;;
*) encodingprog="mimencode -q"
encode=quoted-printable ;;
esac
shift ;;
-f) shift
if test -z "$*"
then
echo "-f requires a following argument, the DATA FILE"
exit 1
fi
datafile=$1
if test ! -r $datafile
then
echo The file $datafile does not exist
exit 1
fi
shift ;;
-m) shift
if test -z "$*"
then
echo "-m requires a following argument, the MIME CONTENT-TYPE"
exit 1
fi
ctype=$1
if test "`echo $ctype | grep /`" = ""
then
echo Invalid content-type specified
exit 1
fi
shift ;;
-o) shift
if test -z "$*"
then
echo "-o requires a following argument, the output file name"
exit 1
fi
outputfile=$1
shift ;;
-/) shift
if test -z "$*"
then
echo "-/ requires a following argument, the multipart subtype"
exit 1
fi
multipartsubtype=$1
shift ;;
-D) shift
if test -z "$*"
then
echo "-D requires a following argument, the Content-Description value"
exit 1
fi
cdescrip=$1
shift ;;
-E) isentity=1
shift ;;
-z) MustDelete=1
shift ;;
-n) if test $isentity -ne 0
then
if test -z "${encode:-}"
then
encode=7bit
encodingprog=cat
fi
if test -z "${ctype:-}"
then
ctype=bogus
# Never used
fi
if test -z "${datafile:-}"
then
echo One part is incomplete -- each part needs at least -f and -E
exit 1
fi
else
if test -z "${ctype:-}" || test -z "${datafile:-}"
then
echo One part is incomplete -- each part needs at least -f and -m
exit 1
fi
fi
if test -z "${encode:-}"
then
case "$ctype" in
text*) encodingprog="mimencode -q"
encode=quoted-printable ;;
*) encodingprog="mimencode -b"
encode=base64 ;;
esac
fi
eval ctype${multipart}=\"$ctype\"
eval datafile${multipart}=$datafile
eval encode${multipart}=$encode
eval cdescrip${multipart}=\"$cdescrip\"
eval cid${multipart}=\"$cid\"
eval isentity${multipart}=$isentity
eval encodingprog${multipart}=\"\$encodingprog\"
ctype=""
datafile=""
encode=""
encodingprog=""
newid=`date ${d+"$d"}| tr " :" "__"`
cid="<${newid}_$idctr@${hname}>"
idctr=`expr $idctr + 1`
cdescrip="An object packed by metasend"
isentity=0
multipart=`expr $multipart + 1`
shift ;;
*) echo UNRECOGNIZED METASEND OPTION: $1
exit 1 ;;
esac
done
if test $batchmode -eq 0
then
if test -z "${to:-}"
then
echo -n "To: "
read to
fi
if test -z "${subject:-}"
then
echo -n "Subject: "
read subject
fi
if test -z "${cc:-}"
then
echo -n "CC: "
read cc
fi
anotherpart=1
while test $anotherpart -eq 1
do
looping=1
while test $looping -ne 0
do
if test -z "${ctype:-}"
then
echo -n "Content-type: "
read ctype
fi
if test "`echo $ctype | grep /`" = ""
then
echo Invalid content-type specified
ctype=""
else
looping=0
fi
done
if test -z "${datafile:-}"
then
looping=1
while test $looping -eq 1
do
echo -n "Name of file containing $ctype data: "
read datafile
if test -r "$datafile"
then
looping=0
else
echo "The file $datafile does not exist."
fi
done
fi
if test -z "${encode:-}"
then
looping=1
while test $looping -eq 1
do
echo "Do you want to encode this data for sending through the mail?"
echo " 1 -- No, it is already in 7 bit ASCII"
echo " 2 -- Yes, encode in base64 (most efficient)"
echo " 3 -- Yes, encode in quoted-printable (less efficient, more readable)"
echo " 4 -- Yes, encode it using uuencode (not standard, being phased out)"
read encode
looping=0
case "$encode" in
1) encodingprog=cat
encode=7bit ;;
2) encodingprog="mimencode -b"
encode=base64 ;;
3) encodingprog="mimencode -q"
encode=quoted-printable ;;
4) encodingprog="uuencode $datafile"
encode=x-uue ;;
*) echo Unrecognized answer, please try again.
looping=1 ;;
esac
done
fi
echo -n "Do you want to include another file too (y/n) [n] ? "
read ans
case $ans in
[Yy]*)
eval ctype${multipart}=\"$ctype\"
eval datafile${multipart}=$datafile
eval encode${multipart}=$encode
eval encodingprog${multipart}=\"\$encodingprog\"
eval cdescrip${multipart}=\"$cdescrip\"
eval cid${multipart}=\"$cid\"
eval isentity${multipart}=$isentity
cdescrip="An object packed by metasend"
isentity=0
ctype=""
datafile=""
encode=""
encodingprog=""
newid=`date ${d+"$d"}| tr " :" "__"`
cid="<${newid}_$idctr@${hname}>"
idctr=`expr $idctr + 1`
multipart=`expr $multipart + 1`
;;
*)
anotherpart=0;;
esac
done
else
if test -z "${outputfile:-}"
then
if test -z "${to:-}" \
-o -z "${subject:-}" \
-o -z "${ctype:-}" \
-o -z "${datafile:-}"
then
echo "metasend: in batch mode, if output is not directed to a file, -t, -s, -f, and -m are all required"
exit 1
fi
else
if test -z "${datafile:-}"
then
echo "metasend: in batch mode, -f is required."
exit 1
fi
if test $isentity -ne 0
then
if test -z "${ctype:-}"
then
ctype=bogus
# will not be used anyway
fi
fi
if test -z "${ctype:-}"
then
echo "metasend: in batch mode, with output directed to a file, -E or -m is required."
exit 1
fi
fi
if test ! -r $datafile
then
echo "metasend: The file $datafile does not exist"
exit 1
fi
# if test -z "${cc:-}"
# then
# cc=''
# fi
if test -z "${encode:-}"
then
case "$ctype" in
text*) encodingprog="mimencode -q"
encode=quoted-printable ;;
*) encodingprog="mimencode -b"
encode=base64 ;;
esac
else
case "$encode" in
base64) encodingprog="mimencode -b" ;;
x-uue) encodingprog="uuencode $datafile" ;;
7bit) encodingprog=cat ;;
*) encodingprog="mimencode -q"
encode=quoted-printable ;;
esac
fi
fi
if test -z "${encode:-}"
then
case "$ctype" in
text*) encodingprog="mimencode -q"
encode=quoted-printable ;;
*) encodingprog="mimencode -b"
encode=base64 ;;
esac
fi
eval ctype${multipart}=\"$ctype\"
eval datafile${multipart}=$datafile
eval encode${multipart}=$encode
eval cdescrip${multipart}=\"$cdescrip\"
eval cid${multipart}=\"$cid\"
eval isentity${multipart}=$isentity
eval encodingprog${multipart}=\"\$encodingprog\"
if [ -n "`type -p mktemp`" ] ; then
fname=`mktemp $METAMAIL_TMPDIR/metasend.XXXXXX` || exit 1
echo "MIME-Version: 1.0" > $fname
else
fname=$METAMAIL_TMPDIR/metasend.$$
rm -f $fname
set -Ce
echo "MIME-Version: 1.0" > $fname
set +Ce
fi
trap "rm -f $fname" 0 1 2 3 7 13 15
if test ! -z "${to:-}"
then echo "To: $to" >> $fname
fi
if test ! -z "${subject:-}"
then echo "Subject: $subject" >> $fname
fi
if test ! -z "${cc:-}"
then echo "CC: $cc" >> $fname
fi
if test ! -z "${from:-}"
then echo "From: $from" >> $fname
fi
if test $multipart -gt 1
then
boundary=${hname}.$$.`date ${d+"$d"}| tr " " .`
newid=`date ${d+"$d"}| tr " :" "__"`
if test ! -z "${multicid:-}"
then
echo "Content-ID: $multicid" >> $fname
else
echo "Content-ID: ${newid}_$idctr@${hname}" >> $fname
idctr=`expr $idctr + 1`
fi
echo "Content-type: multipart/$multipartsubtype;" >> $fname
echo " boundary="\"$boundary\" >> $fname
echo "" >> $fname
if test ! -z "${preamblefile:-}"
then
cat $preamblefile >> $fname
else
echo "This is a multimedia message in MIME format. If you are reading this" >> $fname
echo "prefix, your mail reader does not understand MIME. You may wish" >> $fname
echo "to look into upgrading to a newer version of your mail reader." >> $fname
fi
i=1
while test $multipart -ge $i
do
echo "" >> $fname
echo --$boundary >> $fname
eval isentity=\$isentity$i
if test $isentity -eq 0
then
eval echo "Content-ID: \$cid$i" >> $fname
eval echo "Content-type: \$ctype$i" >> $fname
eval echo "Content-Description: \$cdescrip$i" >> $fname
eval echo "Content-Transfer-Encoding: \$encode$i" >> $fname
echo "" >> $fname
fi
eval \$encodingprog$i \< \$datafile$i \>\> $fname
i=`expr $i + 1`
done
echo "" >> $fname
echo --${boundary}-- >> $fname
echo "" >> $fname
else
if test $isentity -eq 0
then
echo "Content-ID: $cid" >> $fname
echo "Content-type: $ctype" >> $fname
echo "Content-Description: $cdescrip" >> $fname
echo "Content-Transfer-Encoding: $encode" >> $fname
fi
echo "" >> $fname
$encodingprog < $datafile >> $fname
# Ensure last line has trailing carriage return
echo "" >> $fname
fi
if test -z "${outputfile:-}"
then
if test $batchmode = 0
then
echo -n "Delivering mail, please wait... "
fi
splitmail -s $splitsize -d $fname
if test $? -eq 0
then
if test $batchmode = 0
then
echo "Mail delivery apparently succeeded."
fi
rm -f $fname
elif test "$MustDelete" -eq 1
then
echo Mail delivery failed
rm -f $fname
exit -1
else
echo "Mail delivery failed, draft mail is in $fname"
exit -1
fi
else
mv $fname $outputfile
if test $? -ne 0
then
exit -1
fi
fi
exit 0
ACC SHELL 2018