Migrate

Migrate Microsoft 365 to Zoho Mail: 2026 Operational Guide

Move Microsoft 365 mailboxes to Zoho Mail using Zoho's IMAP migration wizard. Tenant prep, throttling, folder mapping, and verified cutover steps.

AK

Alex Kerr

Lead Migration Engineer, Mailbox Taxi

· 11 min read
Modern office building representing a corporate email migration

Zoho Mail keeps winning small and mid-market customers from Microsoft 365, mainly on price and on its tighter integration with the rest of Zoho's suite. The migration itself is one of the cleaner cross-vendor moves available — Zoho's admin console has a dedicated Microsoft 365 migration wizard, and the source side speaks OAuth like every other modern tenant. What you trade for the simpler wizard is finer-grained control: there's no per-folder priority queue, no per-user throttling override, and the error reporting is less detailed than Google's DMS. This guide is the operational plan for moving a 10-to-500-user Microsoft 365 tenant into Zoho Mail without losing weekends.

Office 365
Zoho Mail

Skip the manual setup — let Mailbox Taxi handle it

One desktop app, every IMAP provider, zero data leaving your machine.

When Zoho is the right destination

Zoho Mail makes sense when:

  • You're cost-sensitive and the per-user Microsoft 365 bill is a real problem.
  • You already use Zoho CRM, Zoho Books, or Zoho Projects and want mail in the same identity.
  • You don't need Outlook desktop's deep delegation or Exchange's enterprise compliance suite.
  • You can tolerate Zoho's roughly 5 concurrent migration connection cap and the resulting slower throughput.

It's the wrong destination when:

  • You have heavy legal hold / eDiscovery requirements that Microsoft Purview currently handles. Zoho's compliance tools are improving but not at parity.
  • You depend on Outlook desktop client features (shared calendar overlays, Send-On-Behalf-Of with auto-mapping, MAPI plugins for line-of-business apps).
  • You have more than ~1,000 users. Zoho's migration wizard works but ergonomics suffer at that scale; consider GWMME-style tools or a multi-stage approach.

Pre-flight on the Zoho side

A clean destination tenant is the cheapest insurance policy you can buy.

  • Create the Zoho organisation. Sign up at mailadmin.zoho.com, choose Mail Lite or Mail Premium based on storage needs (Lite gives 5 GB per user, Premium gives 50 GB).
  • Verify the destination domain. Add your primary domain in Zoho Admin and complete the TXT verification. Don't change MX yet — that's the cutover step at the end.
  • Provision all destination users. Bulk-import via CSV in Zoho Admin → Users. Match primary email addresses exactly to the M365 source. Mismatched addresses (alice@company.com source vs alice.smith@company.com destination) cause the migration wizard to skip those mailboxes silently.
  • Configure aliases. Export M365 aliases via PowerShell: Get-Mailbox | Select PrimarySmtpAddress, EmailAddresses | Export-CSV aliases.csv. Import to Zoho via the bulk alias upload in admin. Aliases that don't exist on the destination cause messages to those aliases to be dropped during migration.
  • Set per-user storage quotas. Zoho enforces per-user quotas (unlike Workspace's pooled storage). If a source user has 30 GB of mail and you're on Lite (5 GB per user), the migration will fail mid-way. Either upgrade tier or split the source mailbox into mail + archive before migrating.

Zoho does not pool storage across users

Unlike Google Workspace, Zoho's storage allocation is strict per-user. A 50 GB executive mailbox needs at least the Premium tier (50 GB) and even then leaves no headroom for ongoing mail. Audit source mailbox sizes via M365 PowerShell before picking the tier.

Pre-flight on the Microsoft 365 source

Source-side prep is identical to any other M365 tenant migration. Skip nothing here.

  1. Enable IMAP and EWS for in-scope mailboxes. PowerShell: Set-CASMailbox -Identity user@domain.com -ImapEnabled $true -EwsEnabled $true. Zoho's wizard uses IMAP with OAuth, not EWS, but having both on simplifies fallback if OAuth fails.
  2. Register an Entra ID app for Zoho. Zoho's admin console walks you through this. The app needs Office 365 Exchange Online → IMAP.AccessAsUser.All and User.Read. Grant admin consent. Note the application client ID — Zoho's wizard asks for it.
  3. Grant ApplicationImpersonation to a migration service account. Same pattern as any M365 migration: New-ManagementRoleAssignment -Role ApplicationImpersonation -User migration.svc@yourdomain.com. The wizard uses this account to read every source mailbox.
  4. Audit conditional access policies. If your tenant blocks legacy auth or restricts service principals by location, the Zoho migration wizard's IP range (published in Zoho's docs) needs to be excluded. Create the exclusion before starting the wizard, not during.
  5. Lift any per-user IMAP rate limits. Some hardened tenants apply throttling policies that cap IMAP connection rate. PowerShell: Get-ThrottlingPolicy | Where-Object {$_.ImapMaxConcurrency -lt 5}. Either raise to default or apply a migration-specific throttling policy.

Folder and item mapping

Zoho's IMAP folder model is close to Gmail's, which means the same translation problems Outlook administrators see when moving to Workspace.

M365 sourceZoho destinationNotes
InboxInboxClean direct map
Sent ItemsSentSent flag preserved
DraftsDraftsMigrated but usually stale
Deleted ItemsTrash30-day auto-purge in Zoho
Junk EmailSpamZoho re-classifies with its own filter
Custom foldersCustom folders with the same nameNested folders supported
Archive (in-place archive mailbox)Migrate as separate job, not mergedDon't merge with primary
Categories (colour)TagsZoho uses tags instead of coloured categories; colour mapping is approximate
Flags / follow-upFlagsZoho has explicit message flags, near 1:1
CalendarZoho CalendarNot via mail wizard — separate ICS import
ContactsZoho ContactsNot via mail wizard — separate CSV import

In-place archive mailboxes are the biggest gotcha. M365 attaches a second mailbox to each user with the same primary address but a different endpoint. Zoho's wizard reads only the primary mailbox by default. You need to run a second migration pointing at the archive endpoint or accept that archive content stays in M365.

Running the Zoho migration wizard

  1. Open the Zoho Mail migration wizard

    Zoho Mail Admin Console → Mail Administration → Migrations → Add Migration. Choose "Office 365 / Exchange Online" as the source type. The wizard asks for: source server (outlook.office365.com), authentication type (OAuth recommended), and the Entra ID application client ID.

  2. Authenticate the source tenant

    Click "Connect" and authenticate as the migration service account. The wizard performs a permission test by enumerating one source mailbox. If this fails, the cause is always one of: missing impersonation role, missing admin consent on the Entra ID app, conditional access blocking the service account. Fix and retry.

  3. Upload the user mapping CSV

    Build a CSV with two columns: source_email,destination_email. Most entries are identical (alice@company.com,alice@company.com) but you can use this to remap addresses if the destination uses a different format. Upload to the wizard; it validates each row.

  4. Run a 3-user pilot

    Select three users from different teams and run a pilot migration. Watch the per-user status in the wizard. Pilot timing tells you what a full wave looks like. Validate destination mailboxes: folder structure, attachments, flags, message counts.

  5. Build production waves of 20–40 users

    Zoho's concurrent connection limit caps useful wave size around 40 users. Beyond that, queueing kicks in and the throughput per user drops. Schedule waves 12–24 hours apart to let source-side throttling reset and to give your team a recovery window if a wave fails.

  6. Monitor errors and re-run gaps

    The wizard's error report is per-user. Common errors: AUTHENTICATIONFAILED (re-auth service account), OAuth2 token expired (refresh failed mid-run), Quota exceeded (Zoho per-user storage cap hit), Too many simultaneous connections (reduce wave size). Use the wizard's "re-run failed users" option rather than re-running the whole wave.

  7. Reconcile counts and cutover MX

    For each migrated user, compare source M365 folder counts with destination Zoho folder counts. Discrepancies above 1% need investigation. Once the whole org reconciles, schedule MX cutover for a low-traffic window. Update DNS to point MX at Zoho's SMTP gateways. Run a final delta wizard pass 24 hours after cutover to catch in-flight mail.

Zoho per-user storage is enforced strictly

A migration that runs cleanly for 95 of 100 users but fails on the five executives with 40+ GB mailboxes will look like a "5% failure rate" on a status report. In reality those five users are blocked completely until you either raise their tier or migrate their archive separately. Audit mailbox sizes before tier selection.

Errors you'll see in production

  • AUTHENTICATIONFAILED Invalid credentials on M365 source — service account credentials revoked or conditional access blocking. Fix in Entra ID, not by retrying.
  • OAuth2 token expired — refresh token aged out. Re-auth the migration account. If frequent, your tenant's app token lifetime is short — extend in Entra ID conditional access.
  • Too many simultaneous connections — Zoho's IMAP cap is roughly 5 concurrent connections per tenant. Reduce wave concurrency.
  • Quota exceeded — destination user hit Zoho per-user storage. Upgrade tier or skip large folders.
  • Message too large for destination — Zoho default is 25 MB per message, same as M365. Rare unless M365 admin raised the limit.
  • ServerBusyException — Microsoft outbound throttling. Reduce concurrency, do not retry harder.
  • Folder UTF-7 conversion error — non-ASCII folder names. Rename source folder to plain ASCII or accept mangled destination names.

When the wizard isn't enough

The Zoho wizard handles most migrations. It struggles with:

  1. PST archives on user laptops. No way for the cloud wizard to see them. Use a desktop IMAP tool like Mailbox Taxi to push laptop PSTs directly into Zoho.
  2. One-off departed users. Running the wizard for one mailbox is overkill. A desktop tool finishes in 30 minutes.
  3. Hybrid on-prem + cloud Exchange. The wizard reads only Exchange Online. On-prem mailboxes need separate IMAP migration.
  4. Per-folder priority. If you want to migrate Inbox first and Archive last across all users, the wizard runs folder order serially per user, not in parallel across users. A scriptable IMAP tool gives you that control.

For broader context, see the Microsoft 365 migration guide for tenant prep and decommissioning. The reverse direction is covered in Zoho to Microsoft 365 migration. If Zoho turns out not to be the right destination, the Microsoft 365 to Workspace path and the simpler Microsoft 365 to Gmail walkthrough cover the two most common alternatives. For IMAP migration patterns that apply regardless of source, the IMAP to Microsoft 365 guide explains the inverse flow.

After cutover

  • Days 1–3. Final delta wizard runs; monitor inbound mail volume on Zoho. Watch for users who type old-domain reply-to.
  • Days 4–10. Rebuild Inbox rules, signatures, delegation. Zoho's rule engine is different from M365's — expect 30 minutes per power user.
  • Days 11–20. Decommission M365 licenses for migrated users. Keep one admin license active for forensics. Disable spam filtering on the now-empty M365 tenant.
  • Days 21–30. Final reconciliation report comparing source and destination message counts. Archive wizard logs for audit.
  • Day 60+. Decommission source tenant or convert to long-term archive. Cancel M365 subscription.

The single most common post-cutover issue is users still typing the old domain in their reply-to or signature. A two-week reminder email is cheap and effective; embedding the new Zoho address in a footer disclaimer until users adapt is even cheaper.

Try Mailbox Taxi

Migrate your mailbox the easy way

Join the waitlist for early access and lock in launch pricing.

Related reading

Try Mailbox Taxi

Migrate your mailbox the easy way

Join the waitlist for early access and lock in launch pricing.