summaryrefslogtreecommitdiff
path: root/esmtp-wrapper
diff options
context:
space:
mode:
Diffstat (limited to 'esmtp-wrapper')
-rw-r--r--esmtp-wrapper99
1 files changed, 99 insertions, 0 deletions
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 $?
+