X-Git-Url: https://git.madduck.net/etc/mailfilter.git/blobdiff_plain/20ed176efc99132a724682c2b29e16756fe40c38..5f9e9afedfc1b7dd2856688db29772196b8ca158:/bin/resubmit diff --git a/bin/resubmit b/bin/resubmit index 17888f9..62d9720 100755 --- a/bin/resubmit +++ b/bin/resubmit @@ -1,17 +1,69 @@ #!/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 -FORMAIL="/usr/bin/formail -I'X-Resubmitted: $(date -R)'" -if [ -z "${1:-}" ]; then - eval $FORMAIL | exec $PROCMAIL +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 - if [ ! -f "$1" ]; then - echo "E: no such file: $1" >&2 - exit 1 - fi - eval $FORMAIL < "$1" | $PROCMAIL && rm -f "$1" + for f in $files; do + eval $FILTER < "$f" | $PROCMAIL && rm -f "$f" + done fi exit 0