Convert Maildir to mbox

后端 未结 2 1226
灰色年华
灰色年华 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')
    
    0 讨论(0)
  • 2021-02-01 10:56

    If you have access to both servers via imap (or can temporarily arrange it), you might want to consider using an imapsync tool, eg:

    http://freshmeat.net/projects/imapsync/

    If that won't work, you should be able to ignore the dovecot files, but beware that you'll likely lose information like which messages are read and any flags set on the messages. (The imapsync method would preserve all those things.)

    0 讨论(0)
提交回复
热议问题