Hallo liebe Community,
ich bin neu hier im Forum und das hier ist mein erster Beitrag, deshalb ein Servus an alle.
Folgendes Problem habe ich momentan:
Auf ein Unterverzeichnis eines bestimmten Outlook-Kontos fließen ständig neue Mails mit Anhang.
Ich möchte die Anhänge von ungelesenen E-Mails je nach Dateiformat in entsprechenden Verzeichnissen abspeichern und die E-Mails anschließend löschen.
Mein bisheriger Code:
# file path $filepath_accepted_Attachments = “...\akzeptierte_Anhänge” $filepath_unaccepted_Attachments = “...\Nicht_akzeptierte_Anhänge” $account = "x@y.de" $unterverzeichnis = "Posteingang" $regex = "(.jpg|.log)" # Outlook öffnen $objOutlook = New-Object -comobject outlook.application $objMailbox = $objOutlook.GetNamespace(“MAPI”) # ausgelesenes Postfach und Unterverzeichnis suchen und speichern $Account = $objMailbox.Folders | Where-Object { $_.Name -eq $account } $folders = $Account.Folders | Where-Object { $_.Name -eq $unterverzeichnis } # in Unterverzeichnis des Postfachs ungelesene Nachrichten lesen # Anhänge nach ausgelesenem Regex filtern und in entsprechendem Pfad speichern # E-Mail als gelesen markieren und löschen $folders.Items.Restrict("[UnRead] = True") | foreach { $_.attachments | foreach { $filename = $_.filename if ($filename -match $regex) { $_.saveasfile((Join-Path $filepath_unaccepted_Attachments $filename)) $_.Parent.Unread = $false $_.Parent.delete() } else { $_.saveasfile((Join-Path $filepath_accepted_Attachments $filename)) $_.Parent.Unread = $false $_.Parent.delete() } } }
Klammere ich die Zeilen
$_.Parent.delete()
aus, funktioniert alles wie gewollt. Alle ungelesenen Nachrichten werden gelesen, die Anhänge extrahiert und die Nachrichten als gelesen markiert.
Sind die delete-Zeilen nicht ausgeklammert, wird immer nur die erste E-Mail als ungelesen markiert und gelöscht. Durch Recherchen habe ich gelesen, dass ich bei der letzten E-Mail anfangen muss und nicht bei der ersten, das hat aber auch noch nicht funktioniert.
Kann mir da jemand helfen?
Beste Grüße