Die Mailbox sauber halten mit Powerautomate und MS Graph


Wir haben heute wieder was gelernt. Grundsätzlich war meine Erfahrung schon früher die, dass man ziemliche Schwierigkeiten hat wenn man mit Powerautomate E-Mails abrufen will.

Im Standard werden 10 Mails abgerufen, aber selbst wenn man das erhöht und Filter ansetzt wirds kompliziert, denn trotz korrekter Daten findet der Outlookconnector einfach keine Mails.

Also greifen wir hier auf den HTTP Request und MS Graph zurück.

Was ist unser Usecase?

Unser Kunde möchte das alle E-Mails die älter als 6 Monate sind automatisch gelöscht werden.

Nun werden wir zum Start natürlich die Mails manuell löschen doch danach soll sich der Kunde darum nicht mehr kümmern müssen, insbesondere da je nach Einstellung im Client nur 3 Monate angezeigt werden.

Was machen wir also:

Unser Trigger ist eine Wiederholung, ob man den Flow nun täglich laufen lässt und somit eine geringe Anzahl Mails löschen muss oder monatlich hängt natürlich in erster Linie davon ab wie viele Mails pro Tag eingehen und versandt werden.

Wir gehen von einer hohen Anzahl aus und nämlich daher einen Trigger der täglich läuft.

Nun initialisieren wir 3 Variablen.

Ein Integer, ein String und ein Array.

Den String befüllen wir direkt. Er ist nur für unseren Filter erforderlich. Selbstverständlich könnte man den Flow auch in eine App einbinden um die Variable individuell zu befüllen, da wir aber nur filtern wollen welche Mails älter als 6 Monate sind.

Wir schreiben folgendes also in unseren String:

addDays(utcNow(), -180, ‘yyyy-MM-dd’)

Wir könnte auch getPastTime verwenden. Der Effekt ist der gleiche.

Die Integer Variable brauchen wir um die Zeilen zu zählen die wir raus bekommen.

Und das Array um das Ergebnis der Graphabfrage zu verarbeiten.

Nun kommen wir zur HTTP-Anforderung:

GET https://graph.microsoft.com/v1.0/me/messages?$filter=(receivedDateTime le variables(‘6monatezurück’))

Natürlich könnten wir das Datum auch direkt in der Abfrage berechnen aber mit der Variable ist es einfach sauberer.

Im nächsten Schritt wandeln wir das Ergebnis mithilfe einer Composeaction in einen String um.

string(body(‘HTTP-Anforderung_senden’))

Diesen teilen wir nun bei jedem Vorkommen eines Commas

split(outputs(‘Verfassen’),’,’)

Und packen das in unserer Array

Das Array filtern wir nun nach allen Zeilen die mit “id”: starten um die Nachrichten IDs zu bekommen. Das gefilterte Array enthält also nun bereits nur noch die IDs allerdings mit mehrere ” und dem Start mit “id”:. Da wir nur die reine ID wollen machen wirs uns einfach. Wir wissen dass die ID definitiv zwischen 2 ” liegt also zählen wir einfach nach und stellen fest das die ID somit an 4 Stelle in der Zeile liegt wenn wir sie erneut bei jedem Vorkommen von ” splitten.

split(item(), ‘”‘)[3]

Wir haben nun also die reine Nachrichten ID. Damit können wir im nächsten Schritt die E-Mail mit dem Outlook Connector löschen.

Nun stellen wir fest dass auch Graph nur 10 Zeilen abruft. Da wir die genaue Anzahl der zu löschenden Mails nicht kennen. Nutzen wir jetzt noch eine “Wiederholen bis” Aktion. Dafür brauchen wir die Integer Variable. Jedes Mal wenn wir das Array filtern schreiben wir die Länge des Array in die Variable.
length(body(‘Array_filtern’))

Es wird die ersten Durchläufe immer 1-10 Zeilen haben bis wir ans Ende kommen und keine Mails mehr zu löschen sind. Wir beenden also unsere Schleife sobald die Länge 0 ist.

“type”: “Until”, “expression”: “@less(variables(‘Zeilenzählen’),5)”,

Damit läuft unser Flow unabhängig der Anzahl Mails einfach solange durch bis es nichts mehr gibt was älter als 6 Monate ist.

Und somit wird unsere Mailbox nicht mehr zum Datenfriedhof.

Danke wie immer fürs lesen.

LG Elli


Leave a Reply

Your email address will not be published. Required fields are marked *