# Copyright © 2010 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
-set -eu
+set -eux
CHECKSDIR="$HOME/.mutt/sendmail-checks.d"
SENDMAIL="/usr/sbin/sendmail -oem -oi"
-TMPFILE=$(tempfile -p mutt-sendmail -s .msg)
-cleanup () { rm -f "$TMPFILE"; trap - 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15; }
-trap cleanup 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15
+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
-args=$(for a in $@; do [ $a = -- ] || echo "--arg=$a"; done)
-run-parts --umask=0077 --arg="$TMPFILE" $args -- "$CHECKSDIR"
-$SENDMAIL -- "$@" < "$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