Exchange ServerDeep dive

Mailbox move and migration errors (MRS): a quick reference for Exchange Server and hybrid

Look up a move request status, StatusDetail or MRS exception: what Queued, StalledDueToTarget_*, TooManyBadItems and 30-plus more mean in Exchange Server and hybrid, and what to check first.

A mailbox move rarely fails with a clear message. Instead you get a status such as Queued or AutoSuspended, a StatusDetail such as StalledDueToTarget_MdbReplication, or an exception name buried in the move report. This quick reference lists 37 of them for moves inside Exchange Server SE and Exchange 2019 and for hybrid moves to and from Exchange Online, with the meaning, the usual cause and the first check: press Ctrl+F, paste what you see and follow the guide link where there is one.

Codes in this quick reference

  • Queued: the move request is waiting for MRS to pick it upGet-MoveRequest Status
  • InProgress: MRS is processing the move requestGet-MoveRequest Status
  • AutoSuspended: initial copy done, request paused before completionGet-MoveRequest Status
  • Suspended: move request paused by an administratorGet-MoveRequest Status
  • Synced: initial copy done, waiting for completion (Exchange Online)Get-MoveRequest Status
  • CompletionInProgress: final sync and switch-over runningGet-MoveRequest Status
  • Completed: move finished; remove the request before moving the mailbox againGet-MoveRequest Status
  • CompletedWithWarning: move finished but something was skipped or not cleaned upGet-MoveRequest Status

+ 29 more codes in the tables below.

How this guide is organised: How to read these codes → Move request status → StatusDetail → Failure types and MRS exceptions → Migration endpoint and MRSProxy errors → Batch, user and data consistency states → How to verify a fixFlow diagram of the article's sections in reading order: 1. How to read these codes. 2. Move request status. 3. StatusDetail. 4. Failure types and MRS exceptions. 5. Migration endpoint and MRSProxy errors. 6. Batch, user and data consistency states. 7. How to verify a fix. Toolbox: Resume-MoveRequest, Get-MoveRequest, Get-MoveRequestStatistics, AutoSuspended, CopyingMessages.1How to read thesecodes2Move request status3StatusDetail4Failure types andMRS exceptions5Migration endpointand MRSProxy errors6Batch, user and dataconsistency states7How to verify a fixTOOLBOXResume-MoveRequestGet-MoveRequestGet-MoveRequestStatisticsAutoSuspendedCopyingMessagesHow this guide is organised: How to read these codes → Move request status → StatusDetail → Failure types and MRS exceptions → Migration endpoint and MRSProxy errors → Batch, user and data consistency states → How to verify a fixFlow diagram of the article's sections in reading order: 1. How to read these codes. 2. Move request status. 3. StatusDetail. 4. Failure types and MRS exceptions. 5. Migration endpoint and MRSProxy errors. 6. Batch, user and data consistency states. 7. How to verify a fix. Toolbox: Resume-MoveRequest, Get-MoveRequest, Get-MoveRequestStatistics, AutoSuspended, CopyingMessages.1How to read these codes2Move request status3StatusDetail4Failure types and MRS exceptions5Migration endpoint and MRSProxy errors6Batch, user and data consistency states7How to verify a fixTOOLBOXResume-MoveRequestGet-MoveRequestGet-MoveRequestStatisticsAutoSuspendedCopyingMessages
At a glance: how this guide is organised · 7 sections · 5 key settings and tools

How to read these codes#

Every move, whether it starts as New-MoveRequest, a local migration batch or a hybrid remote move batch, is carried out by the Mailbox Replication service (MRS). The same request reports its state in four places:

  • Status (Get-MoveRequest): the overall state, such as Queued, InProgress or Failed.
  • StatusDetail (Get-MoveRequestStatistics): what MRS is doing right now, including the stalled states.
  • FailureType, FailureSide and Message (Get-MoveRequestStatistics): the exception name, the side that failed (Source or Target) and the error text. -IncludeReport adds the full history.
  • Batch and user status (Get-MigrationBatch, Get-MigrationUser): what the EAC migration pages show. The user's ErrorSummary usually repeats the MRS message.

Run the commands where the request lives: local moves in the Exchange Management Shell, hybrid moves in either direction in Exchange Online PowerShell, because Exchange Online's MRS drives them through the MRSProxy endpoint on your servers.

PowerShell
# Every request, sorted by what MRS is doing
Get-MoveRequest -ResultSize Unlimited | Get-MoveRequestStatistics |
    Sort-Object StatusDetail | Format-Table DisplayName,Status,StatusDetail,PercentComplete -AutoSize

# One request in detail
$s = Get-MoveRequestStatistics -Identity alex@contoso.com -IncludeReport
$s | Format-List Status,StatusDetail,FailureType,FailureSide,Message,BadItemsEncountered
$s.Report.Failures | Select-Object -Last 3 Timestamp,FailureType,Message

# Hybrid batches (Exchange Online PowerShell)
Get-MigrationUser -BatchId "Wave 1" | Format-Table Identity,Status,ErrorSummary -AutoSize

Tip: moves run at a lower priority than client connections and mail flow. Microsoft's hybrid troubleshooter suggests waiting until a move has shown no progress for a long stretch, around eight hours, before you treat a queued or slow move as a fault.

Move request status (Get-MoveRequest)#

CodeMeaningUsual causeFirst check
QueuedCreated and waiting for MRS to pick it upA busy server or tenant; moves yield to client and mail-flow workWait; if nothing changes for hours, read StatusDetail and the report
InProgressMRS is working on the requestNormalStatusDetail names the phase; PercentComplete should keep rising
AutoSuspendedInitial copy done; the request paused itself before completionCreated with -SuspendWhenReadyToCompleteResume-MoveRequest when you're ready for the switch-over
SuspendedPausedAn admin ran Suspend-MoveRequest, or the request was created with -SuspendResume-MoveRequest
Synced (Exchange Online)Initial copy done; incremental syncs keep it current until completionThe batch doesn't complete automatically, or CompleteAfter is still in the futureComplete-MigrationBatch, or check CompleteAfter (read as UTC unless -TimeZone was used)
CompletionInProgressFinal sync and switch-over runningNormal at the end of a moveGive it time; users restart Outlook once it completes
CompletedThe move finishedSuccessRemove-MoveRequest: a mailbox with a request still attached can't be moved again
CompletedWithWarningFinished, but something was skipped or not cleaned upSkipped items or a failed clean-up stepRead the -IncludeReport output before you accept it
CompletedWithSkippedItems (Exchange Online)Finished with items left behindCorrupt, oversized or missing items the service skippedGet-MigrationUserStatistics -IncludeSkippedItems
FailedStopped by a permanent errorSee FailureType and Message (next tables)Fix the cause, then Resume-MoveRequest, or remove and recreate the request

StatusDetail: throttled and stalled moves#

A stall isn't a failure. Before MRS writes more data, workload management (WLM) checks the health of the source and target, and Microsoft documents that in Exchange Server 2019 it allows 10 simultaneous moves from the same source or to the same target by default. In a batch of 50 mailboxes going to one database, about 10 show CopyingMessages and the rest stall until a slot frees up.

CodeMeaningUsual causeFirst check
CopyingMessagesActively copying mailbox contentNormalCount moves per target database before you suspect a problem
StalledDueToTarget_MdbReplicationPaused until the target database's DAG copies catch upThe WLM limit, or a passive copy with a growing copy or replay queueGet-MailboxDatabaseCopyStatus queue lengths; fix replication first. Guide
StalledDueToTarget_MdbAvailabilityPaused by the target database availability checkThe WLM limit, or a database that is dismounted or keeps failing overGet-MailboxDatabase -Status: Mounted and MountedOnServer. Guide
StalledDueToTarget_DiskLatencyPaused because target disk latency is too highThe WLM limit, slow storage, or a backup running at the same timeLatency on the database and log volumes. Guide
Relinquishing job because of large delays due to unfavorable server health or budget limitationsA move report line (wording as reported by admins): MRS released the job and picks it up again laterA long WLM stallThe report lines around it for the throttled resource; fix that resource or wait. Guide

If the stalls are only the concurrency limit, wait, spread the batch over more target databases, or raise the limit with the New-SettingOverride commands in Microsoft's article: start at 25, add 10 at a time while you watch performance, and don't go above 100.

Failure types and MRS exceptions#

These appear in FailureType and Message, or in the migration user's error. Treat every skipped item as lost for good.

CodeMeaningUsual causeFirst check
TooManyBadItemsPermanentExceptionThis mailbox exceeded the maximum number of corrupted items that were specified for this move request.Corrupt items; a new on-premises request allows zero by default$s.Report.BadItems, then Set-MoveRequest -BadItemLimit (51 or more also needs -AcceptLargeDataLoss) and resume. Guide
TooManyLargeItemsPermanentExceptionThis mailbox exceeded the maximum number of large items that were specified for this request. Often paired with MapiExceptionMaxSubmissionExceeded (ec=1242)Items over Exchange Online's 150 MB message limitSort the mailbox by size, export the oversized items, delete them and resume (Microsoft KB)
SourceMailboxAlreadyBeingMovedPermanentExceptionCouldn't switch the mailbox into Sync Source mode.The message lists four: another admin's move, a locked mailbox, missing MRS permissions, or a network drop that leaves the old session open for up to 2 hours (TCP KeepAlive)Look for another request on the mailbox; wait for the lock to clear, then resume
UserAlreadyBeingMigratedExceptionThe user 'Name' already has a pending request. The details add Mailbox 'Name' is already being moved to a cloud databaseAn active or orphaned move request in Exchange OnlineGet-MoveRequest in Exchange Online, Remove-MoveRequest, then resume the batch (Microsoft KB)
MigrationPermanentException: The onboarding move could not be created because user 'Name' is already being moved.A new onboarding move collides with an earlier oneA leftover move request on-premises, or, when neither side shows one, a move reference left in on-premises AD (msExchMailboxMove* attributes such as msExchMailboxMoveRemoteHostName)Check both sides; clear an orphaned on-premises reference only as the same KB describes
MigrationPermanentException: Target user 'User' already has a primary mailbox.The target object already has a mailbox, so MRS won't create oneOffboarding: homeMDB and homeMTA are populated on the on-premises AD user. Onboarding: admins report it when the cloud user already has its own mailbox, for example from an early licenceGet-ADUser -Properties homeMDB,homeMTA; clear both with Set-ADObject -Clear, then Start-MigrationUser (Microsoft KB)
You can't use the domain because it's not an accepted domain for your organization. (NotAcceptedDomainException)A proxy address uses a domain that Exchange Online doesn't acceptOften a .local or other non-routable address on the on-premises mailboxCompare EmailAddresses with Get-AcceptedDomain in Exchange Online; add and verify the domain, remove the address and sync, or license the user (Microsoft KB)
MigrationPermanentException: The target mailbox doesn't have an SMTP proxy matching '<tenant>.mail.onmicrosoft.com'The routing address is missingEmailAddressPolicyEnabled is False, or the address hasn't synced yetAdd the address, wait for sync, check Get-MailUser in Exchange Online. Guide

Note: BadItemLimit and LargeItemLimit are deprecated for moves into Exchange Online. The service grades each move with a Data Consistency Score instead (last table).

Migration endpoint and MRSProxy errors#

These stop a hybrid batch before data moves. The first line is generic, so read the error details. MRSProxy and WS-Security must be enabled on every server behind the endpoint name; test with Test-MigrationServerAvailability -ExchangeRemoteMove in Exchange Online PowerShell.

CodeMeaningUsual causeFirst check
The connection to the server 'mail.contoso.com' could not be completed.Exchange Online's MRS couldn't use the endpointA wrapper: the cause follows in the detailsRerun the test and read ErrorDetail. Guide
The Mailbox Replication Service was unable to connect to the remote server using the credentials provided.Authentication to MRSProxy failedWrong, expired or locked-out endpoint accountUse DOMAIN\user format; update with Set-MigrationEndpoint -Credentials. Guide
The HTTP request is unauthorized with client authentication scheme 'Negotiate'.Windows authentication at mrsproxy.svc was refusedCredentials, or a reverse proxy pre-authenticating the pathPublish /EWS/mrsproxy.svc without pre-authentication. Guide
The remote server returned an error: (401) Unauthorized.Access denied at mrsproxy.svcAs above, or TLS offload while Extended Protection is onFrom outside, a 401 from IIS offering Negotiate and NTLM is good. Guide
The call to 'https://mail.contoso.com/EWS/mrsproxy.svc' timed out.No answer in timeFirewall, intrusion-detection flood limits, or the Hybrid Agent in modern hybridAllow Microsoft 365 ranges on 443 and exempt them from flood limits. Guide

Batch, user and data consistency states#

CodeMeaningUsual causeFirst check
Synced with errors / Completed with errorsSome users in the batch failedPer-user errors from the tables aboveGet-MigrationUser -BatchId: read each ErrorSummary, fix, then Start-MigrationUser. Guide
Completing (stuck)The batch can't finishRequests waiting as AutoSuspended, or leftover completed requestsResume AutoSuspended requests, remove completed ones; Microsoft's troubleshooter then removes the batch
Queued (migration user)Waiting for a free migration slotAll of the endpoint's concurrent migrations are busyGet-MigrationEndpoint | Format-List MaxConcurrentMigrations
DataConsistencyScore: InvestigateSkipped items need approval before completionCorrupt, oversized or missing itemsGet-MigrationUserStatistics -IncludeSkippedItems, then Set-MigrationUser -ApproveSkippedItems. Guide
DataConsistencyScore: PoorCompletion is blockedSignificant data loss detectedCan't be approved; open a case with Microsoft Support. Guide
The operation couldn't be performed because object 'Migration.8f3e7716-2011-43e4-96b1-aba62d229136' couldn't be foundThe Migration arbitration mailbox is missingDeleted, or never created; on-premises batches can't runRecreate the arbitration mailbox. Guide
Cannot find a recipient that has mailbox GUID (public folders)Exchange Online can't see the new public folder mailboxes yetDirectory replication lagWait about an hour and retry. Guide
Request was quarantined because of the following error: The given key was not present in the dictionary.A public folder migration job was quarantined (wording as reported by admins)An item the job can't copyStop the batch and isolate the folder named in the report. Guide
550 5.1.1 RESOLVER.ADR.ExRecipNotFound (IMCEAEX)Replies to older mail bounce after a moveA cached legacy address that no longer resolvesAdd it as an X500 proxy address. Guide

How to verify a fix#

  1. The request finishes: StatusDetail moves through CopyingMessages to Completed and PercentComplete reaches 100. Read the report of any CompletedWithWarning before you accept it.
  2. The mailbox is where you expect: for a local move, Get-Mailbox shows the target database. For onboarding, Get-RemoteMailbox on-premises shows the remote routing address and Get-Mailbox in Exchange Online returns a user mailbox.
  3. The batch is clean: every user Completed, with a Data Consistency Score of Perfect or Good, or skipped items you approved on purpose.
  4. The endpoint is healthy: after any MRSProxy, certificate or password change, Test-MigrationServerAvailability returns Success.
  5. Nothing is left behind: completed requests are removed, so the next move of the same mailbox can start.
PowerShell
Get-MoveRequest -ResultSize Unlimited | Get-MoveRequestStatistics |
    Format-Table DisplayName,Status,StatusDetail,PercentComplete -AutoSize
Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest -Confirm:$false

# Exchange Online PowerShell
Test-MigrationServerAvailability -ExchangeRemoteMove -RemoteServer mail.contoso.com -Credentials (Get-Credential CONTOSO\svc-migration)

References#

Revision history: Oct 2026 — re-checked against Microsoft Learn: 2 corrections; 1 detail reworded or labelled as reported by admins.

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)