Convert Maildir to mbox

后端 未结 2 1227
灰色年华
灰色年华 2021-02-01 10:14

Im changing hosts and i need to convert my maildir accounts on my old server to mbox on my new server.

Any ideas on the best way to do this?

I found this:

<
2条回答
  •  南方客
    南方客 (楼主)
    2021-02-01 10:53

    If one needs to convert a maildir account into a mailbox account without setting mailservers, one can use the mailbox library of python. If one has a single maildir folder to convert, one can use this small (10 lines+comments) python script found here. If one has subfolder, one needs to explore the subfolder structure, which is different between the two formats. This gives the following script :

    #!/usr/bin/env python 
    # -*- coding: utf-8 -*-
    """
    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')
    

提交回复
热议问题