def poll(self): '''Polls the IMAP server. For each new (UNSEEN) message, builds a list of DTO message objects and sends said list to the callback function.''' interval = self.my_config['interval'] if 'interval' in self.my_config else 60 while(1): print "Polling the IMAP server... " (retcode, messages) = self.conn.search(None, '(UNSEEN)') if retcode == 'OK': messages = [] if messages[0] == '' else messages n_messages = str(len(messages)) print "OK! Found " + n_messages + " messages.\n" if len(messages) > 0: for message in messages[0].split(' '): (ret, message_info) = self.conn.fetch(message, '(BODY[HEADER.FIELDS (SUBJECT)])') if(ret == 'OK'): subject = message_info[0][1].replace('Subject: ', '').rstrip() parts = subject.split('|') message_list = [] if len(parts) == 5: # Build the message object message = Message() message.type = parts[0] message.published = parts[1] message.story_id = parts[2] message.owner = parts[3] message.site = parts[4] message_list.append(message) if len(message_list) > 0: self.callback(message_list) else: print "Something went wrong...n" # Humm, that's nasty... sleep(interval)