Common Exchange Online Migration Errors — Causes and Resolutions

🔧 Troubleshooting · Migration

Common Exchange Online Migration Errors — Causes and Resolutions

Remote Move Migration is one of the most commonly used mailbox migration methods in a Hybrid Exchange environment, allowing organisations to seamlessly migrate mailboxes from Exchange Server 2016, Exchange Server 2019, and Exchange Server Subscription Edition (SE) to Exchange Online while maintaining coexistence between on-premises and cloud environments.

Although the migration process is generally smooth, administrators often encounter various errors related to mailbox configuration, Active Directory objects, archive settings, mailbox quotas, hybrid attributes, and existing move requests. This article covers the most common real-world Exchange Online migration errors, along with their causes and resolutions based on practical troubleshooting experience.

📋 Errors Covered in This Article

For each error we cover: the exact error message, what it means, common causes, resolution steps, and relevant PowerShell commands.

  • UserAlreadyBeingMigratedException — User Already Being Migrated
  • OnpremisesUserIsBeingMovedException — Existing Move Request Blocking Migration
  • MigrationRecipientNotFoundException — Recipient Not Found
  • TargetUserAlreadyHasPrimaryMailboxException — Target User Already Has a Primary Mailbox
  • TargetDeliveryDomainMismatchPermanentException — Missing Target Delivery Domain
  • NotAcceptedDomainException — Invalid SMTP Domain
  • MailboxReplicationPermanentException — Archive Mailbox Already Exists
  • CorruptFolderRule — Corrupt Inbox Rule
  • MailboxExceedsTargetQuotaPermanentException — Mailbox Size Exceeds Target Quota
  • QuotaExceededException — Folder Item Count Limit Reached
  • MailboxDumpsterExceedsTargetQuotaPermanentException — Recoverable Items (Dumpster) Exceeds Quota

1. User Already Being Migrated

UserAlreadyBeingMigratedException:

The user already has a pending request. Please remove the existing request and resume the current batch or start a new batch for this user.

Target user already has a primary mailbox.

Exchange Online has detected an existing migration request or the mailbox has already been migrated to the cloud. A duplicate move request is preventing the new one from being created.

  1. 1
    Check for an existing move request in Exchange Online using Get-MoveRequest.
  2. 2
    Remove the stale or completed move request with Remove-MoveRequest.
  3. 3
    If no move request exists, verify whether the mailbox has already been successfully migrated to Exchange Online.
💻 PowerShell — Exchange Online

Connect-ExchangeOnline

# Check for existing move request
Get-MoveRequest -Identity user@domain.com

# Remove the stale request if found
Remove-MoveRequest -Identity user@domain.com

# Verify the mailbox exists in Exchange Online
Get-Mailbox -Identity user@domain.com | Select-Object DisplayName,RecipientTypeDetails

2. Existing Move Request Blocking Migration

OnpremisesUserIsBeingMovedException:

On-premises user has an existing move to database ‘<Database>’ with status ‘InProgress’ and flags ‘IntraOrg, Pull’.

A previous mailbox move request still exists in Exchange on-premises. Exchange Online will not create another move request until the existing one is removed from the source environment.

  1. 1
    Connect to Exchange on-premises PowerShell and verify the existing move request.
  2. 2
    Remove the completed or stuck move request.
  3. 3
    Re-initiate the migration once confirmed clear.
💻 PowerShell — Exchange On-Premises

# Run from Exchange On-Premises Management Shell

# Check for existing move request
Get-MoveRequest -Identity user@domain.com

# Remove the completed or stuck request
Remove-MoveRequest -Identity user@domain.com

# Confirm no move requests remain
Get-MoveRequest -Identity user@domain.com

3. Recipient Not Found

MigrationRecipientNotFoundException:

A recipient wasn’t found for this migration.

Create a recipient of the appropriate type for this migration and try again.

Exchange cannot locate the mailbox object in Active Directory or Exchange on-premises. The recipient does not exist or is not visible to the migration engine.

  • User account deleted from Active Directory
  • User account disabled before migration completed
  • Mailbox object missing or corrupt
  • Azure AD synchronisation issue — user not synced to Exchange Online

  1. 1
    Verify the mailbox exists in Exchange on-premises using Get-Recipient.
  2. 2
    Confirm the user account is active and enabled in Active Directory.
  3. 3
    Check Azure AD Connect synchronisation status and force a delta sync if needed.
  4. 4
    Restart the migration once the recipient object is confirmed and synchronised.
💻 PowerShell — Exchange On-Premises

# Verify recipient exists on-premises
Get-Recipient user@domain.com

# Check mailbox object
Get-Mailbox -Identity user@domain.com

# Force Azure AD Connect delta sync (run on the AD Connect server)
Start-ADSyncSyncCycle -PolicyType Delta

4. Target User Already Has a Primary Mailbox

TargetUserAlreadyHasPrimaryMailboxException:

Target user already has a primary mailbox.

A mailbox already exists in Exchange Online for this user. The migration engine cannot create a second primary mailbox for the same account.

  • User was already migrated in a previous batch
  • Duplicate mailbox configuration — both on-premises and cloud mailboxes exist
  • A cloud mailbox was created manually before migration was initiated

  1. 1
    Verify the mailbox location and recipient type to confirm where the primary mailbox currently exists.
  2. 2
    If a duplicate mailbox exists in Exchange Online, disable the on-premises mailbox.
  3. 3
    Enable the remote mailbox on-premises to properly represent the cloud mailbox.
  4. 4
    Initiate a new New-MoveRequest from the on-premises Exchange to cloud.
💻 PowerShell — Exchange On-Premises

# Check recipient type and location
Get-Recipient -Identity user@domain.com | Select-Object DisplayName,RecipientType,RecipientTypeDetails

# Verify if mailbox exists in Exchange Online
Get-Mailbox -Identity user@domain.com | Select-Object DisplayName,RecipientTypeDetails,ExchangeGuid

# Disable on-premises mailbox if duplicate exists
Disable-Mailbox -Identity user@domain.com

# Enable as remote mailbox pointing to Exchange Online
Enable-RemoteMailbox -Identity user@domain.com -RemoteRoutingAddress user@tenant.mail.onmicrosoft.com

5. Missing Target Delivery Domain

TargetDeliveryDomainMismatchPermanentException:

The target mailbox doesn’t have an SMTP proxy matching ‘<tenant>.mail.onmicrosoft.com’.

The required Exchange Online routing address (@tenant.mail.onmicrosoft.com) is missing from the mailbox’s proxy addresses. This address is mandatory for hybrid remote move migrations to function correctly.

  1. 1
    Open Exchange on-premises Admin Center (ECP) and verify that email address policies are applied to the mailbox.
  2. 2
    Enable automatic address updates if the policy is not stamping the mail.onmicrosoft.com routing address.
  3. 3
    Manually add the routing address if email address policies are not covering this mailbox.
  4. 4
    Restart the migration once the routing address appears in the proxy addresses.
💻 PowerShell — Exchange On-Premises

# Check existing proxy addresses
Get-Mailbox -Identity user@domain.com | Select-Object -ExpandProperty EmailAddresses

# Manually add the missing routing address
Set-Mailbox -Identity user@domain.com -EmailAddresses @{Add="user@tenant.mail.onmicrosoft.com"}

# Force email address policy update on the mailbox
Set-Mailbox -Identity user@domain.com -EmailAddressPolicyEnabled $true

# Verify the address was added
Get-Mailbox -Identity user@domain.com | Select-Object -ExpandProperty EmailAddresses

6. Invalid SMTP Domain

NotAcceptedDomainException:

You can’t use the domain localhost because it’s not an accepted domain for your organization.

The mailbox contains an invalid SMTP address using a domain that Exchange Online does not recognise as an accepted domain — most commonly user@localhost or other non-routable addresses left over from legacy configurations.

  1. 1
    Identify all invalid proxy addresses on the mailbox (e.g. addresses using @localhost, @localdomain, or other non-routable domains).
  2. 2
    Remove the invalid SMTP address from the mailbox.
  3. 3
    Restart the migration once the invalid address is removed.
💻 PowerShell — Exchange On-Premises

# List all proxy addresses to identify invalid ones
Get-Mailbox -Identity user@domain.com | Select-Object -ExpandProperty EmailAddresses

# Remove the specific invalid SMTP address
Set-Mailbox -Identity user@domain.com -EmailAddresses @{Remove="user@localhost"}

# Verify removal
Get-Mailbox -Identity user@domain.com | Select-Object -ExpandProperty EmailAddresses

7. Archive Mailbox Already Exists

MailboxReplicationPermanentException:

You must specify the PrimaryOnly parameter.

Target user already has an archive mailbox.

The archive mailbox already exists in Exchange Online, but the corresponding remote archive object is missing on-premises. Exchange Online cannot create a second archive during migration and requires the -PrimaryOnly flag to migrate just the primary mailbox.

  1. 1
    Enable the remote archive mailbox on-premises to align the hybrid objects.
  2. 2
    Create the move request using the -PrimaryOnly parameter to migrate only the primary mailbox and avoid the archive conflict.
💻 PowerShell — Exchange On-Premises

# Enable remote archive mailbox on-premises
Enable-RemoteMailbox "user@domain.com" -Archive

# Create move request with -PrimaryOnly to skip archive migration
New-MoveRequest -Identity "user@domain.com" -Remote -TargetDeliveryDomain tenant.mail.onmicrosoft.com -PrimaryOnly

# Monitor the move request
Get-MoveRequest -Identity "user@domain.com" | Select-Object Status,PercentComplete,Message

8. Corrupt Inbox Rule

CorruptFolderRule:

Inbox, FolderRule, SourcePrincipalError

An invalid Inbox rule is preventing mailbox synchronisation during migration. A common example is a rule such as “If message is received from user@domain.com, move message to Inbox” — since all messages are already delivered to Inbox, Exchange treats this as an invalid circular rule during migration.

  1. 1
    Review all Inbox rules on the mailbox to identify any that are invalid, circular, or reference missing folders.
  2. 2
    Remove the problematic rule by name or identity.
  3. 3
    Resume the migration once the corrupt rule is removed.
💻 PowerShell — Exchange Online / On-Premises

Connect-ExchangeOnline

# List all inbox rules for the mailbox
Get-InboxRule -Mailbox user@domain.com | Select-Object Name,Enabled,Description

# Remove the problematic rule by name
Remove-InboxRule -Mailbox user@domain.com -Identity "Rule Name" -Confirm:$false

# Verify remaining rules
Get-InboxRule -Mailbox user@domain.com | Select-Object Name,Enabled

9. Mailbox Size Exceeds Target Quota

MailboxExceedsTargetQuotaPermanentException:

Mailbox size exceeds target quota.

The source mailbox is larger than the quota available in Exchange Online under the user’s current licence. The migration engine cannot place the mailbox content into a target that has insufficient space.

Licence Type Mailbox Quota Recommended Migration Limit
Exchange Online Plan 1 50 GB Keep below 45 GB
Exchange Online Plan 2 / E3 / E5 100 GB Keep below 90 GB

⚠️ Best Practice Buffer

As a recommended practice, keep mailbox sizes below 45 GB for Exchange Online Plan 1 and 90 GB for Exchange Online Plan 2. This buffer accommodates mailbox growth during the migration process and reduces the likelihood of quota-related migration failures.

  • Upgrade the user’s Exchange Online licence to Plan 2 or an E3/E5 plan
  • Enable Online Archive (In-Place Archive) to offload older content
  • Move historical mail to archive before migration
  • Export older data to PST and import post-migration
  • Clean Deleted Items and Junk Email folders before migrating
💻 PowerShell — Check Mailbox Size

# Check mailbox size on-premises
Get-MailboxStatistics -Identity user@domain.com | Select-Object DisplayName,TotalItemSize,ItemCount

# Check mailbox size in Exchange Online
Connect-ExchangeOnline
Get-MailboxStatistics -Identity user@domain.com | Select-Object DisplayName,TotalItemSize,ItemCount

# Enable Online Archive in Exchange Online
Enable-Mailbox -Identity user@domain.com -Archive

10. Folder Item Count Limit Reached

QuotaExceededException:

MapiExceptionMailboxMessagesPerFolderCountReceiveQuotaExceeded

One or more folders in the mailbox contain more items than Exchange Online supports. The most common threshold is 1,000,000 items in a single folder. This is frequently seen in Inbox, Sent Items, or custom folders that have accumulated items over many years.

  1. 1
    Identify folders with the highest item count using Get-MailboxFolderStatistics, sorted descending.
  2. 2
    Reduce the item count by deleting unnecessary emails in the over-limit folder.
  3. 3
    Split the folder contents into subfolders to distribute items across multiple containers.
  4. 4
    Archive older emails or export to PST and remove from the mailbox.
  5. 5
    Restart the migration after cleanup.
💻 PowerShell — Find Over-Limit Folders

# Identify folders sorted by item count (highest first)
Get-MailboxFolderStatistics -Identity user@domain.com |
  Select-Object Name,ItemsInFolder,FolderSize |
  Sort-Object ItemsInFolder -Descending |
  Format-Table -AutoSize

# Find folders exceeding 1 million items
Get-MailboxFolderStatistics -Identity user@domain.com |
  Where-Object { $_.ItemsInFolder -gt 1000000 } |
  Select-Object Name,ItemsInFolder,FolderSize

11. Recoverable Items (Dumpster) Exceeds Quota

MailboxDumpsterExceedsTargetQuotaPermanentException:

Mailbox dumpster size exceeds target quota.

The Recoverable Items folder (also known as the Dumpster) contains more data than the target mailbox in Exchange Online can accept. The Recoverable Items quota in Exchange Online is 30 GB by default (100 GB when a hold is applied).

  • Litigation Hold enabled — retains all deleted items indefinitely
  • In-Place Hold applied — retains items matching search criteria
  • Single Item Recovery enabled — retains deleted items for the recovery period
  • Large Purges folder — items purged by the user but retained by holds
  • Large Versions folder — multiple versions of items stored by holds

💻 PowerShell — Diagnose Dumpster Size

Connect-ExchangeOnline

# Verify total deleted item size and count
Get-MailboxStatistics user@domain.com | Format-List TotalDeletedItemSize,ItemCount

# Verify hold settings on the mailbox
Get-Mailbox user@domain.com |
  Format-List LitigationHoldEnabled,InPlaceHolds,SingleItemRecoveryEnabled

# Verify Recoverable Items folder breakdown
Get-MailboxFolderStatistics -Identity user@domain.com -FolderScope RecoverableItems |
  Select-Object Name,FolderAndSubfolderSize,ItemsInFolder

  1. 1
    Remove mailbox holds — ensure legal and compliance teams have approved this step before removing any holds.
  2. 2
    Disable Single Item Recovery if not required.
  3. 3
    Reset retention periods where permitted by policy.
  4. 4
    Run the Managed Folder Assistant to process retention policies and allow the Recoverable Items folder to reduce in size.
  5. 5
    Allow time for the dumpster to drain, then restart the migration.
💻 PowerShell — Resolve Dumpster Quota

Connect-ExchangeOnline

# Remove Litigation Hold (ensure legal approval first)
Set-Mailbox -Identity user@domain.com -LitigationHoldEnabled $false

# Disable Single Item Recovery
Set-Mailbox -Identity user@domain.com -SingleItemRecoveryEnabled $false -RetainDeletedItemsFor 14

# Run Managed Folder Assistant to process retention immediately
Start-ManagedFolderAssistant user@domain.com

# Confirm Recoverable Items size after processing
Get-MailboxFolderStatistics -Identity user@domain.com -FolderScope RecoverableItems |
  Select-Object Name,FolderAndSubfolderSize,ItemsInFolder

Conclusion

Exchange Hybrid Remote Move migrations from Exchange Server 2016, Exchange Server 2019, and Exchange Server Subscription Edition (SE) to Exchange Online are generally reliable, but administrators may occasionally encounter mailbox, directory, archive, quota, or synchronisation-related errors.

Understanding the root cause of these errors is often the key to resolving them quickly and avoiding unnecessary troubleshooting. By performing proper pre-migration checks and following the resolutions in this article, most migration failures can be identified and corrected before they significantly impact migration timelines.

  • Always run Get-MoveRequest before initiating migration to check for existing or stale requests
  • Verify all proxy addresses include the @tenant.mail.onmicrosoft.com routing address
  • Check mailbox size against the target licence quota and apply a buffer before migrating
  • Review Inbox rules for circular or invalid conditions that corrupt folder rules
  • Check holds and Recoverable Items size for large mailboxes before initiating migration
  • Run Get-MailboxFolderStatistics on large mailboxes to identify folders approaching the 1M item limit

⚠️ Note

The errors, causes, and resolutions documented in this article are based on real-world Exchange Hybrid migration scenarios encountered during mailbox migrations to Exchange Online. While these solutions have proven effective in many environments, every organisation may have unique configurations and requirements. Always validate changes in a non-production environment where possible and review the latest Microsoft documentation before implementing changes in production.

Explore More Exchange Online Resources

Continue learning with our complete Exchange Online administration guide, course modules, and interview preparation resources.

Leave a Comment

Your email address will not be published. Required fields are marked *