def main(): server = IMAPClient(HOST, use_uid=True, ssl=ssl) server.login(USERNAME, PASSWORD) select_info = server.select_folder('INBOX') log.info('%d messages in INBOX' % select_info['EXISTS']) messages = server.search(['NOT DELETED']) #messages = server.search(['UNSEEN']) log.info("%d messages that aren't deleted" % len(messages)) more_to_do = False if idx is not None: messages = [messages[idx],] elif len(messages) > MAX_BATCH_AMOUNT: messages = messages[0-MAX_BATCH_AMOUNT:] more_to_do = True msgs_to_remove = [] for msg_id in messages: try: #remove all msgs_to_remove.append(msg_id) process_email(server, msg_id) except Exception as e: log.info('%s failed! exc: %s' % (msg_id, e)) if idx is None: with open(common.DB_DIR + '/email_backup/error/id_%s' % msg_id, 'w') as f: traceback.print_exc(file=f) else: raise log.info('processed %s mails' % len(msgs_to_remove)) if idx is None and msgs_to_remove: #mark as deleted server.set_flags(msgs_to_remove, imapclient.DELETED) #tell server to delete deleted email server.expunge() log.info('delete %s mails from server' % len(msgs_to_remove)) if more_to_do: log.info('There is more mails to do')