summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--TODO7
-rw-r--r--esmtp-wrapper99
3 files changed, 105 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index b87e194..54d7de2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,9 @@
News
~~~~
- * CVS:
+ * Development:
+
+ * Wrapper script for off-line mail delivery (Phil Sutter).
* Document how to get CA certificates.
diff --git a/TODO b/TODO
index 9f04e94..87d6f78 100644
--- a/TODO
+++ b/TODO
@@ -1,5 +1,6 @@
-To do
-~~~~~
+ -----
+ To Do
+ -----
<<esmtp>> already fulfills all my needs, and I don't plan to spend much more
time on it besides bug fixing.
@@ -10,6 +11,4 @@ To do
* Alias expansion.
- * Include simple scripts to queue emails for dial-up connections.
-
diff --git a/esmtp-wrapper b/esmtp-wrapper
new file mode 100644
index 0000000..4215c4b
--- /dev/null
+++ b/esmtp-wrapper
@@ -0,0 +1,99 @@
+#!/bin/bash
+# Esmtp-wrapper adds shell based queueing support to esmtp.
+# Copyright (C) 2007 by Phil Sutter <phil@nwl.cc>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+qdir="$HOME/.esmtp_queue"
+esmtp="/usr/bin/esmtp"
+mktemp="/bin/mktemp"
+
+queue_mail() { # ($@)
+ local ret=0
+ mkdir -p $qdir || {
+ echo "unable to create queue dir $qdir"
+ return 1
+ }
+ mdir="`$mktemp -d $qdir/XXXXXXXX`"
+ [ -d "$mdir" ] || {
+ echo "unable to create tempdir inside $qdir"
+ return 1
+ }
+
+ echo "$@" >$mdir/cmd || ret=1
+ cat </dev/stdin >$mdir/mail || ret=1
+ [ $ret -eq 0 ] || {
+ echo "could not enqueue mail in dir $mdir"
+ return 1
+ }
+
+ chmod 0600 $mdir/* || echo "warning setting secure permissions failed!"
+ return 0
+}
+
+show_mail() { # ($mdir)
+ echo "mail in dir $1:"
+ printf '\t%s' "`grep ^From: $1/mail`"
+ printf '\t%s' "`grep ^To: $1/mail`"
+ printf '\t%s\n' "`grep ^Date: $1/mail`"
+}
+
+show_queue() { # ()
+ local i=0
+ for dir in $qdir/*; do
+ [ ! -d "$dir" ] && continue
+ show_mail $dir
+ let i++
+ done
+ echo "$i mails to deliver"
+}
+
+
+send_mail() { # ($mdir)
+ $esmtp $(<$1/cmd) <$1/mail && \
+ rm -rf $1 || return 1
+ return $?
+}
+
+deliver_queue() { # ()
+ local undelivered=0
+ for dir in $qdir/*; do
+ [ ! -d "$dir" ] && continue
+ sleep 5 # allow tunnel to close properly
+ send_mail $dir
+ undelivered=`expr $undelivered + $?`
+ done
+ return $undelivered
+}
+
+ME=`basename $0`
+case $ME in
+ sendmail)
+ queue_mail $@
+ deliver_queue &
+ ;;
+ deliver)
+ deliver_queue
+ ;;
+ mailq)
+ show_queue
+ ;;
+ *)
+ exit 1
+ ;;
+esac
+
+exit $?
+