• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Email Migration... wie gehe ich vor ???

Status
Für weitere Antworten geschlossen.

rethus

Advanced Hacker
Ich habe einen Server übernommen (bzw. die Kunden eines anderen Hosters).
Nun würde mich interessieren, wie ich bei dem Abgleich von den Email-Konten am besten vorgehe.

Auf dem alten Server finde ich im jeweiligen Mailverzeichnis 3 Dateien:

INBOX.Drafts
INBOX.Sent
INBOX.Trash

Bei meinem Server nutze ich qmail, und der scheint diese Dateiform nicht zu haben...

Wie kann ich nun die noch auf dem alten Server liegenden Emails ins neue System intregrieren?
 
OP
R

rethus

Advanced Hacker
Nun habe ich festgestellt, das in der Datei INBOX.xxx jeweils alle Dateien enthalten sind.

Bei qmail bzw. Horde liegen die alle in seperaten Dateien vor (also jede Nachricht, eine eigene Datei).

Gibts da tools oder Scripte, die das eine Format in das andere Umwandeln?
 
OP
R

rethus

Advanced Hacker
So, also das alte Format ist das MBOX-Format!
Das neue Format ist das Maildir Format.

Nun habe ich mich etwas umgesehen,und einiges an Scripten gefunden, die MBOX in MAILDIR umwandeln sollen. Das schlimme ist, das die Scripte meist auf die Umgebungsvariablen zurückgreifen, und so die Einsatzfähigkeit ddes Scriptes erheblich einschränken.

Die Lösung des Problemes ist nun hier zu finden:
http://www.asdf.dk/text/mbox2maildir.html

Das ist ein gepatchtes Script, welches auch die Übergabe von Befehlsparametern annimmt, und deswegen brauchbar.

Zudem wird ein Tip gegeben, wie man mehrere Mailboxen umwandeln kann:


$ mbox2maildir ~/mbox ~/Maildir # change ~/mbox to what is appropriate on
# your system
$ cd ~/Mail # this is where you keep you sorted mail
$ for m in *; do mbox2maildir ${m} ~/Maildir/.${m}; done

Ausserdem ist da noch ein kleines Script, das den Zustand der Mails wieder herstellt (also gelesen, geantwortet auf... etc.):
#!/bin/sh -e
# uw2md.sh
oldpwd=$PWD

if test $1; then
cd $1
fi

echo "Converting $PWD..."

if [ ! -d new ] || [ ! -d cur ]; then
echo "$PWD is not a Maildir"
exit 1
fi
# Convert Read and Answered (to Seen and Replied-to)
for f in \
`cd new; ls -f | xargs grep -l 'Status: R'|xargs grep -l -e 'X-Status: A'`;
do mv new/$f cur/${f}:2,RS;
done
# Convert Read (to Seen)
for f in \
`cd new; ls -f | xargs grep -l 'Status: R'`;
do mv new/$f cur/${f}:2,S;
done

cd $oldpwd

Use something like the following to bulk convert all of your mail boxes:

for d in ~/Maildir/.????*; do uw2md.sh $d; done


Und hier noch der fertig gepatchte Code des Scriptes:
Code:
#!/usr/local/bin/perl
#
# mbox2maildir: coverts mbox file to maildir directory - the reverse of
# maildir2mbox from the qmail distribution.
#
# Usage: mbox2maildir uses the same environment variables as maildir2mbox:
# MAILDIR is the name of your maildir directory; MAIL is the name of your
# mbox file; MAILTMP is ignored.  MAIL is deleted after the conversion.
#
# WARNING: there is no locking; don't run more than one of these!  you
# have been warned.
#
# based on convert-and-create by Russell Nelson <nelson@qmail.org>
# kludged into this by Ivan Kohler <ivan@voicenet.com> 97-sep-17

if(scalar(@ARGV) != 2) {
  die("Usage: mbox2maildir src dest\n");
}
$MAILDIR = pop;
$MAIL    = pop;

require 'stat.pl';
 
local $SIG{HUP} = 'IGNORE';
local $SIG{INT} = 'IGNORE';
local $SIG{QUIT} = 'IGNORE'; 
local $SIG{TERM} = 'IGNORE';
local $SIG{TSTP} = 'IGNORE';
 
($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) =
  getpwuid($<);
 
die "fatal: home dir $dir doesn't exist\n" unless -e $dir;
&Stat($dir);
die "fatal: $name is $uid, but $dir is owned by $st_uid\n" if $uid != $st_uid;
 
chdir($dir) or die "fatal: unable to chdir to $dir\n";
$spoolname = "$MAILDIR";
-d $spoolname or mkdir $spoolname,0700
  or die("fatal: $spoolname doesn't exist and can't be created.\n");
 
chdir($spoolname) or die("fatal: unable to chdir to $spoolname.\n");
-d "tmp" or mkdir("tmp",0700) or die("fatal: unable to make tmp/ subdir\n");
-d "new" or mkdir("new",0700) or die("fatal: unable to make new/ subdir\n");
-d "cur" or mkdir("cur",0700) or die("fatal: unable to make cur/ subdir\n");
 
open(SPOOL, "<$MAIL")
  or die "Unable to open $MAIL\n";
$i = time;
while(<SPOOL>) {
  if (/^From /) {
    $fn = sprintf("new/%d.$$.mbox", $i);
    open(OUT, ">$fn") or die("fatal: unable to create new message");
    $i++;
    next;
  }
  s/^>From /From /;
  print OUT or die("fatal: unable to write to new message");
}
close(SPOOL);
close(OUT);
#unlink("$ENV{MAIL}");
print "Not unlinking $MAIL\n"
PS: Ich habe den Spass hier mit einfließen lassen, weil es ja schon mal vorkommt, das Webseiten Offline geschaltet werden... so hat man zumindestens zwei Stellen wo man die Lösung des Problems findet.
 
OP
R

rethus

Advanced Hacker
Kann mir vielleicht jemand gerade ein wenig Hilfestellung geben, wie ich das Script anpasse, das ich nicht immer den gesamten Pfad schreiben muss, sondern vielleicht einfach ./?

Derzeit muss ich Ihm das so übergeben:
Code:
for m in /var/qmail/mailnames/xxx.com/xxxxx/INBOX*; do perl ../mbox2maildir ${m} /var/qmail/mailnames/xxx.com/xxxx/Maildir/.${m}; done
 
Status
Für weitere Antworten geschlossen.
Oben