A popup from .procmailrc

June 9, 2008

linux

Note: this is an older article that I’ve revived. Also note: in todays email flood I don’t know if such a popup is something you want to use…

#intro I’ve used gnubiff, xbiff and God knows what to provide a simple notify when receiving mail. But I wanted more. I want to be able to tweak certain settings, without going in to the source code of the application. Also the way mail notifiers mess with your mailbox is not something I particularly like.

what then? I wanted something that runs from .procmailrc, so that every time an email comes in an action is undertaken. This means no fiddling with your mailbox, because it just runs from the .procmailrc.

using procmail to notify you First I just played a sound from .procmail, but I also wanted some popup which could display the From: and/or the Subject field(s).

GNOME notify popup I wanted to use the notify-send to give me the mailpopups as these are much more slicker than a gmessage. The .procmail part is the same as described below, only the script is different. The program notify-send is part of the package libnotify-bin

I now call a script called mailpop.sh which looks like this:

#!/bin/bash
# popup a small notification with 'notify-send'
dis=`formail -X From: -X Subject:`
# sometimes the order is difference - in very short headers
# check for both
if [[ "$dis" =~ "From:(.+)Subject:(.+)" ]]; then
    from=${BASH_REMATCH[1]}
    sub=${BASH_REMATCH[2]}
fi
if [[ "$dis" =~ "Subject:(.+)From:(.+)" ]]; then
    from=${BASH_REMATCH[2]}
    sub=${BASH_REMATCH[1]}
fi

# tweaks < > are special
from=${from//</\(}
from=${from//>/\)}
from=${from//&/\.}
sub=${sub//</\(}
sub=${sub//>/\)}
sub=${sub//&/\.}

sub=${sub:0:75}
from=${from:0:75}
TM=2000

# from http://gnome-hacks.jodrell.net/hacks.html?id=82
# modified for GNOME-2.14
pids=`pgrep -u miekg gnome-panel`
for pid in $pids; do
    # find DBUS session bus for this session
    DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \
        /proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
    # use it
    DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
    /usr/bin/notify-send -u normal -t $TM "$sub" "$from"
done

The tricky part was getting the SESSION_BUS_ADDRRESS thingy.

hooking up .procmailrc That is a bit of a no brainer, just add something like the following:

# notify the user
:0 c
* 
| $HOME/bin/mailpop.sh

In your .procmailrc. That’s it. When ever a mail comes in a popup is displayed and a sound is heard, and you can tweak this is much as you like.

None