Handle my mail queue
This commit is contained in:
parent
e09b926999
commit
61e1053fec
3 changed files with 108 additions and 0 deletions
44
scripts/prefix/bin/msmtp-enqueue
Executable file
44
scripts/prefix/bin/msmtp-enqueue
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
QUEUEDIR=$HOME/.msmtpqueue
|
||||||
|
|
||||||
|
# Set secure permissions on created directories and files
|
||||||
|
umask 077
|
||||||
|
|
||||||
|
# Change to queue directory (create it if necessary)
|
||||||
|
if [ ! -d "$QUEUEDIR" ]; then
|
||||||
|
mkdir -p "$QUEUEDIR" || exit 1
|
||||||
|
fi
|
||||||
|
cd "$QUEUEDIR" || exit 1
|
||||||
|
|
||||||
|
# Create new unique filenames of the form
|
||||||
|
# MAILFILE: ccyy-mm-dd-hh.mm.ss[-x].mail
|
||||||
|
# MSMTPFILE: ccyy-mm-dd-hh.mm.ss[-x].msmtp
|
||||||
|
# where x is a consecutive number only appended if you send more than one
|
||||||
|
# mail per second.
|
||||||
|
BASE="`date +%Y-%m-%d-%H.%M.%S`"
|
||||||
|
if [ -f "$BASE.mail" -o -f "$BASE.msmtp" ]; then
|
||||||
|
TMP="$BASE"
|
||||||
|
i=1
|
||||||
|
while [ -f "$TMP-$i.mail" -o -f "$TMP-$i.msmtp" ]; do
|
||||||
|
i=`expr $i + 1`
|
||||||
|
done
|
||||||
|
BASE="$BASE-$i"
|
||||||
|
fi
|
||||||
|
MAILFILE="$BASE.mail"
|
||||||
|
MSMTPFILE="$BASE.msmtp"
|
||||||
|
|
||||||
|
# Write command line to $MSMTPFILE
|
||||||
|
echo "$@" > "$MSMTPFILE" || exit 1
|
||||||
|
|
||||||
|
# Write the mail to $MAILFILE
|
||||||
|
cat > "$MAILFILE" || exit 1
|
||||||
|
|
||||||
|
# If we are online, run the queue immediately.
|
||||||
|
# Replace the test with something suitable for your site.
|
||||||
|
#ping -c 1 -w 2 SOME-IP-ADDRESS > /dev/null
|
||||||
|
#if [ $? -eq 0 ]; then
|
||||||
|
# msmtp-runqueue.sh > /dev/null &
|
||||||
|
#fi
|
||||||
|
|
||||||
|
exit 0
|
8
scripts/prefix/bin/msmtp-listqueue
Executable file
8
scripts/prefix/bin/msmtp-listqueue
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
QUEUEDIR=$HOME/.msmtpqueue
|
||||||
|
|
||||||
|
for i in $QUEUEDIR/*.mail; do
|
||||||
|
egrep -s --colour -h '(^From:|^To:|^Subject:)' "$i" || echo "No mail in queue";
|
||||||
|
echo " "
|
||||||
|
done
|
56
scripts/prefix/bin/msmtp-runqueue
Executable file
56
scripts/prefix/bin/msmtp-runqueue
Executable file
|
@ -0,0 +1,56 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
QUEUEDIR="$HOME/.msmtpqueue"
|
||||||
|
LOCKFILE="$QUEUEDIR/.lock"
|
||||||
|
MAXWAIT=120
|
||||||
|
|
||||||
|
OPTIONS=$@
|
||||||
|
|
||||||
|
# wait for a lock that another instance has set
|
||||||
|
WAIT=0
|
||||||
|
while [ -e "$LOCKFILE" -a "$WAIT" -lt "$MAXWAIT" ]; do
|
||||||
|
sleep 1
|
||||||
|
WAIT="`expr "$WAIT" + 1`"
|
||||||
|
done
|
||||||
|
if [ -e "$LOCKFILE" ]; then
|
||||||
|
echo "Cannot use $QUEUEDIR: waited $MAXWAIT seconds for"
|
||||||
|
echo "lockfile $LOCKFILE to vanish, giving up."
|
||||||
|
echo "If you are sure that no other instance of this script is"
|
||||||
|
echo "running, then delete the lock file."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# change into $QUEUEDIR
|
||||||
|
cd "$QUEUEDIR" || exit 1
|
||||||
|
|
||||||
|
# check for empty queuedir
|
||||||
|
if [ "`echo *.mail`" = '*.mail' ]; then
|
||||||
|
echo "No mails in $QUEUEDIR"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# lock the $QUEUEDIR
|
||||||
|
touch "$LOCKFILE" || exit 1
|
||||||
|
|
||||||
|
# process all mails
|
||||||
|
for MAILFILE in *.mail; do
|
||||||
|
MSMTPFILE="`echo $MAILFILE | sed -e 's/mail/msmtp/'`"
|
||||||
|
echo "*** Sending $MAILFILE to `sed -e 's/^.*-- \(.*$\)/\1/' $MSMTPFILE` ..."
|
||||||
|
if [ ! -f "$MSMTPFILE" ]; then
|
||||||
|
echo "No corresponding file $MSMTPFILE found"
|
||||||
|
echo "FAILURE"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
msmtp $OPTIONS `cat "$MSMTPFILE"` < "$MAILFILE"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
rm "$MAILFILE" "$MSMTPFILE"
|
||||||
|
echo "$MAILFILE sent successfully"
|
||||||
|
else
|
||||||
|
echo "FAILURE"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# remove the lock
|
||||||
|
rm -f "$LOCKFILE"
|
||||||
|
|
||||||
|
exit 0
|
Loading…
Reference in a new issue