Herausforderungen
- Die Outlook Connectoren der Logic Apps liefern nur eine JSON Repräsentation der eigentlichen Email. Mit diesen ist es nicht möglich die Mail einfach als .msg Datei abzulegen.
- Die File Extension .msg ist eine von Microsoft eingeführtes Format. Somit ist es nur möglich eine .msg Datei zu erzeugen, indem die Email direkt aus Outlook gespeichert oder eine zusätzliche Software verwendet wird.
Lösungsansätze
Folgende Lösungsansätze wären denkbar gewesen:
- Implementierung mit Hilfe einer Azure Function und zusätzlicher Software, welche es ermöglicht, Dateien im MSG Format zu speichern.
- Nutzung des EML Formats ( anstatt MSG ) und der Microsoft Graph Api mit Hilfe einer App Registration.
Da wir keine zusätzliche Software für diesen Ansatz verwenden wollten, entschieden wir uns für Ansatz 2.
Voraussetzungen
Für diesen Lösungsansatz benötigen wir:
- App Registration
- Api Permission
- Mail.Read ( Application )
- Secrets
- Set up Secret
- Api Permission
- Credentials der Mailbox
Warnung: Diese Api Permission gibt der App Registration Berechtigungen auf ALLE Postfächer des Tenants. Diese müssen zusätzlich über Policies und Mail Security Groups eingeschränkt werden.
Siehe Artikel: https://www.2azure.nl/2022/10/02/restrict-azure-app-permissions-to-specific-mailboxes-only/
Umsetzung
Für die Umsetzung nutzen wir die Microsoft Graph Api, diese nutzt die OAuth2 Authentifizierung.
Somit benötigen wir folgende Prozesse:
- OAuth2 Token Generierung
- Verarbeiten der Outlook Emails ( durch App Registration und Micrrosoft Graph Api )
Prozess 1: OAuth2 Token Generierung
Da wir parallele Verarbeitung haben werden, wollen wir die Token Generierung in einen separaten Prozess auslagern.
Dafür haben wir uns für eine Function App entschieden, welche über einen Timer Trigger verfügt.
Folgende Details werden benötigt:
- Http Request Token
- Token Endpunkt der App Registration
- Credentials
- Zuvor erstelltes Secret
- Scope: graph.microsoft.com/.default
- Managed Identity der Function App
- Berechtigungen
- Secrets
- Get
- List
- Set
- Delete
- Purge
- Secrets
- Berechtigungen
Somit wird bei Ausführung der Function jeweils ein Token beim Token Endpunkt angefragt und anschließend im Azure Key Vault abgelegt, sodass die anderen Prozesse dieses verwenden können.
Prozess 2: Verarbeitung der Emails
Es wird mehrere Logic Apps geben, welche unterschiedliche Emails verarbeiten. Hier werden wir uns auf einen Workflow fokussieren.
Folgende Details werden benötigt:
- Managed Identity der Logic App
- Berechtigungen
- Secrets
- Get
- List
- Secrets
- Berechtigungen
- Microsoft Graph Api
Der Graph Api Request gibt die Nachricht als eml Datei zurück. Diese kann somit einfach als Blob abgelegt werden.
Der Workflow würde also wie folgt aussehen:
Mehr Details zum Http Request und der Erstellung des Blobs:
Thats it!
Fazit
Da es leider nicht möglich ist ohne zusätzliche Tools möglich ist die bitgleiche Mail im MSG Format abzulegen, haben wir uns für das EML Mail Format entschieden. Mit diesem ist es einfach möglich die Mail über die Graph Api abzurufen und abzulegen. Allerdings sollte definitiv beachtetet werden, dass die Applikations-Berechtigung der App Registration eingeschränkt werden sollte.
Dieser quiTeq-Tipp kommt aus Stuttgart von Nico Deni.