From 31e51b71fdb15b7c96f33760a5544a1ab0ca63ae Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Wed, 8 Aug 2007 15:29:50 +0000 Subject: Wrapper script for off-line mail delivery (Phil Sutter). --- NEWS | 4 ++- TODO | 7 ++--- esmtp-wrapper | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 esmtp-wrapper 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 + ----- <> 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 +# +# 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 $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 $? + -- cgit v1.2.3-54-g00ecf