Microsoft Graph OAuthOutlook- und Microsoft 365-Postfächer authentifizieren
Ein vollständiger Leitfaden für Microsoft Graph OAuth im Jahr 2026 für SaaS-Entwickler. Behandelt Microsoft Entra App-Registrierung, Authority-Endpunkte, Mail-Bereiche (Scopes), delegierte vs. Anwendungsberechtigungen, Admin-Zustimmung, Auth-Code + PKCE, Refresh-Token-Rotation, AADSTS-Fehlercodes und wie Unipile 5 Wochen OAuth-Plumbing in 5 Minuten eliminiert.
import Anfragen
# Schritt 1: Einen gehosteten Authentifizierungslink generieren
response = requests.Beitrag(
"https://apiXXX.unipile.com:XXX
/api/v1/gehostete/konten/verknüpfen",
Kopfzeilen={"X-API-KEY": api_key},
json={
"Typ": "erstellen",
"Anbieter": ["MICROSOFT"],
"api_url": ihr_dsn,
"giltBis": "2026-12-31T23:59:59Z"
}
)
# Schritt 2: Leiten Sie den Benutzer auf die URL weiter
auth_url = response.json()["url"]
# Unipile übernimmt den gesamten OAuth-Ablauf
# inkl. Entra, Scopes, Tokens, AktualisierungWarum Microsoft Graph OAuth im Jahr 2026 nicht verhandelbar ist
Wenn Ihre SaaS-Anwendung E-Mails von Outlook oder Microsoft 365 liest, sendet oder synchronisiert, ist Microsoft Graph OAuth nicht mehr optional. Drei wichtige Deprekationen haben Basic Auth, Legacy-Protokolle und App-Passwörter obsolet gemacht. OAuth 2.0 über die Microsoft Graph API ist der einzig unterstützte Weg.
Die 3 OAuth-Flows, die Microsoft unterstützt (und welchen eine SaaS-Anwendung benötigt)
Die Identitätsplattform von Microsoft unterstützt mehrere OAuth 2.0-Grant-Typen. Die Wahl des falschen Typs ist eine häufige Ursache für verschwendete Ingenieurszeit. Hier finden Sie die Aufschlüsselung für SaaS-Anwendungen, die im Namen ihrer Benutzer auf E-Mails zugreifen.
Microsoft Entra Anwendungsregistrierung: 7 Schritte
Bevor Ihre Anwendung OAuth-Token anfordern kann, benötigen Sie eine registrierte Anwendung in Microsoft Entra ID (früher Azure Active Directory). Hier sind die genauen Schritte, einschließlich der relevanten Feldwerte und der kosmetischen.
portal.azure.com, geh zu Microsoft Entra ID (in der oberen Leiste suchen), dann App-Registrierungen, dann klicken + Neue Registrierung. Siehe die Vollständige Microsoft OAuth-Dokumentation für weitere Informationen.Konten in einem beliebigen Verzeichnis einer Organisation (beliebiger Microsoft Entra ID Mandant – Mandantenübergreifend) und persönliche Microsoft-Konten. Dies entspricht dem /gemeinsam Autorisierungsendpunkt./Organisationen und reduziert Ihre Angriffsoberfläche. Mehr über Autorität Endpunkte in Abschnitt 4.Web für serverseitige Apps. Verwenden Sie Single-Page Application (SPA) für clientseitige Flows (aktiviert automatisch PKCE).https://app.yourproduct.com/auth/microsoft/callback. Es ist eine exakte Übereinstimmung erforderlich; jede Abweichung führt zum Fehler AADSTS50011.http://localhost:3000/callback), Produktions-URIs müssen jedoch HTTPS verwenden. Registrieren Sie beide separat.Mail.Lesen, Offline-Zugriff, openid, ProfilMail.ReadWrite, Mail.Senden, Offline-Zugriff, openid, Profilclient_id Parameter in allen Authentifizierungsanfragen./gemeinsam stattdessen, behalten Sie diesen Wert für Admin-Zustimmungs-URLs bei.Die Wahl des richtigen Microsoft-Autorisierungs-Endpunkts
Die Autoritäts-URL, die Sie in Ihren OAuth-Anforderungen verwenden, bestimmt, welche Arten von Microsoft-Konten authentifiziert werden können und welche Token Sie erhalten. Wenn Sie diese falsch festlegen, kommt es zu stillen Fehlern, bei denen sich einige Benutzer überhaupt nicht authentifizieren können.
| Autoritäts-URL | Akzeptiert | Anwendungsfall | Vorbehalte |
|---|---|---|---|
| /gemeinsamMeiste SaaS | Sowohl Microsoft Entra (Arbeit/Schule) als auch persönliche Microsoft-Konten (Outlook.com, Hotmail, Live) | Multi-Tenant-SaaS für alle Microsoft-Benutzer. Endpunkt-Einheitlichkeit für Ihre gesamte Benutzerbasis. | Token werden von jedem Benutzer-Heim-Mandanten ausgestellt, nicht von Ihrem. Die Token-Validierung muss den mandantenspezifischen Aussteller verwenden oder mehrere Aussteller akzeptieren. Richtlinien für bedingten Zugriff können nicht erzwungen werden. |
| /Organisationen | Nur Microsoft Entra ID-Konten (beruflich/schulisch). Keine persönlichen Microsoft-Konten. | B2B-SaaS, das sich ausschließlich an Unternehmenskunden richtet, niemals an private Outlook.com-Nutzer. | Nutzer mit persönlichen Microsoft-Konten erhalten eine Fehlermeldung. Einfachere Token-Validierung (Muster mit einem Aussteller akzeptabel). |
| /Verbraucher | Nur persönliche Microsoft-Konten (Outlook.com, Hotmail, Live). | Verbraucher-Apps, die auf persönliche Posteingänge abzielen. Selten für B2B-SaaS. | Enterprise-Microsoft-365-Konten werden abgelehnt. Nicht nützlich für SaaS, das Geschäftskunden bedient. |
| /{tenant-id} | Konten in einem bestimmten Microsoft Entra-Mandanten. | Single-Tenant-Intrumentierung (eigene Unternehmensanwendung). Admin-Zustimmungsflüsse, die auf einen bestimmten Mandanten abzielen. Wird auch im Admin-Zustimmungs-Weiterleitungs-URL-Muster verwendet. | Jeder zweite Mandantenbenutzer wird abgewiesen. Nur geeignet für interne Apps oder wenn bewusst auf den Mandanten eines Kunden beschränkt wird. |
/gemeinsam Endpunkt, der isst Der Anspruch (issuer) im JWT wird https://login.microsoftonline.com/{tenantId}/v2.0 wo {mandantenId} variiert je nach Benutzer. Konfigurieren Sie Ihre JWT-Validierungsbibliothek so, dass jeder Aussteller akzeptiert wird, der mit https://login.microsoftonline.com/{tenantId}/v2.0 anstelle einer festen Ausstellerzeichenkette.Microsoft Graph Mail-Bereiche: Granulare Aufschlüsselung
Microsoft Graph verwendet Berechtigungsumfänge, um zu steuern, was Ihre Anwendung tun kann. Das Anfordern zu vieler Umfänge erhöht die Hürden auf dem Zustimmungsbildschirm und verringert die Konversionsrate. Das Anfordern zu weniger Umfänge verursacht Laufzeitfehler. Hier sind alle E-Mail-Bereiche, die Sie kennen müssen.
| Umfang | Typ | Was sie ermöglicht | Admin-Zustimmung? |
|---|---|---|---|
| Mail.Lesen | Delegiert | Liest alle Nachrichten im Postfach des authentifizierten Benutzers. Beinhaltet Header, Körper, Anhänge. Nur Lesezugriff – kann nicht ändern oder senden. | Benutzer |
| Mail.ReadBasic | Delegiert | Begrenzte Nachrichteneigenschaften lesen: Betreff, Absender, Empfänger, Datum. Nachrichtentext oder Anhänge können nicht gelesen werden. Nützlich für leichtgewichtige Posteingangslisten ohne vollständigen Zugriff auf den Inhalt. | Benutzer |
| Mail.ReadWrite | Delegiert | Alle Nachrichten lesen und ändern. Beinhaltet das Erstellen, Aktualisieren und Löschen von Nachrichten und Ordnern. Obermenge von Mail.Read – fordern Sie nicht beides an. | Benutzer |
| Mail.Senden | Delegiert | E-Mails als der authentifizierte Benutzer senden. Erforderlich, auch wenn Sie Mail.ReadWrite haben – das Senden ist eine separate Berechtigung in Microsoft Graph. | Benutzer |
| Mail.Read.Shared | Delegiert | E-Mails in freigegebenen Postfächern oder Postfächern anderer Benutzer lesen, auf die der authentifizierte Benutzer Zugriff erhalten hat. Nicht zum Lesen des eigenen Postfachs des Benutzers. | Benutzer |
| Mail.ReadWrite.Shared | Delegiert | E-Mails in gemeinsam genutzten Postfächern lesen und ändern, auf die der Benutzer Zugriff hat. | Benutzer |
| Mail.Senden.Freigegeben | Delegiert | E-Mails von freigegebenen Postfächern oder "im Auftrag von" einem anderen Benutzer senden (wenn der Benutzer den Zugriff gewährt hat). | Benutzer |
| Offline-Zugriff | Delegiert | Weist Microsoft an, einen Refresh-Token auszustellen. Ohne diesen erhalten Sie nur einen kurzlebigen Access-Token ohne Möglichkeit zur Erneuerung. Immer erforderlich für SaaS-Anwendungen. | Benutzer |
| openid | Delegiert | Gibt ein ID-Token mit grundlegenden Benutzeridentitätsinformationen zurück. Erforderlich, wenn Sie wissen möchten, wer sich authentifiziert hat, ohne einen separaten /me API-Aufruf zu tätigen. | Benutzer |
| Profil | Delegiert | Fügt die Claims "name" und "preferred_username" zum ID-Token hinzu. Wird normalerweise mit OpenID eingeschlossen. | Benutzer |
| Mail.Read (App) | Anmeldung | Liest alle E-Mails in allen Postfächern im Mandanten ohne Benutzerinteraktion. Wird von Daemon-Diensten verwendet. Erfordert die Zustimmung des Mandantenadministrators. | Administrator gesucht |
| Mail.ReadWrite (App) | Anmeldung | Alle E-Mails in allen Tenant-Postfächern lesen und schreiben. Sehr weitreichende Erlaubnis. Nur für vertrauenswürdige interne Tools mit ausdrücklicher Zustimmung des Tenant-Admins. | Administrator gesucht |
scope=Mail.Readoffline_accessopenidprofile
scope=Mail.ReadWriteMail.Sendoffline_accessopenidprofile
Delegierte vs. Anwendungsberechtigungen: Wann welche gilt
Microsoft Graph verwendet zwei grundlegend unterschiedliche Berechtigungsmodelle. Die meisten SaaS-Entwickler greifen standardmäßig zum falschen Modell, was zu unnötigen Administratorzustimmungen und einer schlechten Benutzererfahrung führt. Hier wird genau erklärt, wann welches Modell zu verwenden ist.
Auth-Code + PKCE: Schritt-für-Schritt-Beispiele mit Curl
Hier ist der vollständige Microsoft Graph OAuth 2.0 Autorisierungscodefluss mit PKCE, von der Generierung des Code-Verifiers bis zum Token-Austausch. Dies sind produktionsreife Beispiele, die Sie direkt für Ihren Stack anpassen können.
import os, base64, hashlib
# 1. code_verifier generieren (43–128 Zeichen, URL-kompatibles Base64)
Code-Verifizierer = Base64.urlsafe_b64encode(
os.urandom(32)
).dekodieren('utf-8').rstrip('=')
# 2. code_challenge generieren = BASE64URL(SHA256(code_verifier))
code_challenge = Base64.urlsafe_b64encode(
hashlib.sha256(code_verifier.kodieren('utf-8')).Verdauung()
).dekodieren('utf-8').rstrip('=')
# Speichere „code_verifier“ in der Sitzung – du benötigst ihn in Schritt 4
# Code_challenge in der Autorisierungs-URL sendenCode - fordert einen Autorisierungscode anOffline-Zugriff für Token zur Verlängerung.S256 - immer SHA-256 verwenden, niemals unverschlüsselt# Erstellen der Autorisierungs-URL (Format zur besseren Lesbarkeit)
AUTH_URL="https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?client_id=IHR_CLIENT_ID
&response_type=code
&redirect;_uri=https://app.comauthmscb
&scope;=Mail.ReadWriteMail.Sendoffline_access
&zustand=ZUFALLSWERT_DES_ZUSTANDS
&code_challenge=DEIN_CODE_CHALLENGE
&code_challenge_method=S256"
# Den Benutzer an $AUTH_URL weiterleiten
# Microsoft übernimmt die Anmeldung, die Multi-Faktor-Authentifizierung und den Einwilligungsbildschirm
# Bei Erfolg: redirect_uri?code=AUTH_CODE&state;=...Code Abfrageparameter. Validieren Sie die Zustand Der Parameter stimmt mit dem überein, was Sie gesendet haben. Der Code ist 10 Minuten gültig – tauschen Sie ihn sofort in Schritt 4 um.#-Autorisierungscode für Token
curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \
-H "Inhaltstyp: Anwendung/x-www-form-urlencoded" \
-d "client_id=DEINE_CLIENT_ID" \
-d "client_secret=DEIN_CLIENT_SECRET" \
-d "grant_type=authorization_code" \
-d "code=AUTH_CODE_FROM_CALLBACK" \
-d "redirect_uri=https://app.com/auth/ms/cb" \
-d "code_verifier=DEIN_CODE_VERIFIER" \
-d "Mail.ReadWrite Mail.Send offline_access"{
"token_typ": "Inhaber",
"Umfang": "Mail.ReadWrite Mail.Send offline_access",
"gültig_bis": 3600,
"Zugriffstoken": "eyJ0eXAiOiJKV1Qi...",
"Aktualisierungstoken": "0.ARoAi7W...",
"id_token": "eyJ0eXAi..."
}Refresh-Token-Handhabung: Rotation, Ablauf und bedingter Zugriff
Microsoft Graph-Aktualisierungstoken haben eine lange Lebensdauer, sind aber nicht permanent. Mehrere Bedingungen können sie stillschweigend ungültig machen. Das Verständnis dieser Randfälle unterscheidet eine produktionsreife Microsoft OAuth-Integration von einer, die bei Unternehmensbenutzern zufällig ausfällt.
ungültiger_grant Fehler elegant behandeln und zur erneuten Authentifizierung auffordern.ungültiger_grant Fehler.ungültiger_grant. Dies ist das erwartete Verhalten – gehen Sie damit um, indem Sie das verknüpfte Konto als zur erneuten Autorisierung markieren.# Aktualisiere das Zugriffstoken mithilfe des gespeicherten Aktualisierungstokens
curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \
-H "Inhaltstyp: Anwendung/x-www-form-urlencoded" \
-d "client_id=DEINE_CLIENT_ID" \
-d "client_secret=DEIN_CLIENT_SECRET" \
-d "grant_type=refresh_token" \
-d "refresh_token=GESPEICHERTER_REFRESH_TOKEN" \
-d "Mail.ReadWrite Mail.Send offline_access"
# Überprüfen Sie in der Antwort IMMER, ob ein neues refresh_token vorhanden ist.
# Falls vorhanden, das gelagerte Teil sofort austauschen.
# Wenn die Fehlermeldung „invalid_grant“ angezeigt wird, fordern Sie den Benutzer auf, sich erneut zu authentifizieren.Häufige AADSTS-Fehler entschlüsselt
Microsoft Graph OAuth-Fehler folgen einem konsistenten AADSTS-Fehlercodemuster. Dies sind die häufigsten, denen Sie bei der Entwicklung und Produktion begegnen werden, mit genauen Ursachen und Behebungen.
| Fehlercode | Was es bedeutet | Grundursache und Behebung |
|---|---|---|
| AADSTS65001 | Die Zustimmung für einen oder mehrere der angeforderten Bereiche wurde nicht erteilt | Der Nutzer hat den Geltungsbereichen Ihrer App nicht zugestimmt, oder ein Mandantenadministrator hat die Zustimmung des Nutzers für Ihre App blockiert. Behebung: Fügen Sie Zustimmung in Ihrer Autorisierungs-URL, um die erneute Anzeige des Zustimmungsbildschirms zu erzwingen, oder senden Sie die Admin-Zustimmungs-URL an den Mandantenadministrator.Füge Aufforderung=Zustimmung oder Administratorzustimmung anfordern hinzu |
| AADSTS50011 | Fehler bei der Weiterleitungs-URI | Die redirect_uri in Ihrer Anfrage nicht exakt mit einer registrierten Weiterleitungs-URI in Ihrer Entra-App-Registrierung übereinstimmt. Schon ein Unterschied bei einem nachgestellten Schrägstrich führt dazu. Lösung: Kopieren Sie die exakte URI aus Ihrer Entra-App-Registrierung und verwenden Sie sie wörtlich.Behebung: Exakte URI-Übereinstimmung in der Entra-App-Registrierung |
| AADSTS700016 | Anwendung im Mandanten nicht gefunden | Die client_id existiert nicht im Mandanten, gegen den die Authentifizierung durchgeführt wird. Tritt häufig bei der Verwendung einer mandantenspezifischen Autorität auf (/{tenant-id}) für eine Mandantenanwendung. Behebung: Verwenden /gemeinsam oder /Organisationen Autorität für Mandantenanwendungen.Korrektur: Wechseln Sie zur Berechtigung /common oder /organizations |
| AADSTS90099 | Die Anwendung wurde in diesem Mandanten nicht autorisiert (consent_required) | Die App existiert, wurde aber im Mandanten des Benutzers nicht genehmigt. Unterscheidet sich von AADSTS65001 dadurch, dass die gesamte App blockiert ist, nicht nur bestimmte Bereiche. Lösung: Senden Sie die Administrator-Zustimmungs-URL an den IT-Administrator des Kunden. Beheben: Admin-Zustimmungs-URL zum Kunden-Mandanten-Administrator |
| AADSTS70011 | Der bereitgestellte Zuschuss ist ungültig oder abgelaufen | Der Refresh-Token oder der Autorisierungscode ist abgelaufen oder wurde widerrufen. Autorisierungscodes laufen nach 10 Minuten ab. Refresh-Tokens laufen nach 90 Tagen Inaktivität oder Widerruf durch den Administrator ab. Behebung: Fordern Sie den Benutzer auf, die Authentifizierung vom Anfang des OAuth-Flows aus neu durchzuführen. Behebung: Vollständige Re-Authentifizierung auffordern |
| AADSTS50076 | Eine MFA ist für diese Richtlinie für bedingten Zugriff erforderlich | Der Mandant des Benutzers erfordert die multifaktorielle Authentifizierung für deine App. Dies ist eine kundenabhängige Entscheidung, die vom Mandantenadministrator erzwungen wird. Deine App kann dies nicht umgehen. Der Benutzer muss die MFA abschließen. Bei Verwendung des Autorisierungscode-Ablaufs wird Microsoft die MFA-Aufforderung automatisch im Browser anzeigen. Probleme treten bei automatisierten Abläufen (Client-Anmeldeinformationen) auf, die die MFA nicht abschließen können. Erwartet: Benutzer muss MFA abschließen |
| Es gibt ein Problem mit der Anmeldung Ihres Kontos vom Typ "Identitätsanbieter" aus. | Benutzerkonto vom externen Identitätsanbieter existiert nicht im Mandanten | Der Benutzer versucht, sich mit einem persönlichen Microsoft-Konto in einem Mandanten zu authentifizieren, der nur organisatorische Konten zulässt, oder umgekehrt. Korrektur: Überprüfen Sie Ihren Autorisierungsendpunkt – wenn Sie ihn verwenden /Organisationen, persönliche Konten können sich nicht authentifizieren. Wechseln Sie zu /gemeinsam wenn Sie beides brauchen.Beheben: Autorität auf /common umschalten |
| Fehler | Zugriff durch bedingte Zugriffrichtlinie blockiert | Die bedingte Zugriffrichtlinie des Mieters hat diesen Authentifizierungsversuch vollständig blockiert (z. B. blockiertes Land, nicht verwaltetes Gerät, blockierte App). Dies ist eine Entscheidung auf Kundenseite. Sie können diese nicht überschreiben. Zeigen Sie dem Benutzer den Fehler an und weisen Sie ihn an, sich an seinen IT-Administrator zu wenden. Kunden-Seite: Nutzer raten, sich an den IT-Administrator zu wenden |
Überspringen Sie 5 Wochen OAuth-Plumbing mit Unipile
Alles in diesem Leitfaden – Entra-App-Registrierung, Authority-Endpunkte, Auswahl des Gültigkeitsbereichs, PKCE, Tokenrotation, Behandlung von AADSTS-Fehlern – ist Entwicklungszeit, die Ihr Produkt nicht voranbringt. Unipile verwaltet den gesamten Microsoft Graph OAuth-Stack als verwalteten Dienst, sodass Ihr Team anstelle von 500 Zeilen OAuth-Infrastrukturcode nur einen API-Aufruf schreibt.
import Anfragen
UNIPILE_API_URL = "https://apiXXX.unipile.com:XXX"
UNIPILE_API_KEY = "dein-api-schlüssel"
# Schritt 1: Erstellen Sie einen gehosteten Authentifizierungslink für Microsoft
response = requests.Beitrag(
f"{UNIPILE_API_URL}/api/v1/hosted/accounts/link",
Kopfzeilen={
"X-API-KEY": UNIPILE_API_SCHLÜSSEL,
"Content-Type": "application/json"
},
json={
"Typ": "erstellen",
"Anbieter": ["MICROSOFT"],
"api_url": UNIPILE_API_URL,
"giltBis": "2026-12-31T23:59:59Z",
# Optional: Verknüpfen Sie diesen Link mit einem bestimmten Benutzer
"Name": "user_id_123",
# Optional: Benachrichtigung erhalten, wenn das Konto verknüpft ist
"Benachrichtigungs-URL": "https://app.yourproduct.com/webhooks/account-linked"
}
)
# Schritt 2: Leiten Sie Ihren Benutzer auf diese URL weiter
gehostete_auth_url = Antwort.json()["url"]
Beispiel für #: https://account.unipile.com/[encoded-token]
# Unipile-Funktionen: Entra-Weiterleitung, Einwilligungsbildschirm, PKCE,
#-Token-Austausch, Aktualisierung des Token-Speichers, Bereichsverwaltung
# Schritt 3: Nach der Authentifizierung die E-Mail-API von Unipile zum Lesen und Senden von E-Mails verwenden
emails = Anfragen.bekommen.(
f"{UNIPILE_API_URL}/api/v1/emails",
Kopfzeilen={"X-API-KEY": UNIPILE_API_SCHLÜSSEL},
params={"Konto_ID": "verknüpftes-Konto-ID"}
)Häufig gestellte Fragen
Die häufigsten Fragen zu Microsoft Graph OAuth für die E-Mail-Integration, von der Auswahl des Gültigkeitsbereichs über den Tokenlebenszyklus bis hin zu Enterprise Consent Flows.
/gemeinsam Der Authentifizierungsendpunkt, eine einzelne Microsoft Entra-App-Registrierung, kümmert sich um die Authentifizierung sowohl für persönliche Outlook.com-Konten als auch für Microsoft 365-Arbeits-/Schulkonten. Der Schlüssel liegt in der Auswahl von "Konten in beliebigen Verzeichnissen und persönlichen Microsoft-Konten" bei der Registrierung Ihrer App im Azure-Portal.ungültiger_grant Fehler. Behandeln Sie dies anmutig: Markieren Sie das verknüpfte Konto als re-authentifizierungspflichtig und zeigen Sie eine klare Re-Authentifizierungsaufforderung in Ihrem Produkt an. Dies ist das erwartete Verhalten – eine Entscheidung auf Kundenseite, die außerhalb Ihrer Kontrolle liegt.Mail.Lesen, Mail.ReadWriteund Mail.Senden sind benutzerfreundliche Gültigkeitsbereiche – einzelne Benutzer können diese während des OAuth-Flows genehmigen. Eine Administratoreinwilligung ist nur für Anwendungsberechtigungen oder hochprivilegierte Gültigkeitsbereiche wie erforderlich Benutzer.AlleLesen. Einige Enterprise-Tenants konfigurieren Richtlinien, die die Zustimmung zu Apps von Drittanbietern blockieren – dies ist eine Entscheidung des Kunden.ungültiger_grant Fehler und ersetze alte Aktualisierungstoken durch das neue, das in jeder Token-Antwort zurückgegeben wird.Zustimmung zu Ihrer Autorisierungs-URL, um einen neuen Zustimmungsbildschirm zu erzwingen. AADSTS90099Die gesamte Anwendung wurde in diesem Mandanten nicht autorisiert – der Mandantenadministrator muss Ihre Anwendung vorab genehmigen. Senden Sie die URL für die Administratoreinwilligung an den IT-Administrator des Kunden. Beide Fehler treten häufig in Unternehmensszenarien auf, in denen Mandanten die Benutzereinwilligung einschränken.Mail.ReadWrite und Mail.Senden im selben Geltungsbereich (scope) des Strings. Beachten Sie, dass Mail.ReadWrite und Mail.Senden sind separate Gültigkeitsbereiche – Lese-/Schreibzugriff gewährt nicht automatisch die Sendeberechtigung. Immer einschließen Offline-Zugriff um sicherzustellen, dass Sie einen Aktualisierungstoken erhalten. Siehe die E-Mail-API-Seite für Implementierungsdetails.