SQLITE=/usr/bin/sqlite3
RESUBMIT=$HOME/.etc/mailfilter/bin/resubmit
-DELAYED_QUEUE_DB=$VAR/procmail/delayed-queue.sqlite
-
-QUERY='select * from messages where release_ts < strftime("%s", "now")'
-
-$SQLITE -column $DELAYED_QUEUE_DB "$QUERY" | while read msgid file ts; do
- file="$MAILDIR/$file"
- if [ ! -f "$file" ]; then
- echo "E: message $msgid not found in $file" >&2
- else
- $RESUBMIT "$file"
- echo "I: resubmitted $msgid" >&2
- fi
- $SQLITE $DELAYED_QUEUE_DB "delete from messages where msgid = '$msgid'"
+DELAYED_QUEUE_DB=$HOME/.var/procmail/delayed-queue.sqlite
+
+QUERY='select * from messages where release_ts <= strftime("%s", "now")'
+
+$SQLITE -list -separator ' ' $DELAYED_QUEUE_DB "$QUERY" \
+ | while read msgid basefile ts; do
+
+ file="$MAILDIR/$basefile"
+ files="$file ${file}:2,"
+
+ basename="${file##*/}"
+ dirname="${file%/*}"
+ case "${dirname##*/}" in
+ cur)
+ files="$files ${file}:2,S ${file}:2,R ${file}:2,RS"
+ file="${dirname%/cur}/new/$basename"
+ files="$files $file ${file}:2, ${file}:2,R ${file}:2,RS"
+ ;;
+ new)
+ file="${dirname%/new}/cur/$basename"
+ files="$files ${file}:2, ${file}:2,S"
+ ;;
+ esac
+
+ found=0
+ for file in $files; do
+ if [ -f "$file" ]; then
+ $RESUBMIT "$file"
+ echo "I: resubmitted $msgid"
+ found=1
+ break
+ fi
+ done
+
+ $SQLITE $DELAYED_QUEUE_DB "delete from messages where msgid = '$msgid'"
+
+ if [ $found -eq 0 ]; then
+ echo "E: message $msgid not found in $basefile" >&2
+ fi
+
done