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

Printed on: April 19, 2024 at 02:04 o'clock

Member: emeriks
emeriks Jun 17, 2015 updated at 14:49:11 (UTC)
Goto Top
Hi,
Schnellschuss: Kleines COM-AddIn schreiben, per AD verteilen und aktivieren?

E.
Member: DerWoWusste
DerWoWusste Jun 17, 2015 at 14:52:12 (UTC)
Goto Top
Moin.

Hab ich noch nie gemacht - schwierig?
Mitglied: 114757
114757 Jun 17, 2015 updated at 14:59:43 (UTC)
Goto Top
Moin zusammen,
dafür gibt es doch die verwalteten Ordner und die Aufbewahrungsrichtlinien : Erstellen einer Postfachrichtlinie für verwaltete Ordner

Gruß jodel32
Member: emeriks
emeriks Jun 17, 2015 at 15:34:11 (UTC)
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.
Member: emeriks
emeriks Jun 17, 2015 updated at 15:36:58 (UTC)
Goto Top
Hab ich noch nie gemacht - schwierig?
Ich auch nicht. Aber schau mal hier.

Und hier. face-wink
Member: DerWoWusste
DerWoWusste Jun 17, 2015 at 15:58:50 (UTC)
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 Jun 17, 2015 updated at 18:24:48 (UTC)
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.
Member: emeriks
emeriks Jun 17, 2015 at 19:32:56 (UTC)
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
Member: DerWoWusste
DerWoWusste Jun 18, 2015 at 07:47:36 (UTC)
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.
Member: emeriks
emeriks Jun 18, 2015 updated at 10:00:45 (UTC)
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 Jun 18, 2015 updated at 10:07:15 (UTC)
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.
Member: emeriks
emeriks Jun 18, 2015 at 10:06:25 (UTC)
Goto Top
@114757
Läuft sowas "smart" im Hintergrund oder wird dabei die Oberfläche ferngesteuert?
Mitglied: 114757
114757 Jun 18, 2015 updated at 10:10:19 (UTC)
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
Member: DerWoWusste
DerWoWusste Jun 18, 2015 at 10:51:20 (UTC)
Goto Top
@emeriks
Tut bei mir keinen Dienst.
Hast Du's selbst ausprobiert?
Member: emeriks
emeriks Jun 18, 2015 at 11:05:32 (UTC)
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.
Member: colinardo
colinardo Jun 18, 2015 updated at 11:46:00 (UTC)
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
Member: DerWoWusste
DerWoWusste Jun 18, 2015 updated at 12:06:16 (UTC)
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.
Member: emeriks
emeriks Jun 18, 2015 at 12:07:24 (UTC)
Goto Top
@colinardo
Ja, ich kenne das. Das ist auch nur ein Schnellschuss. Nicht gefeilt und poliert.
Member: emeriks
emeriks Jun 18, 2015 at 12:08:09 (UTC)
Goto Top
@dww
siehe Colinardos Hinweis. Das war nur ein Beispiel müsste man noch ausfeilen!
Member: DerWoWusste
DerWoWusste Jun 18, 2015 at 12:15:37 (UTC)
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