#!/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 ...