#!/bin/sh # # mutt/sendmail – sendmail wrapper to enforce some checks on outgoing mails # # The script basically just creates a temporary file and then invokes any # executable scripts in ~/.config/mutt/sendmail-checks.d in run-parts style. # They receive the filename of a temporary file holding the message to be sent # as $1, followed by all recipients as determined by mutt. # # Copyright © 2010 martin f. krafft Released under the # terms of the Artistic Licence 2.0 # set -eux CHECKSDIR="$HOME/.config/mutt/sendmail-checks.d" SENDMAIL="/usr/sbin/sendmail -oem -oi" TMPFILE=$(mktemp --tmpdir mutt-sendmail.XXXXXXXXXX.msg) settrap () { trap "$@" 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15; } cleanup () { rm -f "$TMPFILE"; settrap -; } settrap cleanup argtype=s recipients= sendmail_args= for i in "$@"; do case "$argtype/$i" in (s/--) argtype=r;; (s/*) sendmail_args="${sendmail_args} $i";; (r/*) recipients="${recipients} $i";; esac done cat > $TMPFILE remove_headers= if ! formail -czx "Resent-" < "$TMPFILE" | grep -q .; then # only do this for original mails, not bounces recipients="$recipients $(formail -czx "X-Bcc" < "$TMPFILE" | tr -d ',')" remove_headers="$remove_headers -IX-Bcc" fi args=$(for i in $recipients; do echo "--arg=$i"; done) run-parts --exit-on-error --umask=0077 --arg="$TMPFILE" $args -- "$CHECKSDIR" recipients=$(echo "$recipients" | xargs) formail $remove_headers < "$TMPFILE" \ | eval $SENDMAIL "$sendmail_args" -- "$recipients" cleanup