#!/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:
";; 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:
";; 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