#!/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 $?