#!/bin/bash
# run it using socat:
# socat TCP4-LISTEN:25,fork EXEC:./script
# or the more secure version:
# socat TCP4-LISTEN:25,fork,tcpwrap=myscriptname EXEC:./script,chroot=/home/sandbox,su-d=sandbox,stderr 

MAILSERVER=smtp.srv.lan

process(){

	ERROR=""
	if [ "`cat $TMPFILE|grep ^/|grep -v Ready`" != "" ]; then
	        ERROR="[Dest.Error] $ERROR"
	fi

	if [ "`cat $TMPFILE|grep 'Failed to Back Up'|sed 's/.*: //g'|tr -d '\n'|tr -d '\r'`" != "0" ]; then
	        ERROR="[ERROR1] $ERROR"
	fi

	if [ "`cat $TMPFILE|grep 'Not Backed Up'|sed 's/.*: //g'|tr -d '\n'|tr -d '\r'`" != "0" ]; then
	        ERROR="[ERROR2] $ERROR"
	fi

	if [ "`cat $TMPFILE|grep 'Non-Backup Related Warnings and Errors'|sed 's/.*: //g'|tr -d '\n'|tr -d '\r'`" != "0" ]; then
	        ERROR="[Warning] $ERROR"
	fi

	bu="`cat $TMPFILE|grep 'Successfully Backed Up'|sed 's/.*://g'|tr -d '\n'|tr -d '\r'|tr -d ' '`"
	sfb="`cat $TMPFILE|grep 'Selected for Backup'|sed 's/.*://g'|tr -d '\n'|tr -d '\r'|tr -d ' '`"

	if [ "$bu" != "$sfb" ]; then
	        ERROR="[ERROR][$bu/$sfb] Success!=Selected | $ERROR"
	fi

	cat $TMPFILE|grep -v "For more information" > $TMPFILE2 && cat $TMPFILE2 > $TMPFILE
	subject=`grep "^Subject:" $TMPFILE | grep "^Subject:" | sed "s/^Subject: //g"|sed "s;^=?utf-8?B?;;g"|sed "s;?=$;;g"`
	subject=`echo "$subject"|base64 -d 2>/dev/null`
	subject=`echo "$ERROR$subject"|sed "s; Data Recovery;DR;"|sed "s; VMware Data Recovery 2.0;;g"`
	sed -i "s/^Subject: .*/Subject: $subject/g" $TMPFILE

}


datamode=0

TMPFILE=`mktemp /tmp/smtpproxy.$RANDOM.XXXXXX` || exit 1
TMPFILE2=`mktemp /tmp/smtpproxy.$RANDOM.XXXXXX` || exit 1
trap "{ rm -f $TMPFILE $TMPFILE2 ; exit 255; }" 0 1 2 13 15

exec 3<>/dev/tcp/$MAILSERVER/25
cat <&3 &

while [ true ]; do

	read inp


	inp2=`echo $inp|sed "s/[\r\n]*//g"`
	#echo -ne "$inp2" > /tmp/tempje

	if [ "$inp2" == "." ]; then
		datamode=0
		process
		cat $TMPFILE >&3
	fi

	if [ $datamode -eq 1 ]; then
		echo $inp >> $TMPFILE
	else
		echo $inp >&3
	fi


	if [ "$inp2" == 'DATA' ]; then
		datamode=1
	fi

	if [ "$inp2" == "QUIT" ]; then
		exit 0
	fi
done

