Because I use Mutt, any mailbox that has new mail tends to get my attention when I check my email. This became particularly annoying because I kept opening my spam mailbox to check a single spam message. Therefore, I decided to come up with a way to delay the delivery of my spam to once per day.
I started by changing my “.procmailrc” to deliver spam messages to a different mailbox that Mutt does not check.
MAIL=`echo $HOME/Mail` [...] :H * ^X-Spam-Status: Yes $MAIL/delay_spam [...]
Then I created a new procmailrc file called “spam.procmailrc” that would deliver mail to my checked spam mailbox.
MAIL=`echo $HOME/Mail` :0 $MAIL/spam
Next, I wrote a short Bash script to use Formail and Procmail to deliver all of the messages in the delayed delivery spam mailbox to the normal spam mailbox.
#! /bin/bash FORMAIL=/usr/bin/formail PROCMAIL=/usr/bin/procmail PROCMAILRC=$HOME/.procmail/spam.procmailrc MAIL=$HOME/Mail DELAY=$MAIL/delay_spam TEMP=$MAIL/.spam LOCK=$TEMP.lock # Make sure there is delayed mail and we can get the lock (retry once) if ( test -s $DELAY && lockfile -r 1 $LOCK 2>/dev/null ); then # Add the delayed mail to the temp mailbox and empty the delayed mailbox cat $DELAY >> $TEMP && cat /dev/null > $DELAY # Process each delayed message $FORMAIL -s $PROCMAIL $PROCMAILRC < $TEMP && rm -f $TEMP # Delete the lock now that we are done rm -f $LOCK fi
Finally, I set the script to run daily using Cron. Now I am only interrupted by spam when I choose to be instead of every time a new message arrives. I have used the same technique to delay the delivery of emails to unimportant mailing lists so I only read them hourly instead of every time a message arrives.