Changed fixed socket timeout to an Option
[rox-postal.git] / pop_check.py
blob78fa86bd71f63f949f12951f7e3e8eac15f4f435
1 """
2 imap_check.py - An imap folder checker
4 Copyright 2006 Kenneth Hayber <ken@hayber.us>,
5 All rights reserved.
6 """
8 import poplib, sys
10 from checker import Checker
11 class POPChecker(Checker):
12 def __init__(self, config=None):
13 Checker.__init__(self, config)
14 self.protocol = 'POP'
15 try:
16 self.server = config['server']
17 self.port = int(config['port'])
18 self.username = config['username']
19 self.password = config['password']
20 self.ssl = (config['ssl'] == 'True')
21 self.apop = (config['apop'] == 'True')
22 except:
23 self.server = 'localhost'
24 self.port = 110
25 self.username = ''
26 self.password = ''
27 self.ssl = False
28 self.apop = False
30 self.uidls = [] # list of uidls from last check
31 # save this to a file to prevent all messages being 'new' at startup
33 def check(self):
34 self.unseen = 0
36 try:
37 if self.ssl:
38 pop = poplib.POP3_SSL(self.server)
39 else:
40 pop = poplib.POP3(self.server)
42 if self.apop:
43 pop.apop(self.username, self.password)
44 else:
45 pop.user(self.username)
46 pop.pass_(self.password)
47 except:
48 self.results = "%s (%s)\n" % (self.name, _('Login Error'))
49 self.blocker.trigger()
50 return
52 # get list of unique message ids
53 m = pop.uidl()
54 pop.quit()
55 yield None
57 # remove the unneeded parts from the uidl results (just want the uidls)
58 uidls = map(lambda a: a.split()[1], m[1])
59 yield None
61 # find the new (unseen) uidls
62 for x in uidls:
63 if not x in self.uidls:
64 self.unseen += 1
65 yield None
67 if self.unseen > 0:
68 self.results = "%s (%d/%d)\n" % (self.name, self.unseen, len(uidls))
69 else:
70 self.results = ""
72 self.uidls = uidls
73 self.blocker.trigger()