E-mail speichern, Empfangsdatum beibehalten
Moderators: Hacker, Stefan2, white
E-mail speichern, Empfangsdatum beibehalten
Hallo zusammen, ich möchte bestimmte Emails aus dem Vorjahr in einen Ordner speichern außerhalb meines Email-Programms. Die Dateien sind im eml Format hinterlegt. Ich lege also einen neuen Ordner an, beispielsweise "2020". Jetzt markiere ich alle zu sichernden Emails und ziehe sie in den neuen Ordner. Mein Problem ist, dass sich die Emails problemlos sichern lassen, das sich alle Daten der Emails (Empfangen oder Senden) nach dem Sichern sofort in das aktuelle Tagesdatum ändern. Also allo 100 gesicherten Emails haben dann das Datum vom z.B. 6.1.2021.
Gibt es hier eine Einstellung bei Total Commander um dies zu verhindern? Oder ist meine Vorgehenseise schon falsch und ich muss anders sichern. Aber unbedingt außerhalb meines Email-Programms. Hat hier im Forum jemand eine Idee für eine Lösung? Das ist jetzt kein Problem von TC, aber vielleicht gibt es mit diesem Programm eine Lösung!
Danke und Gruß
kjuergen
Gibt es hier eine Einstellung bei Total Commander um dies zu verhindern? Oder ist meine Vorgehenseise schon falsch und ich muss anders sichern. Aber unbedingt außerhalb meines Email-Programms. Hat hier im Forum jemand eine Idee für eine Lösung? Das ist jetzt kein Problem von TC, aber vielleicht gibt es mit diesem Programm eine Lösung!
Danke und Gruß
kjuergen
Re: E-mail speichern, Empfangsdatum beibehalten
Ich vermute ganz stark, dass der Zeitstempel der gespeicherten EML-Dateien beim Speichern im Mailprogramm gesetzt wird. Das ist völlig unabhängig vom Dateimanager.
Grüße
Dalai
Grüße
Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Re: E-mail speichern, Empfangsdatum beibehalten
1. Inhalts-Plugin https://totalcmd.net/plugring/shelldetails.html
runterladen und per Doppelklick im TC installieren.
2. Alle Mails markieren
3. "Dateien -> Dateiattribute ändern..."
4. [x] "Pluginattribute ändern"
5. [Mehr Attribute]
6. Plugin: "tc" + Eigenschaft: "Änderungsdatum" als Ziel auswählen
7. mit dem [+]-Button "[=shelldetails.Date sent]" auswählen oder direkt im Feld unterhalb von "Wert:" einfügen.
8. [OK] drücken
HTH
Holger
runterladen und per Doppelklick im TC installieren.
2. Alle Mails markieren
3. "Dateien -> Dateiattribute ändern..."
4. [x] "Pluginattribute ändern"
5. [Mehr Attribute]
6. Plugin: "tc" + Eigenschaft: "Änderungsdatum" als Ziel auswählen
7. mit dem [+]-Button "[=shelldetails.Date sent]" auswählen oder direkt im Feld unterhalb von "Wert:" einfügen.
8. [OK] drücken
HTH
Holger
Make our planet great again
Re: E-mail speichern, Empfangsdatum beibehalten
HolgerK wrote: 2021-01-06, 23:02 UTC 1. Inhalts-Plugin https://totalcmd.net/plugring/shelldetails.html
runterladen und per Doppelklick im TC installieren.
7. mit dem [+]-Button "[=shelldetails.Date sent]" auswählen oder direkt im Feld unterhalb von "Wert:" einfügen.
Klasse, danke.
Auf Deutsch nennt sich das "Absendungsdatum"
"[=shelldetails.Absendungsdatum]"
Das kann man (anstatt das Dateidatum zu ändern) auch in einer "Benutzerdefinierten Spalte" anzeigen lassen.
Anleitung:
http://www.ghisler.ch/wikide/index.php/Benutzerdefinierte_Spaltenansicht
Benutzerdefinierte Spaltenansicht / Dateieigenschaften anzeigen viewtopic.php?p=335840#p335840
Ich habe das mal in meine eigene BSA aufgenommen:
[=tc.size.bytes]\n[=tc.writedate]\n[=tc.accessdate]\n[=tc.creationdate]\n[=shelldetails.Absendungsdatum]
(Als Erinnerung: diese Spalten sind sortierbar)
Re: E-mail speichern, Empfangsdatum beibehalten
Ich darf mich ganz herzlich bei den Einsendern eines Vorschlages für mein Problem bedanken. Ich werde das gleich mal ausprobieren.
Re: E-mail speichern, Empfangsdatum beibehalten
Ich habe hier eine Anschlussfrage betr. Outlook-msg-Mails:
- funktioniert diese Methode nur für .eml-Mails oder sollte dies auch bei .msg-Outlook-Mails gehen?
Habe es versucht, aber es nicht hingekriegt, es bleibt beim Speicherdatum der E-Mail. Ich gehe davon aus, dass mit der im 1. Beitrag gestellten Frage ("... alle Daten der Emails (Empfangen oder Senden) ...") und der Eigenschaft "Änderungsdatum" schon das Änderungsdatum im TC-Explorer gemeint ist und nicht das Mail-interne Empfangs- oder Sendedatum, welche man erst sieht, wenn man die E-Mail öffnet?
PS: Wenn das für msg-Mails auch klappen würde, wäre dies genial. Mit dem Vorschlag von Stefan2 könnte man dann eine Spalte mit dem "Erhalten"-Datum voranstellen und einer Sortierung in einem Ordner, egal welche Dateien er hat (gemischt E-Mails, PDFs, docxs, Txts ...), stünde nichts mehr im Wege.
PS2: Siehe auch https://www.ghisler.ch/board/viewtopic.php?p=390299#p390299
- funktioniert diese Methode nur für .eml-Mails oder sollte dies auch bei .msg-Outlook-Mails gehen?
Habe es versucht, aber es nicht hingekriegt, es bleibt beim Speicherdatum der E-Mail. Ich gehe davon aus, dass mit der im 1. Beitrag gestellten Frage ("... alle Daten der Emails (Empfangen oder Senden) ...") und der Eigenschaft "Änderungsdatum" schon das Änderungsdatum im TC-Explorer gemeint ist und nicht das Mail-interne Empfangs- oder Sendedatum, welche man erst sieht, wenn man die E-Mail öffnet?
PS: Wenn das für msg-Mails auch klappen würde, wäre dies genial. Mit dem Vorschlag von Stefan2 könnte man dann eine Spalte mit dem "Erhalten"-Datum voranstellen und einer Sortierung in einem Ordner, egal welche Dateien er hat (gemischt E-Mails, PDFs, docxs, Txts ...), stünde nichts mehr im Wege.
PS2: Siehe auch https://www.ghisler.ch/board/viewtopic.php?p=390299#p390299
Re: E-mail speichern, Empfangsdatum beibehalten
Eine Methode um das selbst anhand der eigenen installierten Plugins festzustellen ist folgende:HenryTC wrote: 2023-05-15, 14:18 UTC Ich habe hier eine Anschlussfrage betr. Outlook-msg-Mails:
- funktioniert diese Methode nur für .eml-Mails oder sollte dies auch bei .msg-Outlook-Mails gehen?
- Cursor auf einer .msg Datei positionieren
- Strg-Taste drücken, Cursor in der Spaltenüberschrift positionieren, Strg-Taste loslassen
- Rechtsklick auf die Spaltenüberschrift durchführen
- Eine gespeicherte benutzerdefinierte Ansicht auswählen, zB ## Erstell-/Änderungs-/Zugriffs-DATUM
- Nochmals einen Rechtsklick auf die Spaltenüberschrift durchführen
- Diesen Menüpunkt anklicken: "Diese benutzerdef. Spaltensicht konfigurieren"
- Klick auf Button "Spalte hinzufügen"
- Klick rechts außen auf das '+' Plus-Zeichen
- "Alle Plugins" links oben auswählen
- Mit der linken Maustaste den ersten Eintrag rechts in den "Eigenschaften" anklicken
Rechts unten wird jetzt neben dem "Filter"-Feld der Dateiname angezeigt (= Wert vorhanden? Ja/Nein) - Mit der Pfeil-nach-unten Taste zum nächsten Feld wechseln UND dabei beobachten ob rechts unten
neben dem "Filter"-Feld der bzw. ein gewünschte(r) Eintrag erscheint.
Mir ist bis dato KEIN Plugin bekannt mit welchem das Empfangs- bzw. Sendedatum einer Outlook Email-Nachricht ermittelt werden könnte.
Ich habe etliche Plugins installiert, u.a. einige, die das Datum und die Uhrzeit auslesen können.
Bei mir hat das ermitteln etwas über 5 Minuten gedauert.
Windows 11 Pro (x64) Version 22H2 (OS build Build 22621.1702) | TC 11.00b2 x64/x86
Microsoft® Outlook® LTSC MSO (16.0.14332.20501) 64-Bit (Bestandteil von: Microsoft Office LTSC Professional Plus 2021)
Re: E-mail speichern, Empfangsdatum beibehalten
#Tuska
Besten Dank für diese ausführliche Darstellung und den Input für die Lösungsfindung!!
- Ich habe das alles getestet und komme zum selben Ergebnis
- Habe weder das "Erhalten-Datum" noch die "Erhalten-Zeit" durch die getesteten Plugins wiedergegeben bekommen
- dafür habe ich diese Technik des Herausfindens kennengelernt!
Fazit:
- Wenn weder das Empfangs- noch das Sendedatum einer Outlook-Email-Nachricht ermittelt werden können, dann geht vielleicht ein Umweg ...
- möglicherweise gibt es später ein Plugin?
Habe nach intensiver Suche folgende Kombi-Lösung als aktuell beste und schnellste Lösung gefunden:
VBA-Script
- E-Mails mit nachfolgendem VBA-Script exportieren bzw. abspeichern
- Habe diverse Scriptteile integriert (bin aber kein Programierer, vielleicht kann das hier jemand besser, aber es funktioniert)
- ausgewählte E-Mails werden als msg-Datei in ein wählbares Verzeichnis abgespeichert
- Datum und Zeit der E-Mails (erhalten am) werden in den Anfang des Betreffs geschrieben
- bereits abgespeicherte E-Mails werden nicht überschrieben, d.h. es können später eingegangene E-Mails in der Ablage problemlos ergänzt werden
- für sehr lange Betreffs kann im Script der Zeichenwert von 130 erhöht werden
- Datum und Zeit am Anfang der msg-Datei erlauben das problemlose Sortieren mit anderen Dateien (Formaten wie txt, docx, pdf, jpg ...)
- nach Datum und Zeit wird im Betreff noch "E-Mail" eingefügt. Dieser Text kann aus dem Script entfernt oder geändert werden.
- damit können E-Mails als msg-Dateien in jede Ablage eingefügt und einsortiert werden, sofern diesen Dateien ebenfalls das Datum vorangestellt ist
- haben die bestehenden Dateien ein anderes Sortierkriterium vorangestellt, könnte der Text oder das Format im Script entsprechend angepasst werden
- eine andere Möglichkeit wäre mit dem Einfügen einer Präfix über das MUT möglich
Bsp.:
Betreff in E-Mail: "Test ... .msg"
Betreff in Ablage: "230522 19-05-00 E-Mail Test ... .msg"
Total Commander Dateiatributte ändern
- E-Mails, welche als msg-Dateien gespeichert werden, bekommen für Datum und Zeit die Speicherangaben zum Zeitpunkt ihrer Speicherung
- damit verlieren die E-Mails grundsätzlich ihre zeitliche Einbindung
- diese werden mit dem Script nun aber im Betreff konserviert
- Änderungsdatum, Erstelldatum und das letzte Zugriffsdatum können bei Bedarf über Attribute ändern aus dem Betreff ausgelesen werden und
auf das E-Mail-Datum und die E-Mail-Zeit (erhalten am) problemlos angepasst werden
VBA-Script für das speichern von E-Mails als msg:
Dateiatributte ändern
Folgende Angaben können für das Änderungsdatum, das Erstelldatum oder das Datum des Letzten Zugriff abgespeichert werden:
(wie das getan wird, ist im Forum oft beschrieben)
Schluss-Fazit: Einmal eingerichtet braucht es wenige Klicks und es dauert ein paar Sekunden, bis alles erledigt ist.
Noch offen
Vielleicht könnte ein VBA-Programierer das Script noch für die Ablage von Terminen (Appointments) anpassen und nachfolgend abspeichern?
Besten Dank für diese ausführliche Darstellung und den Input für die Lösungsfindung!!
- Ich habe das alles getestet und komme zum selben Ergebnis
- Habe weder das "Erhalten-Datum" noch die "Erhalten-Zeit" durch die getesteten Plugins wiedergegeben bekommen
- dafür habe ich diese Technik des Herausfindens kennengelernt!
Fazit:
- Wenn weder das Empfangs- noch das Sendedatum einer Outlook-Email-Nachricht ermittelt werden können, dann geht vielleicht ein Umweg ...
- möglicherweise gibt es später ein Plugin?
Habe nach intensiver Suche folgende Kombi-Lösung als aktuell beste und schnellste Lösung gefunden:
VBA-Script
- E-Mails mit nachfolgendem VBA-Script exportieren bzw. abspeichern
- Habe diverse Scriptteile integriert (bin aber kein Programierer, vielleicht kann das hier jemand besser, aber es funktioniert)
- ausgewählte E-Mails werden als msg-Datei in ein wählbares Verzeichnis abgespeichert
- Datum und Zeit der E-Mails (erhalten am) werden in den Anfang des Betreffs geschrieben
- bereits abgespeicherte E-Mails werden nicht überschrieben, d.h. es können später eingegangene E-Mails in der Ablage problemlos ergänzt werden
- für sehr lange Betreffs kann im Script der Zeichenwert von 130 erhöht werden
- Datum und Zeit am Anfang der msg-Datei erlauben das problemlose Sortieren mit anderen Dateien (Formaten wie txt, docx, pdf, jpg ...)
- nach Datum und Zeit wird im Betreff noch "E-Mail" eingefügt. Dieser Text kann aus dem Script entfernt oder geändert werden.
- damit können E-Mails als msg-Dateien in jede Ablage eingefügt und einsortiert werden, sofern diesen Dateien ebenfalls das Datum vorangestellt ist
- haben die bestehenden Dateien ein anderes Sortierkriterium vorangestellt, könnte der Text oder das Format im Script entsprechend angepasst werden
- eine andere Möglichkeit wäre mit dem Einfügen einer Präfix über das MUT möglich
Bsp.:
Betreff in E-Mail: "Test ... .msg"
Betreff in Ablage: "230522 19-05-00 E-Mail Test ... .msg"
Total Commander Dateiatributte ändern
- E-Mails, welche als msg-Dateien gespeichert werden, bekommen für Datum und Zeit die Speicherangaben zum Zeitpunkt ihrer Speicherung
- damit verlieren die E-Mails grundsätzlich ihre zeitliche Einbindung
- diese werden mit dem Script nun aber im Betreff konserviert
- Änderungsdatum, Erstelldatum und das letzte Zugriffsdatum können bei Bedarf über Attribute ändern aus dem Betreff ausgelesen werden und
auf das E-Mail-Datum und die E-Mail-Zeit (erhalten am) problemlos angepasst werden
VBA-Script für das speichern von E-Mails als msg:
Code: Select all
Sub SaveSelectedMailsWithDate()
Dim mail As MailItem, strNewSubject As String, strNewFilePath As String, objFolder As Object, OUTPUTPATH As String
' max Anzahl an zu übernehmenden Zeichen des Subjects
Const MAXSUBJECTCHARS = 130
' Filesystem Object erstellen
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
' Ausgabeordner mit FolderBrowserDialog abfragen
Set objFolder = objShell.BrowseForFolder(0, "Ausgabe-Ordner angeben", &H10)
' prüfe auf gültigen Pfad
If fso.FolderExists(objFolder.Self.Path) Then
OUTPUTPATH = objFolder.Self.Path
Else
MsgBox "Ungültiger Pfad!", vbExclamation
Exit Sub
End If
With ActiveExplorer
' wenn eine Auswahl besteht ...
If .Selection.Count > 0 Then
' verarbeite alle markierten Mails
For Each obj In .Selection
If obj.Class = olMail Then
Set mail = obj
' ersetze illegale Zeichen durch underscores
strNewSubject = Trim(ReplaceIllegalChars(mail.Subject))
' wenn das Subject durch die Änderung leer ist, benutze als Namen der Datei die eindeutige Outlook-EntryID
If strNewSubject = "" Then
strNewSubject = mail.EntryID
End If
' kürze den Betreff wenn die definierte maximale Zeichenanzahl erreicht ist
If Len(strNewSubject) > MAXSUBJECTCHARS Then
strNewSubject = Left(strNewSubject, MAXSUBJECTCHARS) & "..."
End If
' baue den neuen Pfad zusammen
strNewFilePath = fso.BuildPath(OUTPUTPATH, Format(mail.ReceivedTime, "yymmdd hh-nn-ss") & " E-Mail " & strNewSubject & ".msg")
' sollte der Name bereits im Ausgabeordner existieren, hänge die Datum-Ticks als Randomizer an den Dateinamen an
While fso.FileExists(strNewFilePath)
ticks = DateDiff("s", #1/1/1970#, Now())
strNewFilePath = fso.BuildPath(OUTPUTPATH, Format(mail.ReceivedTime, "yymmdd") & "_" & strNewSubject & "_" & ticks & ".msg")
Wend
' speichere Mail als MSG(Unicode-Format)
mail.SaveAs strNewFilePath, olMSGUnicode
End If
Next
Else
' Keine Mail für den Export markiert
MsgBox "Bitte mindestens eine E-Mail für den Export markieren!", vbExclamation
End If
End With
MsgBox "Export abgeschlossen.", vbInformation
End Sub
' Illegale Pfadzeichen ersetzen
Function ReplaceIllegalChars(strText)
Set regex = CreateObject("vbscript.regexp")
regex.Pattern = "[\\/:?<>|""*]"
regex.Global = True
ReplaceIllegalChars = regex.Replace(strText, "_")
Set regex = Nothing
End Function
Dateiatributte ändern
Folgende Angaben können für das Änderungsdatum, das Erstelldatum oder das Datum des Letzten Zugriff abgespeichert werden:
(wie das getan wird, ist im Forum oft beschrieben)
Code: Select all
Datum: "[=tc.Name:5-6].[=tc.Name:3-4].[=tc.Name:1-2]"
Zeit: "[=tc.Name:8-9].[=tc.Name:11-12].[=tc.Name:14-15]"
Schluss-Fazit: Einmal eingerichtet braucht es wenige Klicks und es dauert ein paar Sekunden, bis alles erledigt ist.
Noch offen
Vielleicht könnte ein VBA-Programierer das Script noch für die Ablage von Terminen (Appointments) anpassen und nachfolgend abspeichern?
Re: E-mail speichern, Empfangsdatum beibehalten
Hier noch das VBA-Script um Termine mit Datum und Beginn-Zeit im Dateiname als .msg-Datei zu speichern.
Dateiatributte können nach dem Muster von oben ebenfalls angepasst werden.
Dateiatributte können nach dem Muster von oben ebenfalls angepasst werden.
Code: Select all
Sub SaveSelectedObjectsWithDate()
Dim strNewSubject As String, strNewFilePath As String, objFolder As Object, OUTPUTPATH As String
' max Anzahl an zu übernehmenden Zeichen des Subjects
Const MAXSUBJECTCHARS = 30
' Filesystem Object erstellen
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
' Ausgabeordner mit FolderBrowserDialog abfragen
Set objFolder = objShell.BrowseForFolder(0, "Ausgabe-Ordner angeben", &H10)
' prüfe auf gültigen Pfad
If fso.FolderExists(objFolder.Self.Path) Then
OUTPUTPATH = objFolder.Self.Path
Else
MsgBox "Ungültiger Pfad!", vbExclamation
Exit Sub
End If
With ActiveExplorer
' wenn eine Auswahl besteht ...
If .Selection.Count > 0 Then
' verarbeite alle markierten Objekte
For Each obj In .Selection
' ersetze illegale Zeichen durch underscores
strNewSubject = Trim(ReplaceIllegalChars(obj.Subject))
' wenn das Subject durch die Änderung leer istm benutze als Namen der Datei die eindeutige Outlook-EntryID
If strNewSubject = "" Then
strNewSubject = obj.EntryID
End If
' kürze den Betreff wenn die definierte maximale Zeichenanzahl erreicht ist
If Len(strNewSubject) > MAXSUBJECTCHARS Then
strNewSubject = Left(strNewSubject, MAXSUBJECTCHARS) & "..."
End If
' baue den neuen Pfad zusammen
strNewFilePath = fso.BuildPath(OUTPUTPATH, Format(obj.Start, "yymmdd hh-nn-ss") & " Termin " & strNewSubject & ".msg")
' sollte der Name bereits im Ausgabeordner existieren, hänge die Datum-Ticks als Randomizer an den Dateinamen an
While fso.FileExists(strNewFilePath)
ticks = DateDiff("s", #1/1/1970#, Now())
strNewFilePath = fso.BuildPath(OUTPUTPATH, Format(obj.Start, "yymmdd") & "_" & strNewSubject & "_" & ticks & ".msg")
Wend
' speichere als MSG(Unicode-Format)
obj.SaveAs strNewFilePath, olMSGUnicode
Next
Else
' Kein Termin für den Export markiert
MsgBox "Bitte mindestens einen Termin für den Export markieren!", vbExclamation
End If
End With
MsgBox "Export abgeschlossen.", vbInformation
End Sub
' Illegale Pfadzeichen ersetzen
Function ReplaceIllegalChars(strText)
Set regex = CreateObject("vbscript.regexp")
regex.Pattern = "[\\/:?<>|""*]"
regex.Global = True
ReplaceIllegalChars = regex.Replace(strText, "_")
Set regex = Nothing
End Function