X-Git-Url: https://git.madduck.net/etc/mailfilter.git/blobdiff_plain/7047e6e0505152b6aa2242e1975340a99f5e57e3..15c42408a31547741fc746807331c335b6ee92f9:/procmail/tickle

diff --git a/procmail/tickle b/procmail/tickle
index 71edef6..2128713 100644
--- a/procmail/tickle
+++ b/procmail/tickle
@@ -1,21 +1,70 @@
+# The X-Tickle header has priority over the Original-To address
 :0
-* ORIGINAL_TO ?? ^[0-9]+@tickle\.madduck\.net$
-* ORIGINAL_TO ?? ^\/[0-9]+
+* ! POSTPONED ?? .
+*$ ^X-Tickle:${RE_SPACE}+\/${RE_NOT_SPACE}+
+{ TICKLE="$MATCH" }
+
+:0 E
+* ! POSTPONED ?? .
+* ORIGINAL_TO ?? ^.+@tickle\.madduck\.net$
+* ORIGINAL_TO ?? ^\/[^@]+
+{ TICKLE="$MATCH" }
+
+:0
+* TICKLE ?? .
+* ! DEST ?? .
 {
-  TICKLEDIR=$BASE/.tickle.$MATCH
+  DAILY_DELIVERY_TIME=04:20
+  JUST_DATE="`$BIN_DATE -d \"$DATE\" +%x`"
 
   :0
-  * ? test ! -d $TICKLEDIR/cur
-  {
-    LOG="tickle:      received message outside tickle range: $MATCH$NL"
+  * TICKLE ?? ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$
+  { DELAY="@$TICKLE" }
+
+  :0 E
+  * TICKLE ?? ^[0-9]+h$
+  * TICKLE ?? ^\/[^h]+
+  { DELAY="$DATE + $MATCH hours" }
+
+  :0 E
+  * TICKLE ?? ^[0-9]+m$
+  * TICKLE ?? ^\/[^m]+
+  { DELAY="$JUST_DATE + $MATCH months $DAILY_DELIVERY_TIME" }
+
+  :0 E
+  * TICKLE ?? ^[0-9]+w$
+  * TICKLE ?? ^\/[^w]+
+  { DELAY="$JUST_DATE + $MATCH weeks $DAILY_DELIVERY_TIME" }
 
-    :0
-    $DISCARD
+  :0 E
+  * TICKLE ?? ^[0-9]+d?$
+  * TICKLE ?? ^\/[^d]+
+  { DELAY="$JUST_DATE + $MATCH days $DAILY_DELIVERY_TIME" }
+
+  :0 E
+  {
+    LOG="tickle:      invalid tickler date string: $TICKLE$NL"
+    EXITCODE=69
+    HOST
   }
 
-  LOG="tickle:      file message and tickle in $MATCH day(s)$NL"
+  JUST_DATE
+  DAILY_DELIVERY_TIME
 
   :0
-  $TICKLEDIR/
-  TICKLEDIR
+  { RELEASE="`$BIN_DATE -d \"$DELAY\" +'%s (%c)'`" }
+
+  LOG="tickle:      delaying message until $RELEASE$NL"
+  DELAYED_QUEUE=$TICKLER_QUEUE
+
+  :0 fw
+  |$FORMAIL -I"X-Tickle: $RELEASE"
+
+  # store messages as read
+  MARK_READ=tickler
+
+  # unset DISABLE_DELAYS to always enable delaying for tickle messages
+  DISABLE_DELAYS
 }
+
+# vim:ft=procmail