#!/usr/bin/env bash
#
# Author: Gerwin Klein, TU Muenchen
#
# DESCRIPTION: send email with text attachments.
# (works for "mail" command of SunOS 5.8)
#
PRG="$(basename "$0")"
MIME_BOUNDARY="==PM_=_37427935"
function usage()
{
echo
echo "Usage: $PRG subject recipient <body> [<attachments>]"
echo
echo " Send email with text attachments. <body> is a file."
echo
exit 1
}
function fail()
{
echo "$1" >&2
exit 2
}
#
# print_attachment <file>
#
# print mime "encoded" <file> to stdout (text/plain, 8bit)
#
function print_attachment()
{
local FILE=$1
local NAME=${FILE##*/}
cat <<EOF
--$MIME_BOUNDARY
Content-Type: text/plain
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="$NAME"
EOF
cat $FILE
echo
}
#
# print_body subject <message-file> [<attachments>]
#
# prints mime "encoded" message with text attachments to stdout
#
function print_body()
{
local SUBJECT=$1
local BODY=$2
shift 2
cat <<EOF
Subject: $SUBJECT
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="$MIME_BOUNDARY"
--$MIME_BOUNDARY
Content-Type: text/plain
Content-Transfer-Encoding: 8bit
EOF
cat $BODY
echo
for a in $@; do print_attachment $a; done
echo "--$MIME_BOUNDARY--"
echo
}
## main
# argument checking
[ "$1" = "-?" ] && usage
[ "$#" -lt "3" ] && usage
SUBJECT="$1"
TO="$2"
BODY="$3"
shift 3
[ -r "$BODY" ] || fail "could not read $BODY"
case `uname` in
Linux) for F in $@; do ATTACH="$ATTACH -a $F"; done
cat "$BODY" | mail -s "$SUBJECT" $ATTACH "$TO"
;;
SunOS)
print_body "$SUBJECT" "$BODY" $@ | mail -t "$TO"
;;
esac