Exchange Online IMAP4 Service Zugriff
EWS wurde im Oktober 2026 in der Cloud deaktiviert und alle automatischen Zugriffe auf Postfächer können die Microsoft Graph API nutzen. Für viele automatisierte Prozesse sind aber POP3/IMAP4 immer noch gerne genutzte Wege. Auch mit Exchange Online können Sie per IMAP als Service auf andere Postfächer zugreifen. Sie müssen sich nur die Berechtigungen geben. Wobei wir hier nicht darüber reden, wie ein Benutzer ein anderes Postfach mit öffnen kann, sondern wie ein automatischer Prozess ohne Multi Faktor solche Abfragen machen kann. Dazu brauchen Sie eine App Registration.
Einrichten der App und Rechte
Der Zugriff auf ein Postfach per IMAP4 ist aus meiner Sicht natürlich nur der zweibeste Weg, da über IMAP viele Informationen in Exchange nur eingeschränkt abrufbar sind. Sie können zwar sehr einfach noch Mails lesen, senden, verschieben und löschen. Zugriffe auf Termine, Aufgaben und Kontakte sind so aber nicht mögliche. Für IMAP gibt es es aber auch keine "RBAC for Applications" sondern eine andere Berechtigungsvergabe. Die Schritte zum Anlegen einer Application mit Secret sind identisch zur ersten Beschreibung. Der Unterschied ist die Vergabe der Berechtigungen.
| Schritt | Erledigt |
|---|---|
Entra ID Application anlegenZuerst müssen Sie in Entra ID eine Application anlegen.
Entra ID legt in ihrem Tenant dann auch eine Enterprise Registration an. |
|
App SecretDamit sich die Application authentifizieren kann, müssen Sie entweder ein Kennwort von Entra ID generieren lassen. Ich bevorzuge die Anmeldung mittels Zertifikat und lege mir dazu immer ein eigenes "SelfSigned-Zertifikat auf dem System an, auf dem der Prozess läuft. Per PowerShell ist das schnell gemacht: # Selbst signiertes Zertifikat erstellen
$appcert = New-SelfSignedCertificate `
-Subject "CN=MSXFAQ_MGGraph" `
-CertStoreLocation "Cert:\CurrentUser\My" `
-KeyExportPolicy Exportable `
-KeySpec Signature `
-KeyLength 2048 `
-KeyAlgorithm RSA `
-HashAlgorithm SHA256 `
-notafter (get-date).addyears(5)
#Thumbprint merken
$appcert.Thumbprint
# Als Datei exportieren
Export-Certificate `
-Cert $appcert `
-FilePath "MSXFAQ_MGGraph.cer"
Merken sie sich den Thumbprint für die spätere Konfiguration ihrer Applikation. Diese CER-Datei lade ich dann im Entra ID Portal hoch.
|
|
API Berechtigungen vergebenFür den Zugriff per IMAP4 müssen Sie der Applikation aber die IMAP4-Rechte gewähren. Suchen Sie dazu zuerst nach der Schnittstelle "Office 365 Exchange Online"
Dann wechseln Sie wieder auf "Application permissions" und suchen nach IMAP.
Ich habe hier auch noch das SMTP-Versand-Recht addiert. Das ist aber nur erforderlich, wenn ihr Service auch per SMTP im Namen der anderen User senden soll. Auch dieses Rechte müssen Sie danach mit Admin Consent noch gesondert freischalten.
Anders als bei Graph hat die App damit aber noch keine Rechte auf Postfächer sondern es ist nur die Anmeldung per IMAP4 erlaubt. |
|
Service PrincipalSie müssen dann wieder mit der Exchange Online PowerShell einen Service Principal anlegen aber dieses Objekt bekommt dann die Rechte mit "Add-MailboxPermission´" auf die gewünschten Postfächer. Zuerst müssen wir ein ServicePrincipal anlegen. Die Benötigten Felder können Sie mit "Get-MgServicePrincipal" oder das Entra ID AdminCenter abfragen.
Wichtig: New-ServicePrincipal ` -AppId <AppID der Enterprise Application in Entra ID ` -ObjectId <ObjectID der Enterprise Application in Entra ID> -DisplayName "MSXFAQ IMAP4App1" Der so neu angelegte ServicePrincipal hat natürlich auch wieder eine ID, die wir im nächsten Schritt benötigen.
|
|
PostfachrechteIm zweiten Schritt können wir dem Service Principal die Berechtigungen auf das Postfach geben. Add-MailboxPermission ` -Identity "user1@msxfaqdev.de" ` -User $ServicePrincipal.Id ` -AccessRights FullAccess Diese Berechtigungen können Sie auch im Exchange Admin Center bei "Full Access" sehen. Wenn ihre App keine Mails abrufen sondern nur Senden soll, dann können Sie Rechte hier auch auf "SendAs" oder "SendOnBehalf" beschränken. |
|
Damit ist die Konfiguration der Applikation und deren Berechtigungen abgeschlossen.
OAUTH und Zugriff per IMAP4
Die nächste Herausforderung ist nun die Anmeldung mit dem IMAP4-Client per OAUTH. Das ist dann eine Aufgabe ihrer Applikation, die statt Graph auf IMAP4 aufsetzt und mit Exchange Online kompatibel sein will. Sie muss zumindest OAUTH unterstützen, damit eine Anmeldung mit "AppID" und "AppSecret" möglich ist. Die Application muss sich zur Anmeldung natürlich immer noch per OAUTH2 ein Token Um sich per IMAP4 nun anzumelden, braucht ihre Software eine Token, welches es sich vorher abrufen muss. Dazu brauchen wir wieder die ClientID der App-Registration (nicht die Enterprise Application).
$Body = @{
client_id = $ClientId
scope = "https://outlook.office.com/.default"
client_secret = $AppSecret
grant_type = "client_credentials"
}
# Get OAuth 2.0 Token
$TokenRequest = Invoke-WebRequest `
-Method POST `
-Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" `
-ContentType "application/x-www-form-urlencoded" `
-Body $Body `
-UseBasicParsing
$Token = ($tokenRequest.Content | ConvertFrom-Json).access_token
Der Inhalt von "$token" sollte ein SAML-Token sein, welches Sie z.B. auf jwt.io oder jwt.ms decodieren können. Mit der Information des Username und des Tokens können Sie dann ganz klassisch eine IMAP4-Anmeldung gegen Exchange ausführen.
Die gleiche Funktion können Sie auch mit CURL ausführen. Hier habe ich die Parameter mit "-d" addiert und nicht als JSON-Formular in den Daten mitgeliefert.
CLIENT_ID="ClientID hier addieren" CLIENT_SECRET="ClientSecret hier addieren" TENANT_ID="TenantID hier addieren" curl \ --request POST \ --header "Content-Type: application/x-www-form-urlencoded" \ --header "Accept: application/json" \ --user "$CLIENT_ID:$CLIENT_SECRET" \ --data "grant_type=client_credentials" \ --data "scope=https://outlook.office.com/.default" \ "https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token"
Sie müssen im Aufruf natürlich die Werte für "<Client_ID>", "<ClientSecret>" und "<TenantID>" durch ihre App Registration ersetzen. Eventuell müssen Sie die Anmeldedaten noch BASE64 kodieren, wenn dort Sonderzeichen vorkommen. S
- CURL
- curl
https://curl.se/ - Authenticate an IMAP, POP or SMTP
connection using OAuth
https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth - curl Authentication: Basic Auth, Bearer
Token and OAuth Examples
https://securebin.ai/blog/curl-authentication-methods/ - How to use authorization_code grant_type
for complex Oauth environments
https://community.snowflake.com/s/article/How-to-use-authorization-code-grant-type-for-complex-Oauth-environments
Sowohl per Powershell als auch per CURL bekommen Sie dann das SAML-Token, welches 60 Minuten gültig ist. Dieses müssen Sie dann mit dem Usernamen des Postfachs und das Token kombinieren und BASE64 codieren.
base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A")
Den String nutzen Sie dann bei der Anmeldung:
AUTHENTICATE XOAUTH2 <base64 string in XOAUTH2 format>
Exchange sollte sie dann entsprechend "willkommen" heißen und danach geht es mit den normalen IMAP4-Befehlen weiter.
- Graph Token
- IMAP4 mit Office 365
- AppID, ServicePrincipal und ClientID
- Exchange Online Authentifizierung
- ConvertFrom-Bearertoken
-
Authentifizieren einer IMAP-, POP- oder
SMTP-Verbindung mithilfe von OAuth
https://learn.microsoft.com/de-de/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth -
New-ServicePrincipal (ExchangePowerShell)
https://learn.microsoft.com/en-us/powershell/module/exchangepowershell/new-serviceprincipal?view=exchange-ps -
Exchange Online IMAP4 and POP3 Access for
Applications
https://office365itpros.com/2022/07/04/exchange-online-imap4-pop3/ - Deprecation of Basic authentication in Exchange Online
https://learn.Microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/deprecation-of-basic-authentication-exchange-online - Basic Authentication Deprecation in Exchange Online –
Time’s Up
https://techcommunity.Microsoft.com/blog/exchange/basic-authentication-deprecation-in-exchange-online-%e2%80%93-time%e2%80%99s-up/3695312
Senden von Mails
Die IMAP4-Spezifikation erlaubt wohl einen Mailversand per IMAP4, indem Sie einfach eine Mail nach "Postausgang" legen. Das scheint Exchange Online aber nicht zu unterstützen. Insofern bleiben nur zwei Wege, nachdem EWS entfallen ist.
- Microsoft Graph
Über die "Maill.Send"-Methode können Sie eine Mail mittels Microsoft Graph senden. Durch das "Full Access". kann die App schon so tun, als wäre sie das Postfach. Wer stattdessen "SendAs" nutzen möchte, muss die Rechte etwas anpassen. - SMTP
Natürlich können Sie sich auch per SMTP an "outlook.office.com:587" anmelden und Mails senden. Dazu benötigen Sie aber natürlich auch noch die entsprechenden Berechtigungen.
Für den Versand per SMTP müssen Sie sich natürlich auch erst wieder die Berechtigungen geben lassen und ein passendes Token anfordern. Hier ein Beispiel mit genau dem einen erforderlichen Recht. Sie können als scope natürlich auch wieder "https://oiutlook.office.com./default" nehmen und damit mit einem Token dann beide Funktionen ausführen.
$Body = @{
client_id = $ClientId
scope = "https://outlook.outlook.com/smtp-send"
client_secret = $AppSecret
grant_type = "client_credentials"
}
# Get OAuth 2.0 Token
$TokenRequest = Invoke-WebRequest `
-Method POST `
-Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" `
-ContentType "application/x-www-form-urlencoded" `
-Body $Body `
-UseBasicParsing
$Token = ($tokenRequest.Content | ConvertFrom-Json).access_token
Analog zu IMAP müssen Sie dann wieder bei SMTP den Username und das Token kombinieren und BASE64 codieren.
base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A")
Den String nutzen Sie dann bei der Anmeldung:
AUTH XOAUTH2 <base64 string in XOAUTH2 format>
Danach geht es mit den normalen SMTP-Befehlen weiter.
- Graph Mail.Send
- Send-MGUserMail
https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users.actions/send-mgusermail - MGGraph PowerShell
- MGGraph Mail
- Authentifizieren einer IMAP-, POP- oder SMTP-Verbindung mithilfe von OAuth
https://learn.microsoft.com/de-de/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth - Practical Graph: Use PowerShell to Send Messages from Shared Mailboxes,
Groups, and Distribution Lists
https://practical365.com/sendas-send-on-behalf-of-mail-objects/
Rückbau
Wenn Sie den Zugriff nicht mehr benötigen, dann sollten Sie nacheinander die Schritte sauber wieder rückgängig machen:
| Schritt | Erledigt |
|---|---|
Applikation beenden und Zertifikat löschenZuerst beenden sie die Applikation, die sich an Exchange Online mit der App Registration angemeldet hat. Damit sollte die Funktion beendet sein und niemand mehr sich mit der App Registration anmelden. Sie können im Entra ID Portal die App zur Sicherheit auch noch "deaktivieren", so dass keine weitere Anmeldung mehr möglich ist. |
|
Kontrolle der AnmeldungenNach einigen Tagen sollten Sie im Entra ID Portal auf die entsprechende "Enterprise Registration" gehen und auf verbliebene Anmeldungen kontrollieren. Im Idealfall gibt es keine Anmeldungen mehr oder sie sehen die fehlerhaften Anmeldeversuche an einer deaktivierten Applikation |
|
Berechtigungen auf dem Postfach entfernenDamit keine Altlasten übrig bleiben, sollten sie mit Remove-MailboxPermisssion die früher eingeräumten Berechtigungen wieder entfernen. |
|
Service Principal entfernenDanach können Sie den Exchange Service Principal entfernen, welchen Sie anfangs extra angelegt haben. |
|
App-Registration entfernenDer letzt Schritt ist dann die Löschung der App-Registration. |
|
Weitere Links
- RBAC for Applications mit Exchange Online
- RPC/HTTP - Outlook Anywhere
- MAPI/HTTP
- ActiveSync
- EWS
- Graph API
- Graph und Kennworte
- Graph Mail.Send
- IMAP4
- IMAP4 mit Office 365
- Exchange Online Authentifizierung
- EWS und Impersonation
-
Authenticate an IMAP, POP or SMTP connection using OAuth | Microsoft Learn
https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth - Deprecation of Basic authentication in Exchange Online
https://learn.Microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/deprecation-of-basic-authentication-exchange-online - Basic Authentication Deprecation in Exchange Online –
Time’s Up
https://techcommunity.Microsoft.com/blog/exchange/basic-authentication-deprecation-in-exchange-online-%e2%80%93-time%e2%80%99s-up/3695312 - Verwalten von E-Mail-Apps für Benutzerpostfächer
https://learn.microsoft.com/de-de/Exchange/recipients-in-exchange-online/manage-user-mailboxes/managing-email-apps-for-user-mailboxes - POP3 und IMAP4 in Exchange Online
https://learn.microsoft.com/de-de/exchange/clients-and-mobile-in-exchange-online/pop3-and-imap4/pop3-and-imap4 - Aktivieren oder Deaktivieren der authentifizierten
Client-SMTP-Übermittlung (SMTP AUTH) in Exchange Online
https://learn.microsoft.com/de-de/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission - Microsoft 365 - E-Mail-Zugriff per IMAP konfigurieren
https://advolux.docs.haufe.io/Microsoft_365_-_E-Mail-Zugriff_per_IMAP_konfigurieren.html - Microsoft 365: App-only OAuth IMAP für eine automatisierte
Migration vorbereiten
https://infoswitch.fr/de/blog/microsoft-365-imap-oauth-app-only-migration





















