سؤال

أنا تغيير المضيف وأحتاج إلى تحويل حسابات MailDir الخاصة بي على الخادم القديم إلى Mox على خادمي الجديد.

أي أفكار حول أفضل طريقة للقيام بذلك؟

لقد وجدت هذا:

لأني في new/* cur/* ؛ do formail <"$ i" >>

لكني لا أفهم ذلك حقًا. لدي معرفة أساسية بـ Linux ولدي الوصول إلى الجذر إلى الخادم الخاص بي عبر SSH.

معظم مجلد Maildir لديه المحتويات التالية:


cur
الجديد
TMP
dovecot.index.log
Dovecot-uidlist
dovecot.index
dovecot.index.log.2
dovecot.index.cache
كلمات Dovecot-Key
الاشتراكات


هل أحتاج إلى كل ذلك أم يمكنني تجاهل ملفات Dovecot؟

أي نصيحة سيكون موضع تقدير كبير.

ج

هل كانت مفيدة؟

المحلول

إذا كان لديك إمكانية الوصول إلى كلا الخادمين عبر IMAP (أو يمكنك ترتيبها مؤقتًا) ، فقد ترغب في التفكير في استخدام أداة imapsync ، على سبيل المثال:

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

إذا لم ينجح ذلك ، فيجب أن تكون قادرًا على تجاهل ملفات Dovecot ، ولكن احذر من المحتمل أن تفقد معلومات مثل الرسائل التي يتم قراءتها وأي أعلام تم تعيينها على الرسائل. (طريقة imapsync ستحافظ على كل هذه الأشياء.)

نصائح أخرى

إذا احتاج المرء إلى تحويل حساب MailDir إلى حساب صندوق بريد دون تعيين MailsServers ، فيمكن للمرء استخدام مكتبة صندوق البريد في Python. إذا كان لدى المرء مجلد MailDir واحد لتحويله ، فيمكن للمرء استخدام هذا البرنامج النصي الصغير (10 أسطر+تعليقات) هنا. إذا كان لدى أحدهم مقلعًا فرعيًا ، فيجب على المرء استكشاف هيكل المجلد الفرعي ، وهو ما يختلف بين التنسيقين. هذا يعطي البرنامج النصي التالي:

#!/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')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top