Module: Watching for New IMAP Mail Using a GUI
Credit: Brent Burley
Suppose you need to poll an IMAP inbox for unread messages and
display the sender and subject in a scrollable window using Tkinter.
The key functionality you need is in the standard Python module
imaplib, with some help from the
rfc822 module. Example 10-4
reads the server name, user, and password from the
~/.imap file. They must be all on one line,
separated by spaces.
The hard (and interesting) part of developing this program was figuring out how to get the IMAP part working, which took a fair bit of investigating. The most productive approach to understanding the IMAP protocol proved to be talking to the IMAP server directly from a Python interactive session to see what it returned:
>>> import imaplib >>> M = imaplib.IMAP4(imap_server) >>> M.login(imap_user, imap_password) ('OK', ['LOGIN complete']) >>> M.select(readonly=1) ('OK', ['8']) >>> M.search(None, '(UNSEEN UNDELETED)') ('OK', ['8']) >>> M.fetch(8, '(BODY[HEADER.FIELDS (SUBJECT FROM)])') ('OK', [('8 (BODY[HEADER.FIELDS (SUBJECT FROM)] {71}', 'From: John Doe <John.Doe@nowhere.com> Subject: test message '), ')'])
Interactive exploration is so simple with Python because of excellent interactive environments such as the standard interactive session (with readline and completion) or IDEs such as IDLE. As such, it is often the best way to clarify one’s doubts or any ambiguities one may find in the documentation.
Example 10-4. Watching for new IMAP mail with a ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access