Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Gesendete Mails speichern

Gesendete Mails speichern
18.07.2023 13:23:15
Markus
Hallo zusammen,

Der nachfolgende VBA Code soll die letzten beiden E-Mails aus dem "gesendete Elemente"-Ordner in Outlook lokal speichern. Das funktioniert auch, allerdings wird die 1. Mail immer mit dem Typ "Datei" gespeichert, während die 2. Mail im korrekten Format "Outlook Element" gespeichert wird. Es sollen aber beide Dateien mit dem Format "Outlook Element" bzw. mit der Dateiendung .msg gespeichert werden. Könnt ihr mir sagen, weshalb dieses Phänomen auftritt?

Sub EMailsSpeichern()

Dim OutlookApp As Outlook.Application
Dim Namespace As Outlook.Namespace
Dim Folder As Outlook.Folder
Dim MailItem As Outlook.MailItem
Dim i As Integer
Dim SaveFolder As String

' Ordnerpfad, in dem die E-Mails gespeichert werden sollen
SaveFolder = "XXX Platzhalter XXX"

' Outlook-Instanz erstellen
Set Namespace = GetNamespace("MAPI")

' Gesendete Elemente Ordner öffnen
Set Folder = Namespace.GetDefaultFolder(olFolderSentMail)

' Die letzten beiden E-Mails speichern
For i = Folder.Items.Count To Folder.Items.Count - 2 Step -1
If i 1 Then Exit For 'Falls weniger als 2 E-Mails vorhanden sind

Set MailItem = Folder.Items(i)

' E-Mail speichern
MailItem.SaveAs SaveFolder & MailItem.Subject & ".msg", olMSG

Set MailItem = Nothing
Next i

' Aufräumen
Set Folder = Nothing
Set Namespace = Nothing
Set OutlookApp = Nothing

MsgBox "Die E-Mails wurden erfolgreich gespeichert."
End Sub
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gesendete Mails speichern
18.07.2023 13:42:06
Markus
Ich habe die Ursache finden können. Und zwar wird die Mail mit dem Betreff als Dateiname abgespeichert. Bei der 1. Mail waren im Betreff Sonderzeichen vorhanden, weshalb der Dateiname nicht korrekt vergeben werden konnte und das Speichern abgebrochen wurde.

Ergänzung
19.07.2023 08:24:50
MCO
Hallo Markus!

An dem Problem hab ich auch länger geknackt bis ich es gemerkt hab. Das Thema brachte später aber noch andere Schwächen auf:

Die Länge des gesamten Pfades inkl. Dateiname darf eine Länge von 259 Zeichen nicht überschreiten.

Für die Sonderzeichen hab ich mir zur Korrektur eine Funktion gebaut...

Function Sonderzeichenkiller(ByRef text As String) As String
    Dim Sonderzeichen As String, i As Long
    Application.Volatile
    'Zeichen, die gelöscht werden, zum speichern von Dateinamen
    Sonderzeichen1 = "!:'*#*()+>{}[]&%~?=$€|" & chr(34) & chr(9) 'Chr(34)=" 'zum löschen
    Sonderzeichen2 = "/\"                        'zum ersetzen
    'keine Aktion bei "-_"
    For i = 1 To Len(Sonderzeichen1)
        text = Replace(text, Mid(Sonderzeichen1, i, 1), "")
        dopp = Mid(Sonderzeichen1, i, 1) & Mid(Sonderzeichen1, i, 1)
        Do
            text = Replace(text, dopp, Mid(Sonderzeichen1, i, 1)) 'doppelte Zeichen entfernen
        Loop While InStr(text, dopp) > 0
    Next i
    
    For i = 1 To Len(Sonderzeichen2)
        dopp = Mid(Sonderzeichen2, i, 1) & Mid(Sonderzeichen2, i, 1)
        Do
            text = Replace(text, dopp, Mid(Sonderzeichen2, i, 1)) 'doppelte Zeichen entfernen
        Loop While InStr(text, dopp) > 0
        text = Replace(text, Mid(Sonderzeichen2, i, 1), "_")
    Next i
    
    dopp = "  "                              '2 Leerzeichen
    
    Do
        text = Replace(text, dopp, " ")      'doppelte Zeichen entfernen
    Loop While InStr(text, dopp) > 0
    
    text = Replace(text, " _ ", "_")
    Sonderzeichenkiller = text
End Function
Private Sub Test_sonderzeichenkiller()

    'leitet die ausgewählte Mail im Outlook weiter
    Dim MyOutApp_sess As Object, myOlout As Object ', Application As Object
    Dim Nam As String, Ziel As Range, such As String
    Dim zl As Single, mail_nam As String
    
    Set MyOutApp_sess = GetObject("", "Outlook.Application").Session
    
    For Each account_zugriff In MyOutApp_sess.Folders
        If InStr(account_zugriff, Split(Application.UserName, ",")(0)) > 0 Then
            Set outl_name = account_zugriff
            Exit For
        End If
    Next account_zugriff
    
    Set MyOutApp = CreateObject("Outlook.Application")
    Set mynamespace = MyOutApp.GetNamespace("MAPI")
    Set myOlout = mynamespace.GetDefaultFolder(olFolderSentMail)
    
    For Each fld In myOlout.items
        zl = zl + 1
        If zl = 20 Then Exit Sub
        With fld
            Debug.Print "alt", fld.Subject
            mail_nam = Replace(.LastModificationTime & "_" & Trim(.Subject), ":", ".") & ".msg"
            mail_nam = Replace(Trim(.Subject), ":", ".") & ".msg"
            
            mail_nam = Sonderzeichenkiller(mail_nam)
'Ordn_nam als Speicherort muss noch festgelegt werden
            Nam = Ordn_nam & "/" & mail_nam      'neuer Name
            Debug.Print "neu", mail_nam
        End With
    Next
End Sub
Gruß, MCO

Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Gesendete Mails in Outlook lokal speichern


Schritt-für-Schritt-Anleitung

Um gesendete Mails in Outlook lokal zu speichern, kannst du den folgenden VBA-Code verwenden. Dieser speichert die letzten beiden E-Mails aus dem „Gesendete Elemente“-Ordner. Achte darauf, dass die Dateiendung .msg korrekt gesetzt ist, um die Mails als Outlook-Elemente zu speichern.

  1. Outlook öffnen und den VBA-Editor starten (Alt + F11).
  2. Ein neues Modul einfügen: Klicke auf „Einfügen“ > „Modul“.
  3. Den folgenden Code einfügen:
Sub EMailsSpeichern()
    Dim Namespace As Outlook.Namespace
    Dim Folder As Outlook.Folder
    Dim MailItem As Outlook.MailItem
    Dim i As Integer
    Dim SaveFolder As String

    ' Ordnerpfad, in dem die E-Mails gespeichert werden sollen
    SaveFolder = "C:\Dein\Speicherort\" ' Passe diesen Pfad an

    Set Namespace = GetNamespace("MAPI")
    Set Folder = Namespace.GetDefaultFolder(olFolderSentMail)

    ' Die letzten beiden E-Mails speichern
    For i = Folder.Items.Count To Folder.Items.Count - 2 Step -1
        If i < 1 Then Exit For ' Falls weniger als 2 E-Mails vorhanden sind

        Set MailItem = Folder.Items(i)
        ' E-Mail speichern
        MailItem.SaveAs SaveFolder & MailItem.Subject & ".msg", olMSG
        Set MailItem = Nothing
    Next i

    MsgBox "Die E-Mails wurden erfolgreich gespeichert."
End Sub
  1. Speichere den Code und führe ihn aus (F5).

Häufige Fehler und Lösungen

  • Problem: Outlook speichert gesendete Mails nicht korrekt.

    • Lösung: Überprüfe, ob der Dateiname Sonderzeichen enthält. Diese können das Speichern verhindern. Verwende die Funktion Sonderzeichenkiller, um diese Zeichen zu entfernen.
  • Problem: Dateipfad größer als 259 Zeichen.

    • Lösung: Achte darauf, dass der Speicherort und der Dateiname zusammen nicht mehr als 259 Zeichen lang sind. Du kannst den Speicherort verkürzen, um dieses Problem zu vermeiden.

Alternative Methoden

Falls du nicht mit VBA arbeiten möchtest, kannst du auch die Mails manuell speichern:

  1. Öffne Outlook und gehe zu „Gesendete Elemente“.
  2. Wähle die E-Mail aus, die du speichern möchtest.
  3. Klicke auf „Datei“ > „Speichern unter“.
  4. Wähle den Speicherort und stelle sicher, dass du die Dateiendung .msg auswählst.

Für eine automatische Lösung ist jedoch VBA die schnellste Methode.


Praktische Beispiele

Hier ein Beispiel, wie du den oben genannten VBA-Code anpassen kannst, um zusätzlich das aktuelle Datum im Dateinamen einzufügen:

MailItem.SaveAs SaveFolder & Format(Now, "yyyy-mm-dd") & "_" & MailItem.Subject & ".msg", olMSG

Dies speichert die E-Mail mit dem Datum im Format „YYYY-MM-DD“ vor dem Betreff.


Tipps für Profis

  • Excel Dateipfad kopieren: Du kannst den Dateipfad in Excel kopieren und in den VBA-Code einfügen, um sicherzustellen, dass der Pfad korrekt ist.
  • Outlook Ordner einfärben: Um deine gesendeten Mails besser zu organisieren, kannst du verschiedene Ordner in Outlook einfärben.
  • E-Mails lokal speichern: Stelle sicher, dass du regelmäßig deine gesendeten Mails lokal speicherst, um Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Wo sind gesendete Mails gespeichert?
Gesendete Mails werden im „Gesendete Elemente“-Ordner in Outlook gespeichert. Wenn du sie lokal speicherst, kannst du den Speicherort im Code anpassen.

2. Was kann ich tun, wenn der Dateipfad größer als 259 Zeichen ist?
Reduziere die Länge des Dateinamens oder wähle einen kürzeren Speicherort, um dieses Problem zu lösen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige