Конвертировать Maildir в mbox

Я меняю хосты, и мне нужно преобразовать мои учетные записи maildir на моем старом сервере в mbox на моем новом сервере.

Любые идеи о том, как лучше всего это сделать?

Я нашел это:

for i in new/* cur/*;do formail ‹”$i” >> ../mbox;done

Но я действительно этого не понимаю. У меня есть базовые знания Linux, и у меня есть root-доступ к моему серверу через ssh.

большая часть папки Maildir имеет следующее содержимое:


cur
новый
tmp
dovecot.index.log
dovecot-uidlist
dovecot.index
dovecot.index.log.2
dovecot.index.cache
dovecot-keywords
подписки


Нужно ли мне все это или я могу игнорировать файлы dovecot?

Мы будем очень признательны за любые советы.

C


person Cybercampbell    schedule 23.03.2010    source источник
comment
Это должно быть на serverfault.com   -  person Rickard von Essen    schedule 25.03.2010
comment
скрипты преобразования MBOX в Maildir   -  person davidcondrey    schedule 16.10.2016


Ответы (2)


Если у вас есть доступ к обоим серверам через imap (или вы можете временно организовать его), вы можете рассмотреть возможность использования инструмента imapsync, например:

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

Если это не сработает, вы сможете игнорировать файлы dovecot, но помните, что вы, скорее всего, потеряете информацию, например, какие сообщения прочитаны и какие флаги установлены для сообщений. (Метод imapsync сохранит все эти вещи.)

person JosephH    schedule 25.03.2010

Если нужно преобразовать учетную запись maildir в учетную запись почтового ящика без установки почтовых серверов, можно использовать библиотеку почтовых ящиков python. Если у вас есть одна папка maildir для преобразования, вы можете использовать этот небольшой (10 строк + комментарии) скрипт Python, найденный здесь. Если у вас есть подпапка, вам нужно изучить структуру подпапки, которая отличается между двумя форматами. Это дает следующий скрипт:

#!/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')
person Frédéric Grosshans    schedule 19.01.2012
comment
Я создал версию Python 3 для решения проблем с кодировкой файловой системы, которые могут возникнуть при перемещении каталога maildir из раздела Linux в раздел Windows. Загрузите его отсюда: github.com/bluebird75/maildir2mbox. - person Philippe F; 06.04.2013
comment
Это отлично сработало для меня. Импорт писем dovecot в Thunderbird. - person Gambo; 29.07.2014
comment
При работе с версиями Python выше 2.7 строка maildir = mailbox.Maildir(maildirname, email.message_from_file) должна читаться maildir = mailbox.Maildir(maildirname) - person Juanjo; 06.06.2020
comment
Когда я запускаю это, импортированные результаты в Thunderbird имеют правильные заголовки (тема, дата, время и т. д.), но тело всех сообщений выглядит как º×½Á×ïÓ›‡Mg½ŽC&... Что я делаю неправильно? - person posix; 17.05.2021