Pre-Migration

Before starting your migration with the IceWarp Exchange Migration Tool, ensure your environment is properly prepared. The following steps will help you set up a smooth, reliable, and interruption-free migration experience.

Step 1 – Plan your migration timing

  • Choose the date when to switch to IceWarp.
  • Verify that your current mail system license or subscription remains valid during the migration and that your environment is ready.
  • Migration time depends on data size and user count — small migrations may finish within a day, while large ones can take several days. The following table provides approximate migration times depending on the size of your organization.
Number of Users Estimated Migration Time
Up to 50 Up to 1 day (24 hours)
50 to 1000 Several days, up to 1 week
More than 1000 Several weeks

Step 2 – Set up the destination environment

Select your target deployment of IceWarp.

  • For on-premises setup, install IceWarp Server in advance. A preconfigured virtual image for VMware or Hyper-V is available for quick deployment. Installations on Windows and Linux, or via Docker are also supported. Refer to the linked guides for installation details.
  • For IceWarp Cloud, sign up for an IceWarp Cloud account and configure your domain before you begin (see our pricing for details).

Step 3 – Set Up Bulk Data Access from Exchange with Throttling Policy Management

To ensure a smooth migration of large data volumes from Microsoft Exchange to IceWarp, it’s important to adjust the throttling policy on your Exchange Server. By default, Exchange limits simultaneous requests and operations, which can slow down the migration process or cause timeouts for users actively using their mailboxes. This step explains how to optimize these limits to improve migration performance and stability.

Tool Setup Considerations

The IceWarp Exchange Migration Tool is designed with built-in capabilities that ensure stable and efficient data transfer during migration:

  • Batching — Processes multiple items simultaneously for faster migration throughput.
  • Impersonation — Uses a single service account to access multiple mailboxes securely.
  • Automatic retry logic — Automatically retries operations when throttled or temporarily interrupted.
  • Detailed logging — Records requests, responses, and any encountered errors for troubleshooting and auditing.

If using a compatible third-party EWS- or PowerShell-based migration script, make sure it supports these same features for optimal performance.

Throttling Policies in Exchange 2016

Exchange throttling policies control how many operations and connections can run simultaneously. Adjusting these limits improves migration performance by enabling smoother bulk operations and preventing throttling or slowdowns during large data transfers.

The following parameters are the most relevant for optimizing Exchange migrations:

  • EWSMaxConcurrency — Defines how many simultaneous Exchange Web Services (EWS) connections are allowed.
  • EWSMaxSubscriptions — Sets the maximum number of push or pull notifications that can be active at once.
  • EWSFindCountLimit — Determines how many items (such as emails) can be returned in a single EWS query.
  • RCAMaxConcurrency — Limits the number of concurrent MAPI (Outlook-style) connections per user.
  • PowerShellMaxConcurrency — Controls the number of concurrent remote PowerShell sessions.
  • MessageRateLimit — Specifies how many messages can be sent per minute by a user or service account.

Creating a Custom Throttling Policy

You need to create a custom throttling policy with relaxed limits and assign it to the service account that will be used for the migration.

1. Create a New Policy
Copy
PowerShell

    
        New-ThrottlingPolicy -Name "BulkAccessPolicy" `
        -EWSMaxConcurrency 50 `
        -EWSMaxBurst 5000 `
        -EWSRechargeRate 100 `
        -EWSCutoffBalance 10000 `
        -EWSMaxSubscriptions 100                    
    
2. Apply the Policy to Your Service Account

Run the following commands to assign your new throttling policy and verify it’s applied correctly:

Copy
PowerShell

        Set-Mailbox "ServiceAccountName" -ThrottlingPolicy "BulkAccessPolicy"
        # Check assignment
        Get-Mailbox "ServiceAccountName" | fl ThrottlingPolicy
                        
Note: Monitor server performance after applying relaxed limits.

Best Practices for Bulk Access

  • Use impersonation:
Copy
PowerShell
        
        New-ManagementRoleAssignment -Name "impersonationAssignmentName" `
        -Role "ApplicationImpersonation" `
        -User "ServiceAccountName"                                
  • Limit concurrent threads (10–20 parallel mailboxes).
  • Batch read operations (e.g., 100 items per request).
  • Implement backoff and retry (e.g., wait 30–60 seconds after throttling).
  • Avoid long-running open connections.

Optional: Disable Throttling (Not Recommended for Production)

Copy
PowerShell
        
        New-ThrottlingPolicy -Name "NoThrottle" `
         -EWSMaxConcurrency Unlimited `
         -EWSMaxBurst Unlimited `
         -EWSRechargeRate Unlimited `
         -EWSCutoffBalance Unlimited
        Set-Mailbox "ServiceAccountName" -ThrottlingPolicy "NoThrottle"
                

Use only temporarily during migration or internal testing.

Step 4 – Grant Impersonation Rights for All Users in Exchange 2016

To migrate email data from multiple mailboxes efficiently, you need a service account that has permission to access all user mailboxes. This is done by granting the account Application Impersonation rights. It allows the account to act on behalf of any user during the migration process, accessing their mailboxes via EWS or other interfaces.

1. Create the Service Account

You can create a new service account using the following PowerShell command:

Copy
PowerShell
                
        New-Mailbox -Name "ImpersonationService" `
        -UserPrincipalName impersonation@yourdomain.com `
        -Password (ConvertTo-SecureString -String 'P@ssword123!' -AsPlainText -Force) `
        -DisplayName "Impersonation Service Account"
                

2. Assign Application Impersonation Rights

Run the command below to grant the service account impersonation rights over all users:

Copy
PowerShell
                
        New-ManagementRoleAssignment -Name "ImpersonationAssignment" `
        -Role "ApplicationImpersonation" `
        -User "impersonation@yourdomain.com"
                

This command automatically applies impersonation rights across the entire Exchange organization. No wildcard or scope is necessary unless you want to limit it.

3. Optional: Limit Scope of Impersonation

If you don’t want the service account to access all mailboxes, and want to restrict the impersonation rights to only specific users, groups, or organizational units, you can create a custom scope using the New-ManagementScope cmdlet.

4. Verify or Remove Impersonation Rights

To view current impersonation assignments:

Copy
PowerShell
        
        Get-ManagementRoleAssignment -Role "ApplicationImpersonation"
                

To remove an impersonation assignment:

Copy
PowerShell
                
        Remove-ManagementRoleAssignment "ImpersonationAssignment"