예제 #1
0
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')