derwowusste
Goto Top

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?

Content-Key: 274829

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

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: emeriks
emeriks 17.06.2015 aktualisiert um 16:49:11 Uhr
Goto Top
Hi,
Schnellschuss: Kleines COM-AddIn schreiben, per AD verteilen und aktivieren?

E.
Mitglied: DerWoWusste
DerWoWusste 17.06.2015 um 16:52:12 Uhr
Goto Top
Moin.

Hab ich noch nie gemacht - schwierig?
Mitglied: 114757
114757 17.06.2015 aktualisiert um 16:59:43 Uhr
Goto Top
Moin zusammen,
dafür gibt es doch die verwalteten Ordner und die Aufbewahrungsrichtlinien : Erstellen einer Postfachrichtlinie für verwaltete Ordner

Gruß jodel32
Mitglied: emeriks
emeriks 17.06.2015 um 17:34:11 Uhr
Goto Top
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.
Mitglied: emeriks
emeriks 17.06.2015 aktualisiert um 17:36:58 Uhr
Goto Top
Hab ich noch nie gemacht - schwierig?
Ich auch nicht. Aber schau mal hier.

Und hier. face-wink
Mitglied: DerWoWusste
DerWoWusste 17.06.2015 um 17:58:50 Uhr
Goto Top
Emeriks/Jodel, unter welchen Voraussetzungen kann man dieses Premium-Feature nutzen? Exchange 2007 Standard bietet ja die GUIs zum Erstellen solcher Ordner und Regeln, aber auf einem Testclient werden Sie nicht angezeigt, obwohl die Policy diesem Nutzer zugeordnet wurde.
Oder sollte die GUI das zwar anzeigen, aber es dennoch nur auf Exchange Enterprise funktionieren?

Wg. Add-In: Ich will da kein großes Fass aufmachen, es ginge nur darum, den Nutzern abzunehmen, dass sie den Spamordner übersichtlich halten.
Mitglied: 114757
114757 17.06.2015 aktualisiert um 20:24:48 Uhr
Goto Top
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.
Mitglied: emeriks
emeriks 17.06.2015 um 21:32:56 Uhr
Goto Top
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.

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
Mitglied: DerWoWusste
DerWoWusste 18.06.2015 um 09:47:36 Uhr
Goto Top
Danke für die Skript-Mühen. Ein paar Fragen dazu:

1 Wo muss der Spamordner "SPAM" liegen, unterhalb des Posteingangs oder auf oberster Ebene?
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?
3 Deploymentmöglichkeiten?

@114757: Hab ich mir schon gedacht. Nee, kein Enterprise-Exch. hier.
Mitglied: emeriks
emeriks 18.06.2015 aktualisiert um 12:00:45 Uhr
Goto Top
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.
Mitglied: 114757
114757 18.06.2015 aktualisiert um 12:07:15 Uhr
Goto Top
> 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.
Mitglied: emeriks
emeriks 18.06.2015 um 12:06:25 Uhr
Goto Top
@114757
Läuft sowas "smart" im Hintergrund oder wird dabei die Oberfläche ferngesteuert?
Mitglied: 114757
114757 18.06.2015 aktualisiert um 12:10:19 Uhr
Goto Top
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
Outlook Mail in Explorer speichern mit Zeitstempel der Mail
Mitglied: DerWoWusste
DerWoWusste 18.06.2015 um 12:51:20 Uhr
Goto Top
@emeriks
Tut bei mir keinen Dienst.
Hast Du's selbst ausprobiert?
Mitglied: emeriks
emeriks 18.06.2015 um 13:05:32 Uhr
Goto Top
Ja habe ich.
Nachdem Du das eingefügt hast, musst Du Outlook neu starten oder die Sub "Application_Startup" einmal manuell ausführen (Cursor auf die Sub-Zeile und F5 drücken)
Und Makro müssen natürlich aktiviert sein.

E.
Mitglied: colinardo
colinardo 18.06.2015 aktualisiert um 13:46:00 Uhr
Goto Top
Hallo zusammen,
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
Mitglied: DerWoWusste
DerWoWusste 18.06.2015 aktualisiert um 14:06:16 Uhr
Goto Top
@emeriks: Argh. Was ist denn das für Qualitätscode? (Nein, ich meine nicht zwangsläufig Deinen, evtl. ist es auch Outlook)

Bei genauerem Hinsehen, läuft es doch...aber es löscht "nach Lust und Laune" mal 2 Mails, mal 20, nie aber die korrekte Zahl. Ich kann es mehrfach ausführen, oder mir mehrfach als Trigger Mails schicken - nie werden alle gelöscht, immer nur ein paar. Vielleicht ein Performanceproblem meines "Gelöschte Elemente"-Ordners? da schlummern 5000 Mails drin.
Edit: Nö, auch nach Aufräumen in den gelöschte El's, selbes sonderbares Verhalten.
Mitglied: emeriks
emeriks 18.06.2015 um 14:07:24 Uhr
Goto Top
@colinardo
Ja, ich kenne das. Das ist auch nur ein Schnellschuss. Nicht gefeilt und poliert.
Mitglied: emeriks
emeriks 18.06.2015 um 14:08:09 Uhr
Goto Top
@dww
siehe Colinardos Hinweis. Das war nur ein Beispiel müsste man noch ausfeilen!
Mitglied: DerWoWusste
DerWoWusste 18.06.2015 um 14:15:37 Uhr
Goto Top
Hi Uwe.

Bin kein AutoIT-Pilot, habe es nur ganz vereinzelt benutzt. Dein Skript tut bei mir gar nichts (Ordner SPAM liegt testhalber auf höchster Ebene).
Wie ich das nun debuggen könnte, weiß ich nicht, aber mir vergeht gerade auch ein wenig die Lust. Für die lumpigen 1-2 GB SPAM im Jahr so ein Zinnober face-wink