From 14dfa8853e4014e8d01e6f8ab595bf64a7ec861c Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 3 Dec 2018 18:48:35 +0100
Subject: [PATCH] Handle mailbox files instead of maildirs too.

---
 README             |  9 +++++++++
 pingmail           | 24 ++++++++++++++----------
 pingmailrc.example |  9 ++++++---
 3 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/README b/README
index 5908bcd..9ce6207 100644
--- a/README
+++ b/README
@@ -1,5 +1,14 @@
 Small shell script to regularly check a target person's responsiveness via mail.
 
+When run as "pingmail check", tries to derive the last time a person sent a
+mail to the local system by either a) searching a maildir for the most recent
+file matching a regex pattern (such as a "From: " field matching the target
+person), and looking at thta file's modification time, or b) checking the
+modification time of a defined mailbox file. If that point in time is too
+distant, sends an e-mail to the target person requesting some sign of life.
+After some more wait time without a sign of life, sends a warning message to
+another mail address that target person is unresponsive.
+
 When run as "pingmail check", searches a maildir for the most recent file
 matching a regex pattern (such as a "From: " field matching the target person),
 and if the most recent file is too old, sends an e-mail to the target person
diff --git a/pingmail b/pingmail
index b59fa49..f40eb0f 100755
--- a/pingmail
+++ b/pingmail
@@ -28,19 +28,23 @@ if [ -f $ping_touch ]; then
     modtime_pingfile=`stat $ping_touch --format=%Y`
 fi
 
-# search maildir for last life sign datetime
+# search mailbox or maildir for last life sign datetime
 modtime_mails=0
-while read file; do
-    if [ -z $file ]; then
-        break
-    fi
-    modtime=`stat $file --format=%Y`
-    if [ "$modtime" -gt "$modtime_mails" ]; then
-        modtime_mails=$modtime
-    fi
-done <<EOF
+if [ ! "$mbox" = "" ]; then
+	modtime_mails=`stat "$mbox" --format=%Y`
+else
+	while read file; do
+	    if [ -z $file ]; then
+		break
+	    fi
+	    modtime=`stat $file --format=%Y`
+	    if [ "$modtime" -gt "$modtime_mails" ]; then
+		modtime_mails=$modtime
+	    fi
+	done <<EOF
 $(grep -lER "$matchstring" $maildir)
 EOF
+fi
 
 # find delta of last life sign datetime / test file modtime and current datetime
 now=`date +%s`
diff --git a/pingmailrc.example b/pingmailrc.example
index 97a9de0..954e8ff 100644
--- a/pingmailrc.example
+++ b/pingmailrc.example
@@ -7,9 +7,6 @@ ping_touch=$testdir'/ping_touch'
 # modification time is when the count for sending checker a warning mail starts
 reminder_touch=$testdir'/reminder_touch'
 
-# to recursively search for most recent matches to $matchstring as lifesigns
-maildir=$HOME'/mail'
-
 # how long to wait for lifesigns before sending a ping; double is time to wait
 # for a lifesign before sending a warning message to checker
 wait_time=86400
@@ -37,6 +34,12 @@ msg2checker='pingmail reporting in:\n
 # mail client command reading message body from stdin and subject from parameter
 mailclient_s='mutt -s'
 
+# mailbox file to check for most recent life sign
+mbox=$HOME'/mail/foo'
+
+# to recursively search for most recent matches to $matchstring as lifesigns
+maildir=$HOME'/mail'
+
 # pattern to search $maildir for recursively for lifesigns
 checked_address_escaped=`echo $checked_address | sed 's/\./\\./g'`
 matchstring='^From: .*('$checked_address_escaped'|alternate@example\.org)'
-- 
2.30.2