#!/bin/sh
HOSTNAME=`hostname`
DATE=`date +'%a, %d %b %Y %T %Z'`
SENDHOST=""
SENDER=""
RCPT=""
MAILFILE=./mailfile
MSGID=$$-`date +'%Y%m%d%H%M'`

echo "220 $HOSTNAME SMTP smtpd.sh ready at $DATE"
while :;
do
    read X
    X=`echo $X | /usr/bin/tr 'A-Z' 'a-z'`
    CMD=`echo $X | sed 's/ .*//'`
    PAR=`echo $X | sed "s/^$CMD //"`
    if [ "$X" = "$CMD" ] ; then
        PAR=""
    fi

    case "$CMD" in
    quit)   echo "221 $HOSTNAME closing connection"
            exit;;
    helo)   if [ -z "$PAR" ] ; then
                echo "501 helo requires domain address"
            else
                SENDHOST=`echo $PAR | sed 's/\..*//'`
                echo "250 $HOSTNAME Hello $SENDHOST, pleased to meet you"
            fi;;
    expn)   echo "502 Error: command not implemented";;
    vrfy)   echo "252 <$PAR>";;
    mail)   case "$PAR" in
            from:\ *)
                SENDER=`echo "$PAR" | sed 's/from: //'`
                SENDER=`echo "$SENDER" | sed 's/ .*//'`
                echo "250 $SENDER... Sender ok";;
            *)
                echo "501 Syntax: MAIL FROM: <address>";;
            esac
            ;;
    rcpt)   case "$PAR" in
            to:\ *)
                RCPT=`echo "$PAR" | sed 's/to: //'`
                RCPT=`echo "$RCPT" | sed 's/ .*//'`
                echo "250 $RCPT... Recipient ok";;
            *)
                echo "501 Syntax: RCPT TO: <address>";;
            esac
            ;;
    data)   echo "354 Enter mail, end with \".\" on a line by itself"
            FIN="n"
            DATA=""
            while [ "$FIN" != "y" ] ; do
                read DATALINE
                if [ "$DATALINE" = "." ] ; then
                    FIN="y"
                fi
                DATALINE=`echo $DATALINE | sed 's/^\.//'`
                DATALINE=`echo $DATALINE | sed 's/^From />From /'`
                DATA="$DATA
$DATALINE"
            done
            LEN=`echo $DATA | wc -c | sed 's/^ *//'`
            /bin/cat >> $MAILFILE <<__eof__
From $SENDER $DATE
From: $SENDER
Date: $DATE
Message-Id: <$MSGID>
Received: from $SENDHOST by $HOSTNAME; $DATE
Content-Length: $LEN
$DATA

__eof__
            echo "250 $MSGID Message accepted for delivery"
            ;;
    *)      echo "500 Command unrecognised: \"$X\"";;
    esac
done