Created
October 4, 2010 12:34
-
-
Save jiphex/609622 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python | |
# | |
# Goes through an mbox (filename given in argv[1]) and | |
# purges messages older than thirty days. | |
# (and newer than year 3000 to pick up corrupt headers) | |
# | |
import sys | |
import platform | |
try: | |
pv = platform.python_version_tuple() | |
if(pv[0] < 2 or pv[1] < 6): | |
raise ImportError | |
import mailbox | |
import email.utils | |
import time,datetime | |
except ImportError: | |
print "Incompatible version of Python: %s" % platform.python_version() | |
sys.exit(1) | |
if(len(sys.argv) < 2): | |
print "Usage: %s mboxfile" % sys.argv[0] | |
sys.exit(1) | |
mb = mailbox.mbox(sys.argv[1]) | |
tokeep=0 | |
tolose=0 | |
errors=0 | |
def deletemessage(key): | |
mb.remove(key) | |
if(mb): | |
try: | |
mb.lock() | |
keepdate = datetime.datetime.now()-datetime.timedelta(days=30) | |
print "Keeping everything since %s" % keepdate | |
time.sleep(5) | |
for messagek in mb.keys(): | |
message = mb.get(messagek) | |
try: | |
emdate = datetime.datetime.fromtimestamp(time.mktime(email.utils.parsedate(message['Date']))) | |
# keepdate = datetime.datetime(2010,8,29) | |
if(emdate < keepdate or emdate > datetime.datetime(3000,1,1)): | |
print "emdate is to be LOST: %s" % emdate | |
tolose+=1 | |
deletemessage(messagek) | |
else: | |
print "emdate is to be KEPT: %s" % emdate | |
tokeep+=1 | |
except TypeError: | |
print "error on messagedate: %s" % message['Date'] | |
errors+=1 | |
deletemessage(messagek) | |
except ValueError: | |
print "error on messagedate: %s" % message['Date'] | |
errors+=1 | |
deletemessage(messagek) | |
finally: | |
mb.flush() | |
mb.unlock() | |
print "Going to keep %d lose %d" % (tokeep,tolose) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
No parameter support on this, it's all just in the file but you can use this to delete a range of messages in an mbox file.
See:
http://docs.python.org/library/mailbox.html