#!/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("")
