Exchange - zentrales Archivieren bestimmter Ordner
Moin Kollegen,
wir haben allen Nutzern in Outlook einen SPAM-Ordner eingerichtet. Nun möchten wir zentral vorgeben, dass alles in diesem Ordner gelöscht/in den Müll verschoben wird, was älter als x Tage ist.
Man kann das über die Autoarchivierung von Outlook erreichen, welche jedoch aus anderen Gründen nicht genutzt werden soll.
Eine Idee wäre, dies vielleicht auf dem Exchangeserver (2007) zu erreichen, aber ein Durchblättern der Powershell-Befehle brachten mich nicht auf die Spur.
Hat jemand eine Idee dazu?
wir haben allen Nutzern in Outlook einen SPAM-Ordner eingerichtet. Nun möchten wir zentral vorgeben, dass alles in diesem Ordner gelöscht/in den Müll verschoben wird, was älter als x Tage ist.
Man kann das über die Autoarchivierung von Outlook erreichen, welche jedoch aus anderen Gründen nicht genutzt werden soll.
Eine Idee wäre, dies vielleicht auf dem Exchangeserver (2007) zu erreichen, aber ein Durchblättern der Powershell-Befehle brachten mich nicht auf die Spur.
Hat jemand eine Idee dazu?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 274829
Url: https://administrator.de/forum/exchange-zentrales-archivieren-bestimmter-ordner-274829.html
Ausgedruckt am: 12.04.2025 um 04:04 Uhr
20 Kommentare
Neuester Kommentar

Moin zusammen,
dafür gibt es doch die verwalteten Ordner und die Aufbewahrungsrichtlinien : Erstellen einer Postfachrichtlinie für verwaltete Ordner
Gruß jodel32
dafür gibt es doch die verwalteten Ordner und die Aufbewahrungsrichtlinien : Erstellen einer Postfachrichtlinie für verwaltete Ordner
Gruß jodel32
Wenn man die Lizenz dafür hat ...
Verwaltete benutzerdefinierte Ordner sind ein Premium-Feature von MRM (Messaging Records Management). Postfächer mit Richtlinien, die verwaltete benutzerdefinierte Ordner umfassen, benötigen eine Exchange Server Enterprise-Clientzugriffslizenz (Client Access License, CAL). Weitere Informationen zu den Lizenzierungsanforderungen für MRM finden Sie unter "Clientzugriffslizenzen und MRM" in Grundlagen der Verwaltung von Nachrichtendatensätzen.

Sorry das ich das mit der Lizenz nicht erwähnt habe, aber das vergisst man schnell wenn man wie ich hier immer nur mit Enterprise Umgebungen hantiert, in der alle Features automatisch freigeschaltet sind.
Dazu braucht es pro User eine extra CAL, welche man den gewünschten Usern zuordnet und bei denen man dann die Premium Features nutzen kann. Hab zwar keinen EX2007 zur Hand aber bei 2010 ist das so gemacht. Die GUI ist zwar schon da aber funktionieren tut's dann wirklich erst wenn man die CAL für den User freigeschaltet hat.
Du könntest natürlich auch ein kleines AutoIT-Script hernehmen das du auf den Clients per Aufgabenplanung laufen lässt welches den Spamordner entsprechend entschlackt. So ein Script ist schnell geschrieben.
Dazu braucht es pro User eine extra CAL, welche man den gewünschten Usern zuordnet und bei denen man dann die Premium Features nutzen kann. Hab zwar keinen EX2007 zur Hand aber bei 2010 ist das so gemacht. Die GUI ist zwar schon da aber funktionieren tut's dann wirklich erst wenn man die CAL für den User freigeschaltet hat.
Du könntest natürlich auch ein kleines AutoIT-Script hernehmen das du auf den Clients per Aufgabenplanung laufen lässt welches den Spamordner entsprechend entschlackt. So ein Script ist schnell geschrieben.
VBA würde auch gehen. Hier ein Beispiel. Einfach in "ThisOutlookSession" einfügen und Outlook neu starten. Dabei das Projekt speichern.
Als Trigger dient hier der Eingang einer neuen Mail.
Als Trigger dient hier der Eingang einer neuen Mail.
Dim WithEvents mApp As Outlook.Application
Dim mSpamFolder As Outlook.Folder
Dim mTrashFolder As Outlook.Folder
Const cSpamFolderName As String = "Spam"
Const cRetentionDays As Integer = 7
Private Sub Application_Startup()
On Error Resume Next
Set mApp = Outlook.Application
With mApp.GetNamespace("MAPI")
Set mSpamFolder = .GetDefaultFolder(olFolderInbox).Parent.Folders(cSpamFolderName)
Set mTrashFolder = .GetDefaultFolder(olFolderDeletedItems)
End With
End Sub
Private Sub mApp_NewMail()
On Error Resume Next
Dim µItem As MailItem
For Each µItem In mSpamFolder.Items
If DateDiff("d", µItem.ReceivedTime, Now) >= cRetentionDays Then
µItem.Subject = "AutoDeleted___" & µItem.Subject
µItem.Save
µItem.Delete
End If
Next
For Each µTrashItem In mTrashFolder.Items
If Left(µTrashItem.Subject, 14) = "AutoDeleted___" Then
µTrashItem.Delete
End If
Next
End Sub
1 Wo muss der Spamordner "SPAM" liegen, unterhalb des Posteingangs oder auf oberster Ebene?
In diesem Beispiel direkt unter dem Stamm.Wenn das z.B. unter Posteingang liegen soll, dann z.B. so:
Set mSpamFolder = .GetDefaultFolder(olFolderInbox).Folders(cSpamFolderName)
2 Wg. Triggering - wenn eine neue Mail kommt, soll das Skript laufen und alles in den Müll schieben, was älter als 7 Tage ist?
Ja. "d" steht für "Tag" und "cRetentionDays" die Differenz zwischen Empfangszeit und Jetzt in Tagen.3 Deploymentmöglichkeiten?
Das ist der Haken. Müsste man sich noch mal schlau machen.Theoretisch müsste es ausreichen, wenn man die dabei erstellte Projekt-Datei an alle Benutzer verteilt. Unter der Vorausetzung, dass die Benutzer noch keine eigenen Outlook-VBA-Projekte haben.

> 3 Deploymentmöglichkeiten?
Das ist der Haken. Müsste man sich noch mal schlau machen.
Deswegen meinte ich das man eine AutoIT exe oder eine vbs verwendet, die lassen sich leichter verteilen.Das ist der Haken. Müsste man sich noch mal schlau machen.

Zitat von @emeriks:
@114757
Läuft sowas "smart" im Hintergrund oder wird dabei die Oberfläche ferngesteuert?
Outlook via COM-Object angesprochen geht das normal ohne Fernsteuerung im Hintergrund@114757
Läuft sowas "smart" im Hintergrund oder wird dabei die Oberfläche ferngesteuert?
Outlook Mail in Explorer speichern mit Zeitstempel der Mail
Hallo zusammen,
mit AutoIT sähe der Code so aus (Gehe davon aus das der Ordner SPAM im Root des Default-Stores liegt):
@emeriks: Wichtiger Hinweis: Eine Outlook Ordner-Auflistung per ForEach zu durchlaufen und dabei gleichzeitig Elemente aus der Auflistung zu löschen führt dazu das nicht mehr alle Mails erfasst werden, weil Outlook die Auflistung nicht schnell genug aktualisieren kann. Was dazu führt das einige Mails im Ordner verbleiben obwohl sie die Kriterien erfüllen. Eines der Mankos wenn man mit Outlook programmiert.
Deswegen hier der Umweg über ein Array, damit werden alle Elemente zuverlässig erfasst.
Grüße Uwe
mit AutoIT sähe der Code so aus (Gehe davon aus das der Ordner SPAM im Root des Default-Stores liegt):
#NoTrayIcon
#include <Date.au3>
#include <Array.au3>
; Tage welche im Spam Ordner aufbewahrt werden sollen
Const $retention_days = 7
;Outlook Objekt erstellen
$objOL = ObjCreate("Outlook.Application")
;Array für Mails die gelöscht werden
dim $arr_delete[1]
; SPAM Ordner referenzieren
$folder_spam = $objOL.GetNamespace("MAPI").GetDefaultFolder(6).Parent.Folders.Item("SPAM")
; Mülleimer
$folder_trash = $objOL.GetNamespace("MAPI").GetDefaultFolder(3)
for $mail in $folder_spam.Items
$mailDate = StringMid($mail.ReceivedTime,1,4) & "/" & StringMid($mail.ReceivedTime,5,2) & "/" & StringMid($mail.ReceivedTime,7,2)
if _DateDiff("D",$mailDate,_NowCalcDate()) > $retention_days then
_ArrayAdd($arr_delete,$mail)
EndIf
Next
for $i = 1 to UBound($arr_delete) - 1
$mailmove = $arr_delete[$i].Move($folder_trash)
$mailmove.Delete()
Next
@emeriks: Wichtiger Hinweis: Eine Outlook Ordner-Auflistung per ForEach zu durchlaufen und dabei gleichzeitig Elemente aus der Auflistung zu löschen führt dazu das nicht mehr alle Mails erfasst werden, weil Outlook die Auflistung nicht schnell genug aktualisieren kann. Was dazu führt das einige Mails im Ordner verbleiben obwohl sie die Kriterien erfüllen. Eines der Mankos wenn man mit Outlook programmiert.
Deswegen hier der Umweg über ein Array, damit werden alle Elemente zuverlässig erfasst.
Grüße Uwe
@colinardo
Ja, ich kenne das. Das ist auch nur ein Schnellschuss. Nicht gefeilt und poliert.
Ja, ich kenne das. Das ist auch nur ein Schnellschuss. Nicht gefeilt und poliert.