By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,732 Members | 1,388 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,732 IT Pros & Developers. It's quick & easy.

IMAP Tkinter Issue

P: n/a
Sorry to repost... but 4am didn't get much responses.

I've been trying to implement this script, it polls an IMAP inbox for
unread messages and displays the sender and subject in a scrollable
window using Tkinter. However, when I try to change the search
parameters on line 55 from 'unread' (UNSEEN) to 'read' (SEEN), the
tkinter window doesn't even pop up anymore.

Any idea how to change the parameters of this program and yet still keep
it functional?



my code: (if you can't see line 55, search for 'UNSEEN')


#!/usr/bin/env python
import imaplib, string, sys, os, re, rfc822
from Tkinter import *

PollInterval = 60 # seconds

def getimapaccount():
try:
f = open(('info.imap'))
except IOError, e:
print 'Unable to open ~/.imap: ', e
sys.exit(1)
global imap_server, imap_user, imap_password
try:
imap_server, imap_user, imap_password = string.split(f.readline())
except ValueError:
print 'Invalid data in ~/.imap'
sys.exit(1)
f.close()

class msg: # a file-like object for passing a string to rfc822.Message
def __init__(self, text):
self.lines = string.split(text, '\015\012')
self.lines.reverse()
def readline(self):
try: return self.lines.pop() + '\n'
except: return ''

class Mailwatcher(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack(side=TOP, expand=YES, fill=BOTH)
self.scroll = Scrollbar(self)
self.list = Listbox(self, font='7x13',
yscrollcommand=self.scroll.set,
setgrid=1, height=6, width=80)
self.scroll.configure(command=self.list.yview)
self.scroll.pack(side=LEFT, fill=BOTH)
self.list.pack(side=LEFT, expand=YES, fill=BOTH)

def getmail(self):
self.after(1000*PollInterval, self.getmail)
self.list.delete(0,END)
try:
M = imaplib.IMAP4(imap_server)
M.login(imap_user, imap_password)
except Exception, e:
self.list.insert(END, 'IMAP login error: ', e)
return

try:
result, message = M.select(readonly=1)
if result != 'OK':
raise Exception, message
typ, data = M.search(None, '(UNSEEN)')
for num in string.split(data[0]):
try:
f = M.fetch(num, '(BODY[HEADER.FIELDS (SUBJECT FROM)])')
m = rfc822.Message(msg(f[1][0][1]), 0)
subject = m['subject']
except KeyError:
f = M.fetch(num, '(BODY[HEADER.FIELDS (FROM)])')
m = rfc822.Message(msg(f[1][0][1]), 0)
subject = '(no subject)'
fromaddr = m.getaddr('from')
if fromaddr[0] == "": n = fromaddr[1]
else: n = fromaddr[0]
text = '%-20.20s %s' % (n, subject)
self.list.insert(END, text)
len = self.list.size()
if len > 0: self.list.see(len-1)
except Exception, e:
self.list.delete(0,END)
print sys.exc_info()
self.list.insert(END, 'IMAP read error: ', e)
M.logout()
getimapaccount()
root = Tk(className='mailwatcher')
root.title('mailwatcher')
mw = Mailwatcher(root)
mw.getmail()
mw.mainloop()
Mar 23 '06 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.