In order to prevent email delivery during development and log all email messages that would have been delivered, you can actually do a simple trick: Replace the file /usr/sbin/sendmail (on Ubuntu, use ‘locate sendmail’ to find it if it lies elsewhere) with this little shell-script, or rather make a _bak of the original and save the following instead of the sendmail binary:
#!/bin/bash LOGDIR="/tmp" PREFIX="sendmail" NOW=$(date +%Y-%m-%dT%H.%M.%S) CNT=1 PRIVATELOG="$LOGDIR/$PREFIX-$NOW.$CNT.log" COMBINEDLOG="$LOGDIR/$PREFIX-combined.log" # If privatelogs are being used... if [ ! -z "$PRIVATELOG" ]; then # ...make sure the filename is unique and create the file while [ -f $PRIVATELOG ]; do CNT=$(($CNT + 1)) PRIVATELOG="$LOGDIR/$PREFIX-$NOW.$CNT.log" done echo "$0 $*" > $PRIVATELOG else # ...otherwise swap filenames PRIVATELOG=$COMBINEDLOG COMBINEDLOG='' fi echo "[$NOW]" >> $PRIVATELOG while read BUF do echo $BUF >> $PRIVATELOG done # Append privatelog to combinedlog when both logs are used if [ ! -z "$COMBINEDLOG" ]; then echo "[$NOW]" >> $COMBINEDLOG cat $PRIVATELOG >> $COMBINEDLOG fi exit 0
When your application now sends mail, these things happen:
- No email is actually sent.
- The message gets appended to the file /tmp/sendmail-combined.log, on which you could set a ‘tail -f’ in order to see which emails would have been sent and what contet they would have.
- One new file (e.g. /tmp/sendmail-2011-02-08T08.02.48.1.log) gets written for every email sent. I personally only use the combined file.