Created
September 25, 2015 14:19
-
-
Save nmandery/bf1e11c079408d0ffcac to your computer and use it in GitHub Desktop.
Convert mails in maildir format to mailbox format
This file contains 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 | |
# -*- coding: utf-8 -*- | |
""" | |
From http://stackoverflow.com/questions/2501182/convert-maildir-to-mbox | |
Frédéric Grosshans, 19 January 2012 | |
Nathan R. Yergler, 6 June 2010 | |
This file does not contain sufficient creative expression to invoke | |
assertion of copyright. No warranty is expressed or implied; use at | |
your own risk. | |
--- | |
Uses Python's included mailbox library to convert mail archives from | |
maildir [http://en.wikipedia.org/wiki/Maildir] to | |
mbox [http://en.wikipedia.org/wiki/Mbox] format, icluding subfolder. | |
See http://docs.python.org/library/mailbox.html#mailbox.Mailbox for | |
full documentation on this library. | |
--- | |
To run, save as md2mb.py and run: | |
$ python md2mb.py [maildir_path] [mbox_filename] | |
[maildir_path] should be the the path to the actual maildir (containing new, | |
cur, tmp, and the subfolders, which are hidden directories with names like | |
.subfolde.subsubfolder.subsubsbfolder); | |
[mbox_filename] will be newly created, as well as a [mbox_filename].sbd the | |
directory. | |
""" | |
import mailbox | |
import sys | |
import email | |
import os | |
def maildir2mailbox(maildirname, mboxfilename): | |
""" | |
slightly adapted from maildir2mbox.py, | |
Nathan R. Yergler, 6 June 2010 | |
http://yergler.net/blog/2010/06/06/batteries-included-or-maildir-to-mbox-again/ | |
""" | |
# open the existing maildir and the target mbox file | |
maildir = mailbox.Maildir(maildirname, email.message_from_file) | |
mbox = mailbox.mbox(mboxfilename) | |
# lock the mbox | |
mbox.lock() | |
# iterate over messages in the maildir and add to the mbox | |
for msg in maildir: | |
mbox.add(msg) | |
# close and unlock | |
mbox.close() | |
maildir.close() | |
#Creates the main mailbox | |
dirname=sys.argv[-2] | |
mboxname=sys.argv[-1] | |
print(dirname +' -> ' +mboxname) | |
mboxdirname=mboxname+'.sbd' | |
maildir2mailbox(dirname,mboxname) | |
if not os.path.exists(mboxdirname): os.makedirs(mboxdirname) | |
listofdirs=[dn for dn in os.walk(dirname).next()[1] if dn not in ['new', 'cur', 'tmp']] | |
for curfold in listofdirs: | |
curlist=[mboxname]+curfold.split('.') | |
curpath=os.path.join(*[dn+'.sbd' for dn in curlist if dn]) | |
if not os.path.exists(curpath): os.makedirs(curpath) | |
print('| ' +curfold +' -> '+curpath[:-4]) | |
maildir2mailbox(os.path.join(dirname,curfold),curpath[:-4]) | |
print('Done') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment