--- /dev/null
+#! /usr/bin/env python2
+""" Split a Unix-style mailbox into individual files
+
+Written by Aquarius <aquarius@kryogenix.org>
+Usage: splitmbox.py <mailbox-file> <directory>
+
+This will create files numbered 01,02,03... in <directory>. The
+number of prefixed zeroes will make all filenames in the
+directory the same length. """
+
+import mailbox,sys,getopt,string,os,subprocess
+
+VERSION = '0.1'
+USAGE = """Usage: splitmbox.py [ OPTION ] <mailbox-file> <directory>
+
+ -h, --help
+ Show this help text and exit
+ -v, --version
+ Show file version and exit
+
+This will create files numbered 01,02,03... in <directory>. The
+number of prefixed zeroes will make all filenames in the
+directory the same length. """
+
+
+try:
+ optlist, args = getopt.getopt(sys.argv[1:],'hv',['help','version'])
+except getopt.error, error_text:
+ print error_text,'\n'
+ print USAGE
+ sys.exit(1)
+
+for tuple in optlist:
+ if tuple[0] == '-h' or tuple[0] == '--help':
+ print USAGE
+ sys.exit(0)
+ if tuple[0] == '-v' or tuple[0] == '--version':
+ print VERSION
+ sys.exit(0)
+
+if len(args) != 2:
+ print USAGE
+
+mbox_fname, output_dir = args
+if output_dir[-1] != '/':
+ output_dir = output_dir + '/'
+
+# Make the output directory, if required
+try:
+ os.mkdir(output_dir)
+except os.error,ertxt:
+ if string.find(str(ertxt),'File exists') == -1:
+ print 'Failed to create or use directory',output_dir,'[',ertxt,']'
+ sys.exit(1)
+
+try:
+ mbox_file = open(mbox_fname)
+except:
+ print "Failed to open file",mbox_fname
+ sys.exit(1)
+
+mbox = mailbox.UnixMailbox(mbox_file)
+
+# Find out how many messages in the mailbox
+count = 0
+while 1:
+ msg = mbox.next()
+ if not msg:
+ break
+ count = count + 1
+
+# Now do it again, outputting files
+
+mbox_file.close()
+mbox_file = open(mbox_fname)
+mbox = mailbox.UnixMailbox(mbox_file)
+
+#digits = len(str(count))
+digits = 3
+count = 0
+while 1:
+ msg = mbox.next()
+ if not msg:
+ break
+ fname = output_dir+'msg.'+('0'*digits+str(count))[-digits:]
+ print 'Writing ', fname
+ outfile = open(fname,'w')
+ outfile.write('From foo@baz ');
+ outfile.write(subprocess.check_output('date'));
+ for s in msg.headers:
+ outfile.write(s)
+ outfile.write('\n')
+ for s in msg.fp.readlines():
+ outfile.write(s)
+ outfile.close()
+ count = count + 1