#!/usr/local/bin/zsh -f setopt multios DQBASE=$HOME/.qmail- DEFAULTSPOOL=./Maildir/ cd $HOME PATH=${PATH}:/usr/sbin:/usr/lib; export PATH export EXT=${EXTENSION//+/-} export EXT2=${${(M)EXT%%-*}/-/} export EXT3=${${(M)EXT2%%-*}/-/} export EXT4=${${(M)EXT3%%-*}/-/} # $HOST manipulation is not assymmetric with $EXT # If $HOSTn has no dots, $HOST(n+1) has same name as $HOSTn export HOST=$DOMAIN export HOST2=${HOST%.*} export HOST3=${HOST2%.*} export HOST4=${HOST3%.*} fdq='' x=${(L)EXT//./:} dq=${DQBASE}$x function maildirmake() { mkdir -m 700 $1 && mkdir -m 700 $1/{new,cur,tmp} } if [[ $USER == $LOCAL ]]; then fdq=$HOME/${1:-.qmail} [[ -s $fdq ]] || echo "$DEFAULTSPOOL" > $fdq elif [[ -s $dq ]]; then fdq=$dq else while [[ x"$x" != x"" ]]; do x=${${(M)x##*-}%-} dq=${DQBASE}$x-default if [[ -s $dq ]]; then fdq=$dq; break fi done dq=${DQBASE}$x-default if [[ -s $dq ]]; then fdq=$dq fi fi function maildir() { [[ -d $1 ]] || maildirmake $1 dir=$1/new host=`hostname` zmodload zsh/datetime || exit 111 (echo -n "$RPLINE"; cat) > $dir/$EPOCHSECONDS.$$.$host } function mbox() { # no locking! do not use poor mbox! (echo -n $UFLINE echo -n $RPLINE cat echo) >> $1 } if [[ -n "$fdq" && -s $fdq ]]; then default=${EXT/$x/} [[ x"$default" != x"" ]] && export DEFAULT=${default#-} cat $fdq | while read -r line; do case "$line" in \#*) ;; \|*) out="$out > >(${line#\|})" ;; .*/|/*/) out="$out > >(maildir $line)" ;; .*|/*) out="$out > >(mbox $line)" ;; *) out="$out > >(sendmail -- ${line#\&})" ;; esac done [[ -n "$DEBUG" ]] && echo out=$out >> $HOME/ddebug ###echo found: $fdq, default: $DEFAULT, out=$out read UFLINE; UFLINE=$UFLINE$'\n'; export UFLINE read RPLINE; RPLINE=$RPLINE$'\n'; export RPLINE [[ -n "$DEBUG" ]] && env > $HOME/ENV eval "cat ${out:->/dev/null}" exit 0 else # not found exit 111 fi