diff options
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | TODO | 7 | ||||
-rw-r--r-- | esmtp-wrapper | 99 |
3 files changed, 105 insertions, 5 deletions
@@ -1,7 +1,9 @@ News ~~~~ - * CVS: + * Development: + + * Wrapper script for off-line mail delivery (Phil Sutter). * Document how to get CA certificates. @@ -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 $? + |