svenyo
Goto Top

Outlook: Emails mit Ordnerstruktur exportieren

Ich habe folgenden Code gefunden, um Emails aus Outlook auf die Festplatte zu exportieren und mit Datum & Betreff zu betiteln:

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

Link zu obigem Code

Bislang kann ich alle Emails eines Ordners markieren und über das Makro dann in einen Ordner exportieren, welcher frei wählbar ist. So weit so gut. Gibt es die Möglichkeit statt der Emails einen Ordner zu markieren und diesen dann samt Ordner, Unterordnern und kompletten Inhalten (Emails, Bilder, XLS, DOC, etc.) auf die Festplatte zu exportieren?

Gefunden habe ich noch folgenden Code, aber dieser kopiert die Ordnerstruktur nur innerhalb Outlook:

Public Sub CopyFolders()
  Dim Source As Outlook.Folder
  Dim Target As Outlook.Folder
  
  'Quellordner wählen  
  Set Source = Application.Session.PickFolder
  If Source Is Nothing Then Exit Sub
  
  'Zielordner wählen  
  Set Target = Application.Session.PickFolder
  If Target Is Nothing Then Exit Sub
  
  LoopFolders Source.Folders, Target.Folders, True
  MsgBox "fertig"  
End Sub

Private Sub LoopFolders(SourceFolders As Outlook.Folders, _
  TargetFolders As Outlook.Folders, _
  ByVal Recursive As Boolean _
)
  Dim Source As Outlook.MAPIFolder
  Dim Target As Outlook.MAPIFolder
  Dim FolderType As OlDefaultFolders
  
  For Each Source In SourceFolders
    Select Case Source.DefaultItemType
      Case olAppointmentItem
        FolderType = olFolderCalendar
      Case olContactItem, olDistributionListItem
        FolderType = olFolderContacts
      Case olJournalItem
        FolderType = olFolderJournal
      Case olNoteItem
        FolderType = olFolderNotes
      Case olTaskItem
        FolderType = olFolderTasks
      Case Else
        FolderType = olFolderInbox
    End Select
    Set Target = TargetFolders.Add(Source.Name, FolderType)

    If Recursive Then
      LoopFolders Source.Folders, Target.Folders, Recursive
    End If
  Next
End Sub

Kann ich diesen Code irgendwie umschreiben und beide zusammen verwenden? Oder ist das der falsche Ansatzpunkt?

Content-Key: 7803389501

Url: https://administrator.de/contentid/7803389501

Printed on: May 1, 2024 at 23:05 o'clock

Member: jsysde
jsysde Jul 10, 2023 at 17:31:30 (UTC)
Goto Top
Moin.

Zitat von @svenyo:
[...]Gibt es die Möglichkeit statt der Emails einen Ordner zu markieren und diesen dann samt Ordner, Unterordnern und kompletten Inhalten (Emails, Bilder, XLS, DOC, etc.) auf die Festplatte zu exportieren?
Die Export-Funktion von Outlook tut doch genau das?

Cheers,
jsysde
Member: svenyo
svenyo Jul 10, 2023 at 18:27:01 (UTC)
Goto Top
Aber doch nur als gepackte PST-Datei. Oder ist mir da etwas entgangen?
Ich möchte die Ordnerstruktur und sämtliche Inhalte (.msg, .xlsx, .doc, .mp3, .jpg, etc....) als "normale" Ordner und Dateien exportieren.
Mitglied: 7426148943
7426148943 Jul 10, 2023 at 19:02:55 (UTC)
Goto Top
Member: jsysde
jsysde Jul 10, 2023 at 19:19:40 (UTC)
Goto Top
Moin.

Zitat von @svenyo:
Aber doch nur als gepackte PST-Datei. Oder ist mir da etwas entgangen?[...]
Nein, dir ist nix entgangen - hast natürlich Recht, da wird ne PST-Datei draus. Bin ich wohl zu kurz gehüpft. face-wink

Cheers,
jsysde
Member: svenyo
svenyo Jul 10, 2023 at 19:27:16 (UTC)
Goto Top
Schade, habe schon gehofft etwas übersehen zu haben
Member: svenyo
svenyo Jul 10, 2023 at 19:28:54 (UTC)
Goto Top

den Beitrag habe ich auch schon gesehen, aber hier muss der Quell-Ordner und Zielordner ja fest in den Code geschrieben werden, oder? Außerdem kenne ich mich mit AutoIt nicht aus. Ein VBA MakroCode wäre mir da lieber.
Mitglied: 7426148943
7426148943 Jul 10, 2023 updated at 19:57:00 (UTC)
Goto Top
Auch noch Ansprüche ...
Markierten Ordner bekommst du egal ob VBA oder AutoIt über das COM-Objekt jederzeit, , bisschen musst du schon noch selbst machen, RTFM:
https://learn.microsoft.com/en-us/office/vba/api/outlook.explorer.curren ...
Dann ne rekursive Funktion gebaut die die Ordner durchläuft.
https://codekabinett.com/rdumps.php?Lang=1&targetDoc=rekursion-vba-o ....
Wir liefern dir hier nur die Rezepte, denken musst du dann schon noch selbst, du musst es ja später auch selbst warten und interpretieren können, oder kopierst du dir immer alles in nur zusammen ohne es zu verstehen?

P s. Von Netiquette hältst du wohl auch nichts 👎

Na denn...🥱
Member: DivideByZero
DivideByZero Jul 10, 2023 at 20:58:22 (UTC)
Goto Top
Moin,

bei mangelnden Programmierkenntnissen ist das ggf. eine Alternative. Kaufen, installieren, einrichten - läuft:

autofiler

Legt auch Attachments separat ab.

Gruß

DivideByZero
Member: Bingo61
Bingo61 Jul 11, 2023 at 08:56:01 (UTC)
Goto Top
Mail Store Home, macht das kostenlos. Oder muss man das Rad neu erfinden?