Mail.Read
Read mail in user mailboxes.
Least-privilege guidance: Use delegated Mail.Read for the signed-in user's mailbox; use application access only for approved unattended scenarios.
Implementation playbook
Grant it correctly and verify the token
Microsoft Graph authorizes the endpoint, token type, permission claim, user role, and resource together.
Why access still fails
- The app was granted a permission that does not cover the exact endpoint or method.
- The token contains delegated scopes when the app needs application roles, or application roles when a signed-in user is required.
- Consent was not completed, the token was not refreshed, or the signed-in user lacks the required Entra role or license.
- Application-wide mailbox access is substantially broader and should be constrained with Exchange application access controls where applicable.
Recommended setup
- Confirm the exact endpoint and HTTP method, then select Mail.Read only if its Microsoft method documentation lists it.
- Choose delegated or application access and confirm this record supports that mode.
- Grant admin consent only after the application, publisher, tenant, and requested permission have been reviewed.
- Acquire a new token after the permission or consent change; old tokens do not gain new claims.
- Retest the smallest read or write operation before expanding the application workflow.
Verify
- Use Get-MgContext to confirm tenant, account, authentication type, and delegated scopes.
- For delegated tokens, verify the scp claim; for app-only tokens, verify the roles claim contains the expected permission.
- Confirm the token audience is Microsoft Graph and retry the exact endpoint with a new request ID.
Escalate when
- The endpoint documentation lists this permission, a new token contains the correct claim, and the request still returns 401/403.
- The same operation works for one identity or tenant but not another after role, license, ownership, and Conditional Access are compared.
- You can provide the UTC time, sanitized request/response, request ID, tenant/app IDs, token type, and granted permission list.
Inspect the active Graph PowerShell context
Get-MgContext | Select-Object ClientId,TenantId,Account,AuthType,ScopesRead-only. For app-only access, inspect the access token roles claim as well.
Permission evidence template
Permission: Mail.Read
Access mode: <delegated | application>
Endpoint and method: <GET https://graph.microsoft.com/v1.0/...>
UTC timestamp: <yyyy-mm-dd hh:mm:ssZ>
Request ID: <guid>Template only. Do not paste access tokens or secrets into tickets.
Permission modes
- Delegated
- Supported — user or admin consent depending on policy
- Application
- Supported — admin consent required
Common uses
- Read user messages
- Read mail folders
- Process mailbox content
Advertisement
