This tool will scan IMAP folders for Status, and X-Status for status information and apply them on IMAP using store function.
Usage: fix_status.py username password
It took 1.5 second for ~1000 emails, hope it will be usefull.
- Rayed
#!/usr/local/bin/python -u
""" fix_status.py This tool will scan IMAP folders for Status, and X-Status for status information and apply them on IMAP using store function
Rayed Alrashed 13 Oct 2003 [EMAIL PROTECTED]
"""
import imaplib import sys from string import *
#------------------------------------------------------------ def fix_folder(con,folder): i =0 list_r = [] list_o = [] list_d = [] list_f = [] list_a = [] list_t = []
type,data = con.select(folder) if type!='OK': return
nmsg = atoi(data[0])
type,data = con.fetch( '1:%s' % nmsg, '(BODY[HEADER.FIELDS (status x-status)])' )
# scan all the meseages in folder print "Scanning..." for msg in data: try: s = msg[1] i +=1 if find(str,'R')>-1: list_r.append(str(i)) if find(str,'O')>-1: list_o.append(str(i)) if find(str,'D')>-1: list_d.append(str(i)) if find(str,'F')>-1: list_f.append(str(i)) if find(str,'A')>-1: list_a.append(str(i)) if find(str,'T')>-1: list_t.append(str(i)) except: pass
# apply changes using IMAP store print "Applying..."
if len(list_r)>0: con.store( join(list_r,','), '+FLAGS', '\Seen') if len(list_o)>0: con.store( join(list_o,','), '+FLAGS', '\Seen') if len(list_d)>0: con.store( join(list_d,','), '+FLAGS', '\Deleted') if len(list_f)>0: con.store( join(list_f,','), '+FLAGS', '\Flagged') if len(list_a)>0: con.store( join(list_a,','), '+FLAGS', '\Answered') if len(list_t)>0: con.store( join(list_t,','), '+FLAGS', '\Draft')
con.close()
#------------------------------------------------------------ try: username = sys.argv[1] password = sys.argv[2] except: print "Usage: %s username password" % (sys.argv[0]) sys.exit(1)
con = imaplib.IMAP4() con.login(username, password)
for i in con.lsub()[1]: fix_folder(con, i[8:-1])
con.logout()