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(float(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"""
35 im
= imaplib
.IMAP4_SSL(self
.server
, self
.port
)
37 im
= imaplib
.IMAP4(self
.server
, self
.port
)
38 im
.login(self
.username
, self
.password
)
40 self
.results
= "%s (%s)\n" % (self
.name
, _('Login Error'))
41 self
.blocker
.trigger()
45 yield None #let someone else run for a while
50 for folder
in self
.folders
:
51 folder
= folder
.strip()
54 result
= im
.select(folder
, readonly
=True)
55 except socket
.timeout
:
56 self
.results
+= " %s (Timeout)\n" % (folder
,)
58 yield None #let someone else run for a while
62 if result
[1][0] == '':
65 count
= int(result
[1][0])
69 self
.results
+= " %s (Error)\n" % (folder
,)
70 yield None #let someone else run for a while
73 result
= im
.search(None, "UNSEEN")
75 if result
[1][0] == '':
78 unseen
= len(result
[1][0].split())
84 self
.results
+= " %s (%d/%d)\n" % (folder
, unseen
, count
)
85 yield None #let someone else run for a while
94 self
.results
= "%s:\n%s" % (self
.name
, self
.results
)
96 # We're done. Trigger the main task
97 self
.blocker
.trigger()