email notifier script


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 port 993 proto IMAP user "<your_user>"
    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
done &
while true; do
    if [ -r ~/.message ]; then
        while read line; do
            xsetroot -name "$line"
            sleep 1
        done < ~/.message
        xsetroot -name "`date` `uptime | sed 's/.*,//'`"
        sleep 1
done &
exec dwm
rm -f ~/.message