2 imap_check.py - An imap folder checker
4 Copyright 2006 Kenneth Hayber <ken@hayber.us>,
8 import imaplib
, sys
, socket
9 from checker
import Checker
11 class IMAPChecker(Checker
):
12 def __init__(self
, config
=None):
13 Checker
.__init
__(self
, config
)
14 self
.protocol
= 'IMAP'
16 self
.server
= config
['server']
17 self
.port
= int(config
['port'])
18 self
.ssl
= (config
['ssl'] == 'True')
19 self
.username
= config
['username']
20 self
.password
= config
['password']
21 self
.folders
= config
['folders'].split(',')
23 self
.server
= 'localhost'
31 """Check all folders"""
34 im
= imaplib
.IMAP4_SSL(self
.server
, self
.port
)
36 im
= imaplib
.IMAP4(self
.server
, self
.port
)
37 im
.login(self
.username
, self
.password
)
39 self
.results
= "%s (%s)\n" % (self
.name
, _('Login Error'))
40 self
.blocker
.trigger()
43 yield None #let someone else run for a while
48 for folder
in self
.folders
:
49 folder
= folder
.strip()
52 result
= im
.select(folder
, readonly
=True)
53 except socket
.timeout
:
54 self
.results
+= " %s (Timeout)\n" % (folder
,)
55 yield None #let someone else run for a while
59 if result
[1][0] == '':
62 count
= int(result
[1][0])
66 self
.results
+= " %s (Error)\n" % (folder
,)
67 yield None #let someone else run for a while
70 result
= im
.search(None, "UNSEEN")
72 if result
[1][0] == '':
75 unseen
= len(result
[1][0].split())
80 self
.results
+= " %s (%d/%d)\n" % (folder
, unseen
, count
)
81 yield None #let someone else run for a while
90 self
.results
= "%s:\n%s" % (self
.name
, self
.results
)
92 # We're done. Trigger the main task
93 self
.blocker
.trigger()