#!/bin/bash

function usage()
{
	echo "Usage: $0 [email] [today - x days | logfilename] [from/to] [all/in/out]"
}

if [ $# -lt 1 ]; then
	echo "ERROR: no email address defined"
	usage
	exit 200
fi

EMAIL="$1"
DAYS="$2"
FROMTO="$3"
DIRECTION="$4"

if [ -z "$EMAIL" ]; then
	EM_REGEX=""
else
	EM_REGEX=".*${EMAIL}[^>]*"
fi

LOGS=/var/log/mail.log

if ! [ -z "$DAYS" -o "x$DAYS" == "x0" ]; then

	if [ -f $DAYS ]; then
		LOGS="$DAYS"
	elif (echo "$DAYS" |grep '^[0-9]*$' >/dev/null); then
		ZLOGS=`find /var/log/ -name "mail.log-*.gz" -mtime -$DAYS |sort`
		ZNLOGS=`find /var/log/ -name "mail.log.*.gz" -mtime -$DAYS |sort -r`
		LOGS="$ZNLOGS $ZLOGS $LOGS"
	else
		echo "ERROR: '$DAYS' is not a number | logfile not found: '$DAYS'"
		usage
		exit 201
	fi

fi

echo -n "[ Mail logs: "
echo -n $LOGS
echo " ]"

if [ "x$DIRECTION" == "xout" ]; then
	relayed_mails=`zgrep -hE "postfix[a-z\-]*\/smtp" $LOGS |grep 'relay=' |grep -v 'relay=\(dovecot\|127.0.0.1\)' |sed -e "s/^.*smtp\[[0-9]*\]\: \([0-9A-F]*\)\:.*/\1/" |uniq`
elif [ "x$DIRECTION" == "xin" ]; then
	relayed_mails=`zgrep -hE "postfix[a-z\-]*\/smtp" $LOGS |grep 'relay=\(dovecot\|127.0.0.1\)' |sed -e "s/^.*smtp\[[0-9]*\]\: \([0-9A-F]*\)\:.*/\1/" |uniq`
else
	relayed_mails=""
fi


if [ "x$FROMTO" == "xto" ]; then
#	sentmails=`zgrep postfix $LOGS |grep "to=<.*${EMAIL}[^>]*>" |grep "status=sent" | sed -e "s/^.*postfix[^[:space:]]* \([0-9A-F]*\)\:.*/\1/" |uniq`
	sentmails=`zgrep postfix $LOGS |grep 'status=' |grep "to=<${EM_REGEX}>" |sed -e "s/^.*postfix[^[:space:]]* \([0-9A-F]*\)\:.*/\1/" |uniq`
else
#	sentmails=`zgrep postfix $LOGS |grep "from=<.*${EMAIL}[^>]*>" |grep qmgr |sed -e "s/^.*qmgr\[[0-9]*\]\: \([0-9A-F]*\)\:.*/\1/" |uniq`
#	sentmails=`zgrep postfix $LOGS |grep "from=<${EM_REGEX}>" |grep qmgr |sed -e "s/^.*qmgr\[[0-9]*\]\: \([0-9A-F]*\)\:.*/\1/" |uniq`
	sentmails=`zgrep postfix $LOGS |grep 'qmgr' |grep "from=<${EM_REGEX}>" |sed -e "s/^.*postfix[^[:space:]]* \([0-9A-F]*\)\:.*/\1/" |uniq`
fi

echo "[ IDs found: "`echo -n "$sentmails"|wc -l`" ]"
echo ""

for sentmail in $sentmails; do
	if [ "x$DIRECTION" == "xout" -o "x$DIRECTION" == "xin" ]; then
		if [[ $relayed_mails =~ "${sentmail}" ]]; then
			echo "$sentmail"
			zgrep -hE "postfix[^[:space:]]* $sentmail" $LOGS
			echo ""
#		else
#			echo "$sentmail NORELAY"
		fi
	else
		echo "$sentmail"
		zgrep -hE "postfix[^[:space:]]* $sentmail" $LOGS
		echo ""
	fi
done
