#!/bin/sh set -eu ME="${0##*/}" about() { echo "$ME -- resubmit messages to the mail filter" echo "Copyright © martin f. krafft " echo "Released under the terms of the Artistic Licence 2.0" } usage() { echo "Usage: $ME [options] [ ...]" echo echo "Valid options are:" cat <<-_eof | column -s\& -t -V|--version & show version information. -h|--help & show this output. -l|--list & process the argument list (even if empty), never stdin -r|--deliver-read & mark messages read on delivery _eof } SHORTOPTS=Vhlr LONGOPTS=version,help,list,deliver-read list=0 mark_read=0 files= for opt in $(getopt -n $ME -o $SHORTOPTS -l $LONGOPTS -u -- "$@"); do case "$opt" in -V|--version) about; exit 0;; -h|--help) about; echo; usage; exit 0;; -l|--list) list=1;; -r|--deliver-read) mark_read=1;; --) :;; *) if [ -f "$opt" ] && [ -r "$opt" ]; then files="$files $opt" else echo "E: unknown argument: $opt" >&2 exit 1 fi ;; esac done PROCMAIL=$HOME/.etc/mailfilter/procmail/procmailrc if [ "$mark_read" -eq 1 ]; then PROCMAIL="$PROCMAIL DELIVER_READ=1" fi # execute the date -R only during the eval, not immediately FILTER="sed -rne ':b;s/^Received:/&/;tf;p;n;bb' -e ':f;iReceived: by resubmission script; $(date -R)' -e ':e;p;n;be'" FILTER="$FILTER | /usr/bin/formail -I'X-Resubmitted: $(date -R)'" if [ -z "${files:-}" ] && [ $list -eq 0 ]; then eval $FILTER | exec $PROCMAIL else for f in $files; do eval $FILTER < "$f" | $PROCMAIL && rm -f "$f" done fi exit 0