E-mail speichern, Empfangsdatum beibehalten

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
kjuergen
Junior Member
Junior Member
Posts: 17
Joined: 2013-02-27, 17:24 UTC

E-mail speichern, Empfangsdatum beibehalten

Post by *kjuergen »

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
User avatar
Dalai
Power Member
Power Member
Posts: 9388
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *Dalai »

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
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *HolgerK »

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
Make our planet great again
User avatar
Stefan2
Power Member
Power Member
Posts: 4155
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *Stefan2 »

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)




 
kjuergen
Junior Member
Junior Member
Posts: 17
Joined: 2013-02-27, 17:24 UTC

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *kjuergen »

Ich darf mich ganz herzlich bei den Einsendern eines Vorschlages für mein Problem bedanken. Ich werde das gleich mal ausprobieren.
User avatar
HenryTC
Junior Member
Junior Member
Posts: 22
Joined: 2017-07-15, 23:30 UTC

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *HenryTC »

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
User avatar
tuska
Power Member
Power Member
Posts: 3760
Joined: 2007-05-21, 12:17 UTC

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *tuska »

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?
Eine Methode um das selbst anhand der eigenen installierten Plugins festzustellen ist folgende:
  1. Cursor auf einer .msg Datei positionieren
  2. Strg-Taste drücken, Cursor in der Spaltenüberschrift positionieren, Strg-Taste loslassen
  3. Rechtsklick auf die Spaltenüberschrift durchführen
  4. Eine gespeicherte benutzerdefinierte Ansicht auswählen, zB ## Erstell-/Änderungs-/Zugriffs-DATUM
  5. Nochmals einen Rechtsklick auf die Spaltenüberschrift durchführen
  6. Diesen Menüpunkt anklicken: "Diese benutzerdef. Spaltensicht konfigurieren"
  7. Klick auf Button "Spalte hinzufügen"
  8. Klick rechts außen auf das '+' Plus-Zeichen
  9. "Alle Plugins" links oben auswählen
  10. 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)
  11. 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.
Um die Antwort gleich vorwegzunehmen:
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)
User avatar
HenryTC
Junior Member
Junior Member
Posts: 22
Joined: 2017-07-15, 23:30 UTC

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *HenryTC »

#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:

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?
User avatar
HenryTC
Junior Member
Junior Member
Posts: 22
Joined: 2017-07-15, 23:30 UTC

Re: E-mail speichern, Empfangsdatum beibehalten

Post by *HenryTC »

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.

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
Post Reply