Outlook: Empfangsdatum auslesen und in Dateinamen schreiben
Hallo,
Wenn ich eine Email aus Outlook eine mail per drag'n'drop in einen Ordner Verschiebe wird eine Betreff.msg Datei erzeugt. Jetzt ist die frage ob ich das Empfangs-(bzw. Sende-Datum) auslesen kann und dann in den Dateinamen einfügen kann?
Also Quelle:
Betreff.msg
Ziel:
210427_Betreff.msg
VBS/Batch oder externes Tool ist mir egal ;)
Danke im Voraus.
Wenn ich eine Email aus Outlook eine mail per drag'n'drop in einen Ordner Verschiebe wird eine Betreff.msg Datei erzeugt. Jetzt ist die frage ob ich das Empfangs-(bzw. Sende-Datum) auslesen kann und dann in den Dateinamen einfügen kann?
Also Quelle:
Betreff.msg
Ziel:
210427_Betreff.msg
VBS/Batch oder externes Tool ist mir egal ;)
Danke im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 666153
Url: https://administrator.de/contentid/666153
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
8 Kommentare
Neuester Kommentar
Unser Forum liefert dir z.B. passendes Futter:
Outlook Mail in Explorer speichern mit Zeitstempel der Mail
Gruß w.
Outlook Mail in Explorer speichern mit Zeitstempel der Mail
Gruß w.
Oder alternativ zu meinem von @148121 geposteten AutoIt Skript, wenn man's schnell mit VBA in Outlook abfackeln möchte:
Gewünschte Mails in Outlook markieren, dann das Makro abfeuern, Ausgabe-Ordner im sich öffnenden Dialog wählen, fertig.
Grüße Uwe
Gewünschte Mails in Outlook markieren, dann das Makro abfeuern, Ausgabe-Ordner im sich öffnenden Dialog wählen, fertig.
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 = 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 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 istm 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") & "_" & 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
Zitat von @SPSman:
Hallo,
das Ergebnis ist schonmal super. Ich habe auf dem Desktop Ordner-Verknüpfungen die ich in dem Auswahl Dialog nicht nutzen kann. Gibt es eine Möglichkeit die zu nutzen? Alternativ würde ich auch den Ordnerpfad in ein Pop-Up Feld reinkopieren.
Du kannst den BrowseForFolder Dialog einfach noch ein Eingabefeld hinzufügen in dem man Pfade manuell einfügen kann. Dazu Zeile 9 so umschreiben (Habs oben ergänzt).Hallo,
das Ergebnis ist schonmal super. Ich habe auf dem Desktop Ordner-Verknüpfungen die ich in dem Auswahl Dialog nicht nutzen kann. Gibt es eine Möglichkeit die zu nutzen? Alternativ würde ich auch den Ordnerpfad in ein Pop-Up Feld reinkopieren.
Set objFolder = objShell.BrowseForFolder(0, "Ausgabe-Ordner angeben", &H10)
Jetzt suche ich noch eine Option einen Button direkt in Outlook zu implementieren.
Gruß und vielen dank.
Du kannst das Makro z.B. in einem Modul speichern und dann im Ribbon direkt einem eigenen Button zuweisen (vorher eine eigene Gruppe auf dem gewünschten Tab hinzufügen).Gruß und vielen dank.
Zitat von @SPSman:
Hi,
während bei mir alle Laufwerke inkl. Netzlaufwerke angezeigt werden, sehe ich das auf einem anderen PC keine Netzlaufwerke:
Hat jemand eine Idee warum?
Wird der Dialog elevated ausgeführt bzw. Ist die UAC ausgeschaltet? Dann wäre klar warum. Netzlaufwerke werden Userabhängig gemappt, und erscheinen in elevated Sessions nur wenn ein Registry Key (EnableLinkedConnections) gesetzt ist.Hi,
während bei mir alle Laufwerke inkl. Netzlaufwerke angezeigt werden, sehe ich das auf einem anderen PC keine Netzlaufwerke:
> $foldername = New-Object System.Windows.Forms.FolderBrowserDialog
Hat jemand eine Idee warum?
Ebenso wenn die Netzlaufwerke unter einem anderen User-Account gemappt als dem Prozess welcher den Dialog ausführt.
https://stackoverflow.com/questions/18251983/folderbrowserdialog-doesnt- ...