Skip to main content

Microsoft 365 EWS retirement: keeping your migrations running

Microsoft is retiring Exchange Web Services (EWS) in Exchange Online. From 1 October 2026 Microsoft starts switching EWS off tenant by tenant, and on 1 April 2027 it is switched off permanently. CloudM Migrate uses EWS for some Microsoft 365 workloads today, so this affects any migration running in that window.

We are moving those workloads to Microsoft Graph. Until that work is generally available, you can keep your migrations running by adding your CloudM Migrate app registration to Microsoft's EWS allow list. This article covers what is affected, what we are doing, and the steps to take.

If your migration finishes before October 2026, you do not need to do anything. If it runs during or after October 2026 and includes mail, calendars, contacts, tasks or notes on Microsoft 365, follow the steps in Keeping EWS working in the meantime below.

What EWS retirement affects

The change applies to Exchange Online only. On-premises Exchange servers and hosted Exchange servers are not affected, and connections to them carry on as they are.

For Microsoft 365, this is what CloudM Migrate uses today:

Workload Connects through Affected
Mail Exchange Web Services Yes
Calendars Exchange Web Services Yes
Contacts Exchange Web Services Yes
Tasks Exchange Web Services Yes
Notes Exchange Web Services Yes
OneDrive and SharePoint Microsoft Graph and SharePoint APIs No
Microsoft Teams Microsoft Graph No
Microsoft 365 Groups and Planner Microsoft Graph No
User, group and directory discovery Microsoft Graph and Exchange Online PowerShell No

This applies whether Microsoft 365 is your source or your destination. A Google Workspace to Microsoft 365 migration writes mail into Exchange Online over EWS, so it is affected in the same way as a migration out of Microsoft 365.

Microsoft's timeline

Date What happens
1 October 2026 Microsoft begins setting EWSEnabled to False in tenants where it has not been configured, rolling out progressively. Once that reaches your tenant, EWS is blocked for every application unless you have set an allow list.
1 April 2027 EWS is fully disabled in Exchange Online. The allow list stops working and no configuration will keep EWS available.

Microsoft's own summary is in Deprecation of Exchange Web Services in Exchange Online.

What CloudM is doing

We are moving CloudM Migrate's Microsoft 365 mail, calendar, contacts, tasks and notes connectors from Exchange Web Services to Microsoft Graph, ahead of Microsoft's April 2027 shutdown.

Graph support for these workloads is in development and is not in general release yet. Check the release notes for the version that introduces it. Everything below is what to do in the meantime.

Keeping EWS working in the meantime

Microsoft lets you name the applications that are still allowed to use EWS. Adding your CloudM Migrate app registration to that list keeps migrations running until April 2027.

Before you start, you need:

  • An account with the Exchange Administrator or Global Administrator role in the Microsoft 365 tenant.
  • The Exchange Online PowerShell module installed.
  • The client ID of the app registration CloudM Migrate uses for the connection.

Step 1: find your app registration's client ID

The app registration lives in your own tenant. It is the one created when you set up the Microsoft 365 connection, either with the Create Azure AD application button or with CloudM's PowerShell script.

To find its client ID, either:

  1. In CloudM Migrate, open your Microsoft 365 connection settings and copy the value in Application permissions client id.
  2. Or in the Microsoft Entra admin centre, go to App registrations and open the application. The automated setup names it CloudM Migrate; the limited scopes script names it with a CloudM- prefix. Copy the Application (client) ID.

If you migrate Microsoft Teams you will also have a second, delegated application. That one uses Microsoft Graph only, so it does not need to be on the EWS allow list.

Step 2: check what is already on the allow list

Connect to Exchange Online PowerShell and read the current settings:

Connect-ExchangeOnline

Get-OrganizationConfig -RetrieveEwsOperationAccessPolicy | Format-List EwsEnabled,EwsAllowedAppIDs

Note the -RetrieveEwsOperationAccessPolicy switch. Without it, EwsAllowedAppIDs comes back empty even when a list is set.

Write down any app IDs already in the list. You need them in the next step.

Step 3: add CloudM Migrate to the allow list

Setting EwsAllowedAppIDs replaces the entire list. There is no option to add or remove a single entry. Always include every app ID that still needs EWS, including the ones you noted in step 2, or you will cut off another application.

If nothing else needs EWS, run this with your own client ID in place of the example:

Set-OrganizationConfig -EwsEnabled $true -EwsAllowedAppIDs "00000000-0000-0000-0000-000000000000"

If other applications need EWS too, list them all, separated by commas:

Set-OrganizationConfig -EwsEnabled $true -EwsAllowedAppIDs "existing-app-id,cloudm-migrate-app-id"

Set both parameters together. Once enforcement reaches your tenant, EwsEnabled set to $true with no allow list blocks every application rather than allowing them.

Step 4: confirm it worked

  1. Run the Get-OrganizationConfig command from step 2 again and check that EwsEnabled is True and your client ID appears in EwsAllowedAppIDs.
  2. In CloudM Migrate, run a connection test on the Microsoft 365 connection.

Changes to organisation settings take a while to apply across the service. If a connection test fails straight after you make the change, wait and try again before troubleshooting anything else.

Step 5: repeat on the other tenant if needed

The allow list is per tenant. For a Microsoft 365 to Microsoft 365 migration, do this in the source tenant and the destination tenant.

Troubleshooting

Mailbox operations fail with an access denied or 403 error

Cause: EWS has been blocked at the tenant level, either because Microsoft's rollout reached your tenant or because an administrator set EwsEnabled to False.

Resolution: Follow the steps above. Check EwsEnabled is True and that the CloudM Migrate client ID is in EwsAllowedAppIDs.

The allow list is set, but one user's mailbox still fails

Cause: EWS has been disabled on that individual mailbox.

Resolution: Check and re-enable it for that user:

Get-CASMailbox user@contoso.com | Format-List EwsEnabled

Set-CASMailbox user@contoso.com -EwsEnabled $true

The per-mailbox setting only has an effect while the organisation-level EwsEnabled is not False.

Another application stopped working after setting the allow list

Cause: EwsAllowedAppIDs was overwritten rather than added to.

Resolution: Run Set-OrganizationConfig again with the full comma-separated list of every app ID that needs EWS.

EwsAllowedAppIDs comes back empty

Cause: Either the -RetrieveEwsOperationAccessPolicy switch was left off the Get-OrganizationConfig command, or Microsoft's rollout of the setting has not reached your tenant yet.

Resolution: Re-run the command with the switch. If it is still empty and you cannot set a value, the rollout has not reached you. Check again in a few days.

Frequently asked questions

Does this affect on-premises or hosted Exchange migrations?

No. Microsoft is retiring EWS in Exchange Online only. Migrations from an Exchange server you or a hosting provider runs are unaffected, and the connection setup for them does not change.

Does it affect migrations that do not touch Microsoft 365?

No. A Google Workspace to Google Workspace migration, or any migration between two non-Microsoft platforms, uses no EWS at all.

My migration only covers OneDrive and SharePoint. Do I need to do this?

No. Those workloads already run on Microsoft Graph and the SharePoint APIs.

What happens on 1 April 2027?

The allow list stops working and EWS is gone. Any migration involving Microsoft 365 mail, calendars, contacts, tasks or notes after that date needs a version of CloudM Migrate running those workloads on Microsoft Graph.

Should I set this up even if my migration is short?

If any part of it runs on or after 1 October 2026, or you are not certain of the dates, set it up. It is a single command, it takes effect immediately for your tenant, and you can undo it by setting EwsAllowedAppIDs to $null.

Can I restrict the application to specific mailboxes instead?

Yes, and it is worth doing separately from this. See Azure AD Application - Limited Scopes - PowerShell Method. Limiting scopes does not remove the need for the EWS allow list.

Related articles

Was this article helpful?
0 out of 0 found this helpful