#!/usr/bin/env python """ This code presumes this model: class Message(models.Model): subject = models.CharField(maxlength=250) date = models.DateField() body = models.TextField() raw = models.TextField() """ import os, mailbox, email, datetime, shutil, sys from email.Utils import parsedate # change to email.utils for Python 2.5 set os.environ["DJANGO_SETTINGS_MODULE"] = "YOURPROJECT.settings" # set sys.path as needed from models import Message from MySQLdb import OperationalError MAILBOX = '/path/to/mbox' mbox = file(MAILBOX, 'rb') for message in mailbox.PortableUnixMailbox(mbox, email.message_from_file): try: date = datetime.datetime(*parsedate(message['date'])[:6]) except TypeError: # silently ignore badly-formed dates date = datetime.datetime.now() try: msg = Message( subject=message['subject'], date=date, body=message.get_payload(decode=False), raw=message.as_string(), ) print "Adding: %s..." % msg.subject[:40] msg.save() except OperationalError: print "Trouble parsing message (%s...)" % msg.subject[:40] print "Archive now contains %s messages" % Message.objects.count() # Depending on your application, you might clear the mbox now: open(MAILBOX, "w").write("")