stefankittel
Goto Top

M365 Mails mit bestimmten Betreff und älter als 72h in allen Postfächern löschen

Hallo,
ein Kunde führt gerade ein Ticket-System ein. Dadurch bekommen die Mitarbeiter bis zu 30 Mails pro Tag wegen neuer oder geänderter Tickets.

Darin steht nur eine Info und ein Link. Die können am nächsten Tag einfach gelöscht werden.
Das macht aber keiner.

Gibt es eine Möglichkeit alle M365 Mails mit bestimmten Betreff und älter als 72h in allen Postfächern zu löschen?
Per PS oder so?

Jeder könnte in seinem Outlook eine Regel dafür erstellen, aber das werden die meisten nicht hinbekommen oder schlicht nicht machen.

Stefan

Content-ID: 669338

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

Ausgedruckt am: 07.11.2024 um 17:11 Uhr

Penny.Cilin
Penny.Cilin 07.11.2024 um 16:10:21 Uhr
Goto Top
Hallo Stefan,

Jeder könnte in seinem Outlook eine Regel dafür erstellen, aber das werden die meisten nicht hinbekommen oder schlicht nicht machen
würde ich folgendermaßen versuchen zu erledigen:

  • es wird einmal einen Satz an Regeln für diese Thematik erstellt.
  • Diese Regeln werden exportiert (gesichert)
  • Weitere Personen importieren diesen Relgelsatz.
  • Fertisch

Gruss Penny.
Kraemer
Kraemer 07.11.2024 um 16:22:13 Uhr
Goto Top
catrell
catrell 07.11.2024 aktualisiert um 17:25:02 Uhr
Goto Top
In Azure eine AppRegistration erstellen mit den MG Graph Berechtigungen für eine Application und den Scopes Mail.ReadWrite.All, User.Read.All, MailboxFolder.ReadWrite für alle Mailboxen. Dann noch Credentials für die App-Registration erstellen und Client-ID und Passwort notieren, oder Zertifikat generieren und das als Credential für den Login der Application nutzen.
Dann mit Powershell und der MG-Graph API alle Mailboxen holen mittels Get-MgUser. Dann per Schleife über die User und Get-MgUserMailFolderMessage die gewünschten Nachrichten per Filter-Parameter ausfiltern und mittels Remove-MgUserMessage diese Mails löschen. Done.

Gruß catrell
Delta9
Delta9 07.11.2024 um 16:57:35 Uhr
Goto Top
Warum mit den Folgen beschäftigen wenn man die Ursache abstellen könnte face-smile

Wiso bekommen denn die Mitarbeiter 30 unwichtige Mails pro Tag und warum sind die am Folgetag noch unwichtiger?

Würde eher die Orga überdenken und das Ticketsystem vernünftig konfigurieren

PS: Der vorschlag von @catrell ist der richtige weg.
colinardo
colinardo 07.11.2024 aktualisiert um 18:17:06 Uhr
Goto Top
Servus Stefan.
Hier mal etwas M365 PS-Praxis für das Gewünschte mittels MG-Graph API.

back-to-topNeue Application Registration in Azure anlegen:


back-to-topClient-ID notieren


9744caf75e296aab33b00e92cbb6795e

back-to-topBerechtigungen für die Graph API vergeben


739e171edc24257bc6f7c13a335f9bfd

back-to-topCredentials generieren und geheimen Schlüssel notieren


2763cab2ae5fcd91ab142a8c63cba3c4

back-to-topPowershell-Skript


<#
    Remove messages older than x days with subject that contains specific subject string from all users mailboxes inbox folder
#>

# Variables ----------------------------------------------------
# tenant domain
$tenant = 'xxxxxxxx.onmicrosoft.com'  
# client id
$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  
# client secret
$client_password = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  
# subject substring to match
$subject_string = 'my subject to match'  
# only messages older than x days
$date = (get-date).AddDays(-3).Date
# --------------------------------------------------------------
$ErrorActionPreference = 'Stop'  
# needed modules
$modules = 'Microsoft.Graph.Mail','Microsoft.Graph.Users'  
# install modules if needed
$modules | %{
    if(!(Get-Module -ListAvailable -Name $_)){
        Install-Module $_ -Force -Scope CurrentUser
    }
    Import-Module $_
}

# connect to MG Graph
Connect-MgGraph -Tenant $tenant -ClientSecretCredential (new-Object PSCredential($client_id,(ConvertTo-SecureString $client_password -AsPlainText -Force))) -NoWelcome

# process each users mailbox
foreach($user in Get-MGUser -All -Property Id,Mail){
    # get messages with specific subject and older than x days from the inbox
    foreach ($message in Get-MgUserMailFolderMessage -MailFolderId inbox -UserId $user.id -All -Property id,subject,ReceivedDateTime -Filter "contains(subject,'$subject_string') and ReceivedDateTime lt $($date.toString('s'))Z"){  
        try{
            write-host "Removing message with subject '$($message.subject)' received on '$($message.ReceivedDateTime)' from mailbox '$($user.Mail)' ..." -F Green  
            Remove-MgUserMessage -MessageId $message.id -UserId $user.id
        }catch{
            write-host "Exception: $($_.Exception.Message)" -F Red  
        }
    }
}
# disconnect MG Graph session
Disconnect-MgGraph | out-null

Falls man nicht nur den Posteingang der Mailboxen durchsuchen möchte sondern auch sämtliche anderen Ordner der Mailbox. ersetze man die Zeile 34 durch diese Variante:

foreach ($message in Get-MgUserMessage -UserId $user.id -All -Property id,subject,ReceivedDateTime -Filter "contains(subject,'$subject_string') and ReceivedDateTime lt $($date.toString('s'))Z"){  

Viel Spaß damit.

Grüße Uwe