email notifier script

Description

This init script is based on some ideas taken from the dwm ML. It adds email notification using fetchmail. It also adds the functionality of showing the content of the file $HOME/.message when it exists. This can be used for displaying info by other programs writing to this file.

When a new email arrives a flashing text message is shown on the dwm’s status bar.

Config .fetchmailrc

This config works with GMail over IMAP with the IDLE extension for low bandwidth usage:

poll imap.gmail.com port 993 proto IMAP user "<your_user>@gmail.com"
    there with password "<your_pass>" keep ssl idle

Init script

The notification is flashing during 60 seconds, then it is removed. Lines written to .message are displayed during a second in the status bar. If .message is deleted, the normal status message (date and uptime) returns.

A pipe must be used with fetchmail when using IDLE extension because this way it waits for updates from the inbox not doing polling. If the .message file exists with some content, it is preserved and no email notification is shown.

fetchmail --check 2>/dev/null | while read line; do
    new=`echo $line | sed 's/(//' | awk '{print $1-$3}'`
    if [ $new != 0 ] && [ ! -e ~/.message ]; then
        echo "New mail($new)" > ~/.message
        echo "!!! !!! !!!" >> ~/.message
        sleep 60
        if grep '^New mail' ~/.message >/dev/null 2>/dev/null; then
            rm -f ~/.message
        fi
    fi
done &
while true; do
    if [ -r ~/.message ]; then
        while read line; do
            xsetroot -name "$line"
            sleep 1
        done < ~/.message
    else
        xsetroot -name "`date` `uptime | sed 's/.*,//'`"
        sleep 1
    fi
done &
exec dwm
rm -f ~/.message

Author