nach Serverumzug falsches erstell Datum der Emaildatei



wienni

New Member
Hallo @ All,

Ich betreibe schon seit mehreren Jahren einen Vserver zum Betrieb von Webseiten und eMail Adressen. Dieser lief mit Debian 6 und Confixx als Webinterface. Aufgrund des Alters und der nicht mehr weiterentwickelten Confixx Version, habe ich mich entschlossen alles auf einen neuen Performanteren Root Server umzuziehen.
Dazu habe ich mir einen Root Server von Hetzner bestellt diesen mit Debian 7 und Plesk 12 installiert und konfiguriert. Den Umzug habe ich mit dem Plesk Migrationsmanager vollzogen was für mein Empfinden sehr einfach und gut funktioniert hat.
Der Server Läuft soweit wieder mit allen meinen Websiten, eMail-Postfächer und Diensten.

Nun zu meinem kleinen Problem, und zwar nutze ich zum abrufen meiner Emails mit meinem IPhone.
Den IOs email Client bei diesem habe ich jetzt festgestellt das allen Importierten Emails vom alten Server den Zeitstempel vom Tag des Umzuges besitzen. Dadurch hat sich auch die Reihenfolge der email verändert und alte Emails können nur sehr schlecht gefunden werden. Da diese alle das gleiche Datum besitzen.
Wenn ich mir das Postfach mit Roundcube als Webmail oder mit Thunderbird anschaue. Werden die Emails in Richtiger Reihenfolge nach Datum (vor dem Importieren) angezeigt.
Das hat mich auf den Trichtergebracht das die eMail im IOs nach dem Datum der Datei sortiert werden und nicht nach dem Eingangsdatum im Header der email.

Ich bin im Skripten für Linux nicht ganz fit und daher meine Frage.
Gibt es eine Möglichkeit, das ich mit einem Script das Empfangsdatum der email auslese und mit dem befehl „touch“ das erstell Datum neu setze?
Oder es kennt einer eine andere einfachere Möglichkeit das Dateidatum zu Korrigieren?

Schon mal vielen Dank für eure Hilfe.

Viele Grüße

Wienni
 
Last edited by a moderator:
Die emails Liegen z.B. in "/var/qmail/mailnames/domain.de/info/Maildir/cur"

Kann man da was machen ?
 
Das verstehe ich nicht ganz lies Dein Client mtime von der Maildatei?
Normalerweise lesen die Clients das Datum aus dem Email-Header. Thunderbird nimmt z.B die Zeit des Versendens. Mein Android-Client zeigt mir die Empfangszeit am Server an.
mtime kannst du mit touch manipulieren, das ändert bei mir nur die Zeit im Mailverzeichnis aber nicht die der Clients.

Du schreibst importieren, benutzt Du kein IMAP?

P.S. habe es nicht fertig gelesen ...
Bei dem Script kann ich Dir behilflich sein!
 
Das verstehe ich nicht ganz lies Dein Client mtime von der Maildatei?
Merkwürdig und völlig unüblich, aber bei Apple wundert mich nix mehr.

Bei dem Script kann ich Dir behilflich sein!
Dito, wobei das Parsen des richtigen Datums nicht sehr einfach wird (Zeitzone).
Welches Datum soll denn überhaupt genommen werden? Received oder Date? Wenn Received, dann welches?
 
Je nach IMAP-Server wird das Empfangsdatum der Mail zusammen mit anderen Metadaten (z.B. auch die Gelesen-Flags) gespeichert.
Bei Cyrus etwa ist das eine externe Datenbank.

Diese Einträge muß man bei einem Umzug mit transferieren (bei imapsync z.B. mittels "--syncinternaldates") oder aus den Headern der Mail neu generieren (--idatefromheader).

Apple verwendet diese Metadaten und nicht die Dateien aus dem Header (dazu müßte man jede Mail herunterladen), bei Thunderbird ist es konfigurierbar.
 
Code:
#!/bin/bash

dir="/var/qmail/mailnames/*/*/Maildir/cur"  # Hier das Mail-Dir als absoluter Pfad angeben /var/vmail...
file=(`find $dir -type f`)
typeset -a date

for i in "${!file[@]}"
do
    date[$i]=$(grep -m 1 "Date: " ${file[$i]} | cut -d: -f2-4)
    touch --date="${date[$i]}" ${file[$i]}
done
Das ist zwar nicht die Empfangszeit sonder die Zeit die der Client beim Versenden ind Header schreib, war jetzt auf die schnelle am besten auszuwerten. Zeitzone scheint auch zu funktionieren.
Das geht vielleicht auch anders?
Bitte erst einmal mit einer Kopie vom Mail-Verzeichnis testen.

P.S.
Received oder Date? Wenn Received, dann welches?
Ich habe bei mir Mails im Postfach von diversen Mailservern jeder schreibt es anders inkl Dateiname
 
Last edited by a moderator:
Je nach IMAP-Server wird das Empfangsdatum der Mail zusammen mit anderen Metadaten (z.B. auch die Gelesen-Flags) gespeichert.
Bei Cyrus etwa ist das eine externe Datenbank.

Diese Einträge muß man bei einem Umzug mit transferieren (bei imapsync z.B. mittels "--syncinternaldates") oder aus den Headern der Mail neu generieren (--idatefromheader).

Apple verwendet diese Metadaten und nicht die Dateien aus dem Header (dazu müßte man jede Mail herunterladen), bei Thunderbird ist es konfigurierbar.

Hallo Zusammen,

und schon mal vielen Dank für eure Beteiligung!!

@ Whistler ist es dann möglich mit meinem Courier-IMAP Server die vom IPhone benötigten Metadaten neu generieren zu lassen? Ich habe schon versucht dazu was im Internet zu finden, habe aber leider keine Idee wo ich suchen muss.

Gruß Wienni
 
Das mit dem mtime der Datei ist wahrscheinlich ein Holzweg.
Ich habe hier mal etwas gefunden
http://www.lamertz.net/2010/05/29/arger-mit-imap-servern-und-dem-ipad
Schaue mal bitte nach den Dateinamen im Mail Verzeichnis. Die Zahlen bis zum ersten Punkt sollte eigentlich die UNIX Zeit sein mit der die Datei angelegt wurde, sprich das Einlieferungszeit am Server.
Wie hast du denn Dein Mail-Verzeichnis auf den neuen Server umgezogen, vielleicht wurden da die Dateinamen geändert?
 
Super ein Schritt weiter !!

Code:
#!/bin/bash

dir="/var/qmail/mailnames/*/*/Maildir/cur"  # Hier das Mail-Dir als absoluter Pfad angeben /var/vmail...
file=(`find $dir -type f`)
typeset -a date

for i in "${!file[@]}"
do
    date[$i]=$(grep -m 1 "Date: " ${file[$i]} | cut -d: -f2-4)
    echo "Date: ${date[$i]} File: ${file[$i]}" ## Hinzugefügt von Wienni
    touch --date="${date[$i]}" ${file[$i]}
done

Hallo,

mit eurer Hilfe bin ich schon mal einen Schritt weiter gekommen.
Mit dem Script vom „rolapp“ habe ich die die Zeitstempel der email Dateien auf das Absendedatum gesetzt. Zur besseren Übersicht habe ich mir im Script noch eine „echo“ spalte hinzugefügt, um zusehen was für ein Datum meine Datei bekommt.
Dann die „courierimapuiddb“ im Verzeichnis Maildir gelöscht und siehe da nach Aktualisieren des IMAP Postfach im IPhone, emails mit altem Datum im Postfach.

Jetzt möchte ich gerne noch einen Schritt weiter gehen.
Aufgrund der Möglichkeit im IMAP Postfach Ordner anzulegen, und diese im Courier-Server mit „.Ordnername/cur“ abgelegt werden. Müssen diese Zeitstempel auch geändert werden.
Hierzu bräuchte ich im Script eine Funktion, die mir alle Ordner auflistet und selbständig durch die Ordner springt.
Dazu komm ja auch noch, dass es mehr wie nur einer Domain oder E-Mail Benutzer gibt. Diese sollten wenn möglich auch direkt geändert werden.
Das würde alles erleichtern und die fehlerrate durch Falscheingabe oder vergessen von Verzeichnissen erheblich reduzieren.
 
@wienni und jetzt kommt's, ich habe soeben festgestellt, ich habe doch bei meinem Androiden mit Aquamail das gleiche Problem wie Du. Ich habe mir mal ein paar ältere Mails angesehen und da die Zeit stimmt nicht.

Also nur die Index-Dateien löschen bringt nichts.
mtime geändert und es geht. ist schon komisch manchmal.

zu Deiner Frage für verschieden Postfächer und Domains habe ich schon Platzhalter eingebaut. Für die Unterordner habe ich das nochmal laufen lassen mt, dem zusetzlichen Platzhalter
/var/qmail/mailnames/*/*/Maildir/.*/cur"

Da haben wir doch mal wieder etwas dazu gelernt.
Das war mir so noch nicht aufgefallen.

P.S. falls du lieber wert auf die Einlieferungszeit legst, dann könnte man die aus dem Dateiname extrahieren, wird aber keine Rolle spielen
 
Last edited by a moderator:
Hallo, dieses Problem habe ich nach einem Server Umzug auch.

Auf dem alten Server lief Debian 7 mit Plesk 12.5 auf dem neuen läuft Debian 8 mit Plesk Onyx

Das Backup von Plesk 12.5 habe ich in Plesk Onyx eingespielt, wo wurden auch meine Emails wiederhergestellt.

Jetzt habe ich aber das Problem, dass mir Mac Mail bei jeder Mail bei Datum "Gestern" anzeigt, alles ist durcheinander. Bei iOS ist bei mir alles richtig.
 
OS X Mail

das Problem habe ich mit Apple Mail auch.

Also das script genommen (copy/paste, dann noch ausführbar und los..) und ausgeführt:

Code:
#!/bin/bash

dir="/var/qmail/mailnames/*/*/Maildir/cur"  # Hier das Mail-Dir als absoluter Pfad angeben /var/vmail...
file=(`find $dir -type f`)
typeset -a date

for i in "${!file[@]}"
do
    date[$i]=$(grep -m 1 "Date: " ${file[$i]} | cut -d: -f2-4)
    echo "Date: ${date[$i]} File: ${file[$i]}" ## Hinzugefügt von Wienni
    touch --date="${date[$i]}" ${file[$i]}
done

da kommt jedoch bei mir (Debian 8) eine Fehlermeldung :mad:

Code:
4: datemail.sh: Syntax error: "(" unexpected

Könntet Ihr mir behilflich sein - DAAAANKE

P.S. Outlook stellt die Mails korrekt mit Einlieferungsdatum dar, gleichwohl das Dateidatum ein anderes ist, nämlich das Datum des Restores
 
Last edited by a moderator:
Hallo, bei mir geht das Script leider auch nicht mehr.

Ich hatte einen Serverumzug, und nun stehen alle E-Mail auf 10.05.17... Das ist es blöd. Gibt es evtl. noch eine andere Lösung?


Danke
 
Schon mal in Zeile 4 die Klammern entfernt. Ich weis jetzt auch nicht mehr was ich damals für ein Betriebssystem hatte.
 
ich dummy.. script funzt natürlich :p

kurzer workaround:
  1. touch script
  2. nano script
  3. copy and paste
  4. chmod a+x script
  5. cp script /bin
  6. script

und alles gut... :cool:

DANKE an ALLE und rolapp

NACHTRAG :D

Meine Rettung war, dass ich das Verzeichnis /var/qmail mit tar (tar cfvz mails.tar.gz) manuell gesichert habe und somit auch den timestamp. Domains inkl Mails mittels pleskrestore zurück und dann manuelles backup (tar xfvz mails.tar.gz) drüber und alles gfut
 
Last edited by a moderator:
Ich benutze schon länger kein plesk mehr. Cool das es geholfen hat was ich damals geschrieben habe.

Gruß Steffen
 
Back
Top