Convertire Maildir in mbox
Domanda
Im cambiare padroni di casa e ho bisogno di convertire i miei conti maildir sul mio vecchio server per mbox sul mio nuovo server.
Tutte le idee sul modo migliore per fare questo?
Ho trovato questo:
for i in nuova / * cur / *; fare formail <”$ i” >> ../ mbox; fatto
Ma io veramente non capisco. Ho una conoscenza di base di Linux e ho accesso root al mio server tramite ssh.
La maggior parte della cartella Maildir ha il seguente contenuto:
cur
nuova
tmp
dovecot.index.log
colombaia-uidlist
dovecot.index
dovecot.index.log.2
dovecot.index.cache
piccioni di parole chiave
abbonamenti
Ho bisogno tutto questo o posso ignorare i file colombaia?
Qualche consiglio sarebbe molto apprezzato.
C
Soluzione
Se si ha accesso a entrambi i server tramite IMAP (o può temporaneamente organizzare), si potrebbe desiderare di considerare l'utilizzo di uno strumento di imapsync, ad esempio:
http://freshmeat.net/projects/imapsync/
Se questo non funziona, si dovrebbe essere in grado di ignorare i file colombaia, ma attenzione che è probabile perdere le informazioni simili, che vengono letti i messaggi e le eventuali flag impostati sui messaggi. (Il metodo imapsync conserverebbe tutte quelle cose.)
Altri suggerimenti
Se si ha la necessità di convertire un account maildir in un conto cassetta postale senza server di posta di impostazione, si può utilizzare la libreria casella di posta di pitone. Se uno ha una singola cartella maildir per convertire, si può usare questo piccolo (10 righe + commenti) script python trovati qui . Se uno ha sottocartella, si ha la necessità di esplorare la struttura delle sottocartelle, che è diverso tra i due formati. Questo dà il seguente 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')