chiark / gitweb /
bsmtp-pull, bsmtp-pull-server: Initial implementation of batch SMTP
[bin.git] / bsmtp-pull
diff --git a/bsmtp-pull b/bsmtp-pull
new file mode 100755 (executable)
index 0000000..5a2c474
--- /dev/null
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Depends: lockfile-progs, ssh
+set -e
+
+if [ -z "$1" ]; then
+    echo "Usage: $0 hostname" 2>&1
+    exit 1
+fi
+
+DIR="$HOME/.bsmtp"
+mkdir -p "$DIR"
+cd "$DIR"
+
+HOST="$1"
+
+# TODO: Note that this scheme may currently lose mail if the local disk
+# fills up! This is obviously very bad. Fix this.
+
+# By default, lockfile-create gives up after three minutes, so don't cron
+# this any more frequently than that without supplying a --retry argument.
+lockfile-create "$HOST"
+lockfile-touch "$HOST" &
+TOUCH="$!"
+trap 'kill "$TOUCH"; lockfile-remove "$HOST"' EXIT ERR HUP INT QUIT TERM
+
+ssh -2 -C "$HOST" bsmtp-pull-server > "$HOST"
+[ -s "$HOST" ] || exit 0
+/usr/sbin/sendmail -bS < "$HOST"
+rm -f "$HOST"
+
+exit 0