I confess my ignorance. Only yesterday I found out about IMAP, and how you can use it to access your mailboxes remotely. It is a fairly new protocol (compared to e.g. POP)… And the good thing is both Gmail and Mutt support it. That means it is possible to check your Gmail boxes via mutt without having to download stuff with e.g. fetchmail/procmail.
Don’t get me wrong, I do like fetchmail and procmail. But I guess using mutt with IMAP can certainly be useful sometimes. It’s the best choice to read your mail in someone else’s machine, for example.
Since I felt so dumb to take so long to learn about all this, I decided to rush and start using it, and beyond… I made a small Python script to access my Gmail mailbox via IMAP and notify me about the state of the inbox (i.e. if there are any new messages). The notification happens via modern-day window manager notification tools. I use the Awesome window manager myself, and there is something called Naughty that is part of it and handles these notifications.
So there you have it, “xbiff 2.0”. xbiff monitored spool files and was a old-timer x program. My script does pretty much the same thing, but checking a remote mailbox with IMAP and using a more modern graphical back-end. And all that from Python. Enjoy the code!
Please notice that the code stores sensitive information: your gmail username and password!… You should take care to leave the file non-readable. The whole code is crap, BTW, it can be heavily modified. Have fun! 🙂
#!/usr/bin/env python import pygtk pygtk.require('2.0') import pynotify import sys import imaplib, time if __name__ == '__main__': if not pynotify.init("Basics"): sys.exit(1) n = pynotify.Notification("Gmail", "Your Gmail inbox will be checked every minute.") if not n.show(): print "Failed to send notification" sys.exit(1) lastz='' while True: M = imaplib.IMAP4_SSL('imap.gmail.com') M.login('YOURUSERNAME', 'YOURPASSWORD') newz = M.status('INBOX', '(RECENT UNSEEN MESSAGES)') print '%%%' print newz M.logout() if newz == lastz and False: # remove "and False" to get state changes strictly continue else: n = pynotify.Notification("Gmail", newz) lastz=newz if not n.show(): print "Failed to send notification" sys.exit(1) time.sleep(60*5)