#!/bin/bash # ! # ! # ! # ! # ! # ! # ! # # # # DO NOT set -e # # # # ! # ! # ! # ! # ! # ! # ! # # Username to deliver carbon copies to USER=username # Maildir root, MUST exist. MUST be in proper Maildir format. # MUST end in `/' MAILDIR=/home/$USER/Maildir/.Carbon/ # sendmail command. # Don't change it, unless you are absolutely, totally sure. # Do NOT, never EVER use "-t" here. SENDMAIL="/usr/sbin/sendmail -G -i -f" # We don't want to overwrite existing files. set -C ############################################################################## # Exit codes courtesy # /* command line usage error */ EX_USAGE=64 # /* data format error */ EX_DATAERR=65 # /* cannot open input */ EX_NOINPUT=66 # /* addressee unknown */ EX_NOUSER=67 # /* host name unknown */ EX_NOHOST=68 # /* service unavailable */ EX_UNAVAILABLE=69 # /* internal software error */ EX_SOFTWARE=70 # /* system error (e.g., can't fork) */ EX_OSERR=71 # /* critical OS file missing */ EX_OSFILE=72 # /* can't create (user) output file */ EX_CANTCREAT=73 # /* input/output error */ EX_IOERR=74 # /* temp failure; user is invited to retry */ EX_TEMPFAIL=75 # /* remote error in protocol */ EX_PROTOCOL=76 # /* permission denied */ EX_NOPERM=77 # /* configuration error */ EX_CONFIG=78 # /* database access error */ EX_DB=79 test "${MAILDIR:${#MAILDIR}-1}" = "/" -a "$MAILDIR" -ef "${MAILDIR%/}" || { echo \$MAILDIR is not configured >&2; exit $EX_USAGE; } test -d "${MAILDIR}tmp" -a -w "${MAILDIR}tmp" -a -O "${MAILDIR}tmp" || { echo \$MAILDIR is not configured >&2; exit $EX_USAGE; } test -d "${MAILDIR}new" -a -w "${MAILDIR}new" -a -O "${MAILDIR}new" || { echo \$MAILDIR is not configured >&2; exit $EX_USAGE; } # Construct unique name following procedures in http://cr.yp.to/proto/maildir.html _SALT=R$(od -An -N 8 -t x8 < /dev/urandom | sed -e 's/[[:blank:]]//')P$$ MSG="${MAILDIR}tmp/$(date +%s).$_SALT.$(hostname)" # Clean up when done or aborting. trap "rm -f \"$MSG\"" 0 1 2 3 15 # Uncomment the next line to drop program arguments into message copy header. # Keep in mind it is BAD idea to keep this line enabled, it may startle SpamAssassin. # Only ever enable it when you test your system setup, and disable it immediately # following successful configuration. #DEBUG_HEADERS=yes # Create a carbon copy of the message. { if [ "$DEBUG_HEADERS" ]; then echo "X-Params: $*" fi cat } > "$MSG" || { echo Error writing to \$MAILDIR >&2; exit $EX_CANTCREAT; } # Deliver the message { $SENDMAIL "$@" < "$MSG" mv -t "${MAILDIR}new" "$MSG" } || { echo Error finishing submission >&2; exit $EX_TEMPFAIL; } exit $?