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.
Alex Kerr
Lead Migration Engineer, Mailbox Taxi
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.
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.comsource vsalice.smith@company.comdestination) 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.
- 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. - Register an Entra ID app for Zoho. Zoho's admin console walks you through this. The app needs
Office 365 Exchange Online → IMAP.AccessAsUser.AllandUser.Read. Grant admin consent. Note the application client ID — Zoho's wizard asks for it. - 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. - 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.
- 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 source | Zoho destination | Notes |
|---|---|---|
| Inbox | Inbox | Clean direct map |
| Sent Items | Sent | Sent flag preserved |
| Drafts | Drafts | Migrated but usually stale |
| Deleted Items | Trash | 30-day auto-purge in Zoho |
| Junk Email | Spam | Zoho re-classifies with its own filter |
| Custom folders | Custom folders with the same name | Nested folders supported |
| Archive (in-place archive mailbox) | Migrate as separate job, not merged | Don't merge with primary |
| Categories (colour) | Tags | Zoho uses tags instead of coloured categories; colour mapping is approximate |
| Flags / follow-up | Flags | Zoho has explicit message flags, near 1:1 |
| Calendar | Zoho Calendar | Not via mail wizard — separate ICS import |
| Contacts | Zoho Contacts | Not 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
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.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.
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.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.
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.
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.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 credentialson 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:
- 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.
- One-off departed users. Running the wizard for one mailbox is overkill. A desktop tool finishes in 30 minutes.
- Hybrid on-prem + cloud Exchange. The wizard reads only Exchange Online. On-prem mailboxes need separate IMAP migration.
- 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.
Migrate your mailbox the easy way
Join the waitlist for early access and lock in launch pricing.
Related reading
migrate
Migrate Zoho Mail to Office 365: An IMAP Cutover Playbook
Move Zoho Mail to Office 365 over IMAP with app passwords, verified Exchange Online endpoints, and clean folder mapping. A tested guide for tenant cutovers.
migrate
How to Migrate Office 365 to Gmail
Migrate Office 365 to Gmail with Modern Auth, shared mailbox handling, and tenant-side OAuth so you don't fight IMAP throttling at cutover.
migrate
Migrate Microsoft 365 to Google Workspace: DMS Path 2026
Step-by-step plan to migrate Microsoft 365 mailboxes to Google Workspace using Data Migration Service. OAuth, throttling, batching, and cutover.
blog
Office 365 Migration: The Definitive Playbook
A complete office 365 migration playbook for IT admins: discovery, batching, throttling, modern auth, cutover vs staged vs hybrid, and validation.
migrate
How to Migrate from IMAP to Office 365
Step-by-step IMAP to Office 365 migration: EAC setup, CSV mapping file, throttling limits, cutover steps and the gotchas that bite admins.
Migrate your mailbox the easy way
Join the waitlist for early access and lock in launch pricing.