Outlook App-only Authentifizierung
Microsoft-Entra-App-Registrierung mit Client Credentials für den Lesezugriff auf ein Outlook-Postfach.
Zweck
Für den Eingang von Rechnungen aus einem Outlook-Postfach wird eine Microsoft-Entra-App-Registrierung mit App-only Client Credentials verwendet. Es gibt keinen Benutzer-Login. Die Anwendung holt ein Token und liest das angegebene Postfach über Microsoft Graph.
Offizielle Referenzen:
- App-Registrierung erstellen
- Client-Credentials-Flow
- Microsoft Graph Mail.Read
- Microsoft Graph Mail.ReadWrite
- Graph-App auf bestimmte Postfächer beschränken
Voraussetzungen
- Zugriff auf den Microsoft-Entra-Tenant des E-Mail-Kontos.
- Rolle zum Erstellen von App-Registrierungen, zum Beispiel Application Administrator oder Cloud Application Administrator.
- Ein Administrator, der Microsoft-Graph-Application-Permissions per Admin Consent freigeben darf.
- Zielpostfach, zum Beispiel
rechnung@example.comoder der SMTP-Alias einer Shared Mailbox.
1. App Registration anlegen
- Öffne Microsoft Entra App registrations.
- Wähle New registration.
- Setze einen Namen, zum Beispiel
orimize-outlook-invoice-input. - Wähle Accounts in this organizational directory only.
- Lasse Redirect URI leer. Es wird kein Benutzer-Login verwendet.
- Wähle Register.
Danach notieren:
- Application (client) ID
- Directory (tenant) ID
2. Client Secret erstellen
- Öffne in der App Registration Certificates & secrets.
- Wähle New client secret.
- Vergib eine Beschreibung, zum Beispiel
orimize-outlook. - Wähle eine Laufzeit passend zur Secret-Rotation.
- Kopiere direkt nach dem Erstellen den Secret-Wert aus der Spalte Value.
Der Wert wird nur einmal angezeigt. Benötigt wird dieser Value, nicht die Secret-ID.
3. Microsoft Graph API Permissions setzen
- Öffne API permissions.
- Wähle Add a permission.
- Wähle Microsoft Graph.
- Wähle Application permissions, nicht Delegated permissions.
- Füge je nach Nachbearbeitung hinzu:
- Nur Lesen ohne Änderung der Mail:
Mail.Read - Als gelesen markieren oder in einen Ordner verschieben:
Mail.ReadWrite
- Nur Lesen ohne Änderung der Mail:
- Entferne unnötige Default-Permissions, falls vorhanden.
- Wähle Grant admin consent for ….
Ohne Admin Consent schlägt der Zugriff später mit 403 fehl.
4. Zugriff auf das Zielpostfach einschränken
Application-Permissions für Mail können ohne Einschränkung tenantweit auf Postfächer wirken. In Produktion sollte die App nur die wirklich benötigten Mailboxen erreichen.
Empfohlen:
- Erstelle in Microsoft 365 / Exchange Online eine mail-enabled Security Group für erlaubte Postfächer.
- Füge das Zielpostfach dieser Gruppe hinzu.
- Erstelle eine Exchange-Online Application Access Policy für die App-ID.
Siehe Limiting application permissions to specific Exchange Online mailboxes.
Benötigte Angaben
Diese Werte entstehen aus der Entra-Einrichtung und dem Zielpostfach. Sie werden für die App-only-Anbindung benötigt:
| Angabe | Herkunft |
|---|---|
Verzeichnis-ID (tenant_id) | Directory (tenant) ID der App Registration |
Anwendungs-ID (client_id) | Application (client) ID der App Registration |
Client Secret (client_secret) | Secret-Wert aus Certificates & secrets, Spalte Value |
Postfach (user_email) | SMTP-Adresse des Zielpostfachs |
Ordner (mail_folder) | inbox oder der sichtbare Anzeigename des Mailordners |
Nur ungelesene Mails (only_unread) | true oder false |
Maximale Nachrichten pro Lauf (max_messages_per_run) | zum Beispiel 50 |
Nachbearbeitung (post_process_action) | none, mark_read oder move |
Zielordner (move_to_folder) | nur bei post_process_action=move, Anzeigename des Zielordners |
Die Anwendung authentifiziert sich mit Client Credentials gegen https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token und dem Scope https://graph.microsoft.com/.default. Anschließend wird das Postfach über users/{user_email} gelesen. Die E-Mail-Adresse muss deshalb exakt die SMTP-Adresse des Postfachs sein.
Verarbeitet werden Nachrichten mit PDF-Anhängen. Jede PDF wird als eigene Eingangsrechnung übernommen.
Funktionstest
- Sende eine Test-Mail an das konfigurierte Postfach.
- Füge eine kleine PDF-Datei als Anhang hinzu.
- Stelle sicher, dass die Mail im konfigurierten Ordner liegt.
- Prüfe, ob die PDF übernommen wird und ob die Nachbearbeitung (
mark_readodermove) wie vorgesehen greift.
Bei only_unread=true wird eine bereits gelesene Test-Mail nicht erneut verarbeitet. Bei post_process_action=none bleibt die Mail auffindbar.
Troubleshooting
- 401 / invalid_client:
tenant_id,client_idoderclient_secretfalsch. Secret-Wert statt Secret-ID verwenden. - 403 / Authorization_RequestDenied: Admin Consent fehlt oder falscher Permission-Typ. Es müssen Application permissions sein, nicht Delegated permissions.
- 403 / ErrorAccessDenied: App hat keine Mail-Permissions oder eine Application Access Policy erlaubt das Postfach nicht.
- 404 Mail folder not found:
mail_folderodermove_to_foldermussinboxoder der sichtbare Anzeigename des Ordners sein. - Keine Nachrichten gefunden:
only_unread=true, falscher Ordner, Mail hat keine Anhänge oder keine PDF-Anhänge.