#!/bin/sh
# Simple mail program.
#
# Usage: ./sendmail from_address to_address[,to_address,...]
#
# If SMTP_RELAY	environment variable is not set, script tries to
# determine mail relay for every address using dig.

expect() {	# (expected_code)
	code=$1
	read reply
	if [ -z "$reply" ] ; then
		echo "empty reply">&2
		exit 1
	fi
	IFS=" " && set $reply
	if [ "$1" != "$code" ] ; then
		echo "mismatch: $code $reply" >&2
		echo QUIT
		cat > /dev/null
		exit 1
	fi
}

if [ $# = "2" ] ; then
	export SMTP_FROM="$1"
	export SMTP_FILE=/tmp/smtp.$$
	myself=$0
	IFS="," && set $2
	trap "rm -f $SMTP_FILE" EXIT
	echo "enter mail, end with ^D" >&2
	cat > $SMTP_FILE
	for a in $* ; do
		if [ -z "$SMTP_RELAY" ] ; then
			mx=`dig ${a#*@} mx | sed -ne '/IN MX/{s/.* \(.*\)\.$/\1/;p;q;}'`
		else
			mx=$SMTP_RELAY
		fi 
		if [ -z "$mx" ] ; then
			echo "Cannot get MX for $a" >&2
			continue
		fi
		export SMTP_TO=$a
		echo "sending to $a via $mx" >&2
		spipe -e $myself $mx 25
	done
elif [ $# = "0" ] && [ $SMTP_TO ] && [ $SMTP_FROM ] && [ $SMTP_FILE ]; then
	expect 220
	echo "HELO me"
	expect 250
	echo "MAIL FROM: <$SMTP_FROM>"
	expect 250
	echo "RCPT TO: $SMTP_TO"
	expect 250
	echo "DATA"
	expect 354
	cat $SMTP_FILE | sed 's/^\.$/\.\./'
	echo "."
	expect 250
	echo "QUIT"
	cat > /dev/null
	exit 0
else
	echo "usage: $0 from_address to_address[,to_address2, ...]"
	exit 1
fi
