Skip to content

Instantly share code, notes, and snippets.

@jiphex
Created October 4, 2010 12:34
Show Gist options
  • Save jiphex/609622 to your computer and use it in GitHub Desktop.
Save jiphex/609622 to your computer and use it in GitHub Desktop.
#! /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)
@jiphex
Copy link
Author

jiphex commented Oct 4, 2010

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment