Sie sind nicht angemeldet.

[Tipps & Tricks] KMail mdir to mailbox

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

20.07.2011, 08:44

KMail mdir to mailbox

#!/bin/hi *

Nachdem ich jahrelanger KDE User war und mir der gesamte semantic-desktop in KDE 4 schon immer recht unheimlich war ... und nachdem KMail in der letzten Version (4.6.4) auf eben diesen Zug aufgesprungen ist ... und damit auf Akonadi/Nepomuk/Strigi etc. aufgesprungen ist ... und damit völlig verbuggt und unbrauchbar rausgekommen ist ... aber ich hören kann wie das System freie Ressourcen für relativ geringen Nutzen verschlingt ...

... habe ich KDE Lebewohl gesagt und bin auf XFCE umgestiegen.

Alles schneller, schöner, einfacher ... und schlanker! Alles da ohne zusäzlichen "das MUSST du haben (obwohl kaum einer weis warum und eigentlich funktioniert es noch nicht richtig und, ach ja, es ist kaum zum Durchblicken und es gibt noch keine Hilfe und Config-Dialoge müssen wir noch implementieren ...)"

Es gibt aber ein Problem: wie kriege ich meine KMail-Emails in ein anderes EMail-Programm? Bei den anderen gibt es natürlich eine Menge, aber letztendlich habe ich mich doch für Mozilla Thunderbird entschieden. Blöd nur: KMail speichert emails i.d.R. im maildir-Format und Thunderbird im mbox-Format ... und Thunderbird kann kein maildir. =(

Und da habe ich mir was gebastelt. Tata: Convert your KMail maildir folders to Thunderbird mbox format.

Das ganze ist ein kleines Python Script welches In-Place (!!) die Konvertierung durchnimmt. Macht es also vlt. nicht im Orginalfolder ~/.kde/share/apps/kmail/mail

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/usr/bin/python

#
# mdir2mbox
#
# This script converts kmail maildir folders to Thunderbird mbox files
# stored in the current working folder.
#
# Normally this is ~/.kde/share/apps/kmail/mail
#
# USE AT YOUR OWN RISK! Do not blame me if you loose some of your emails. 
#
# MAKE A BACKUP! ... or use a copy of your email-folder.
#
# This script is licensed under GPL2 (see: http://www.gnu.org/licenses/gpl-2.0.html)
#
# 2011, Oliver Maurhart <dyle@dyle.org>
# 

import email
import os
import re
import sys
import time


# adds an email file (if it is one) to an opened mbox file
#
def addEMail(mbox, email_file_name):

    # open the email file
    email_file = open(email_file_name, 'r')
    email_object = email.message_from_file(email_file)
    if email_object != None and email_object.has_key('From'):

        print('Found email: ' + email_file_name)

        # add it to the mbox
        mbox.write('From - ' + email_object.get('Date'))

        # set email file to beginning and concat content
        email_file.seek(0)
        mbox.write(email_file.read())
        email_file.close()
        mbox.write('\n\n\0\n')

        # kill the old mdir file
        os.remove(email_file_name)



# convert a mdir structure to a mbox file
#
def mdirToMBox():

    print('Converting mdir to mbox ...\n')
    for root, dirs, files in os.walk('.', False):
        if 'cur' in dirs and 'new' in dirs and 'tmp' in dirs:
            
            # found a potential folder
            print('Potential mdir folder: ' + root)

            # rename folder to '.mdir'
            new_root = root + '.mdir'
            os.rename(root, new_root)
            
            # create a mbox file
            mbox = open(root, 'w+')
            folder_name = new_root + os.sep + 'cur'
            for email_file_name in os.listdir(folder_name):
                addEMail(mbox, folder_name + os.sep + email_file_name)
            os.rmdir(folder_name)
                
            folder_name = new_root + os.sep + 'new'
            for email_file_name in os.listdir(folder_name):
                addEMail(mbox, folder_name + os.sep + email_file_name)
            os.rmdir(folder_name)

            folder_name = new_root + os.sep + 'tmp'
            for email_file_name in os.listdir(folder_name):
                addEMail(mbox, folder_name + os.sep + email_file_name)
            os.rmdir(folder_name)
              
            # remove potential mdir folder
            os.rmdir(new_root)
        
            mbox.close()


# move all hidden folders of the name pattern
#   .NAME.directory
# to
#   NAME.sub
#
def moveHiddenFolders():

    print('Renaming hidden folders ...\n')
    for root, dirs, files in os.walk('.', False):
        m =  re.search('^\.(.*)\.directory$', os.path.basename(root))
        if m != None:
            print('Found: ' + root)
            mbox_name = os.path.dirname(root) + os.sep +  m.group(1)
            newRoot =  mbox_name + '.sbd'
            os.rename(root, newRoot)

            # touch a file with the name (without extension)
            os.utime(mbox_name, None)



# remove any *.index and *.ids files
#
def removeIndexAndIDSFiles():

    print('Removing index files ...\n')
    for root, dirs, files in os.walk('.', False):

        for file in files:

            file_full_path = root + os.sep + file

            m =  re.search('^\..*\.index$', file)
            if m != None:
                print('Found: ' + file_full_path)
                os.remove(file_full_path)

            m =  re.search('^\..*\.index\.ids$', file)
            if m != None:
                print('Found: ' + file_full_path)
                os.remove(file_full_path)

            m =  re.search('^\..*\.index\.sorted$', file)
            if m != None:
                print('Found: ' + file_full_path)
                os.remove(file_full_path)


# main
def main():

    print('Pass 1 ...\n')
    mdirToMBox()

    print('Pass 2 ...\n')
    moveHiddenFolders()

    print('Pass 3 ...\n')
    removeIndexAndIDSFiles()


# start
main()



Falls jemand Zeit und Lust hat es auszuprobieren: ich bin für Feedback dankbar. =)

PS: Die Endung *.txt im Attachment ist aufgrund der Forensoftware ...
»dyle« hat folgende Datei angehängt:
  • mdir2mbox.txt (4,05 kB - 3 mal heruntergeladen - zuletzt: 28.11.2015, 12:25)
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>