Migration playbook · Email and domains

How to migrate Zoho Mail to Microsoft 365

Copy Zoho Mail mailboxes into Exchange Online with Microsoft's IMAP migration, use Zoho's own export tools for calendars, contacts and PST archives, then move your domain's mail records.

Updated 7 phases25 detailed steps12 official sources
Start here

How do you migrate Zoho Mail to Microsoft 365?

Short answer

This moves Zoho Mail mailboxes into Microsoft 365. Microsoft's built-in IMAP migration (IMAP is the standard way mail apps read a mailbox) copies each mailbox's mail folders and keeps copying new mail about once a day until you delete the batch, a few days after you switch over.

  • Recommended route: Microsoft IMAP migration batch (built into Exchange Online), with Zoho PST export for archives
  • Order: Check that Zoho allows IMAP before anything else, because it decides the route.
  • 7 phases: Get ready, Set up Microsoft 365, Prepare passwords and CSV, Copy the mail, Move contacts and calendars, Switch over and Check and clean up.
  • You're done when: Every mailbox shows Synced with no errors, and every Zoho PST export has imported.

Zoho's own PST export (Outlook data files) covers archived or very large mailboxes. Calendars and contacts do not move by IMAP, so you export them from Zoho and import them into Outlook. Allow at least a few days: the first copy runs in the background, and the batch should keep copying new mail for at least 72 hours after the switch.

Recommended routeMicrosoft IMAP migration batch (built into Exchange Online), with Zoho PST export for archives

Included with Exchange Online at no extra charge, keeps copying new mail about once a day until you delete the batch, and needs no mail freeze.

Other options and when to use them
  • Zoho PST export and Microsoft PST import only: IMAP is blocked by your Zoho policy, or you are moving archives. Paid Zoho plans only.
  • Third-party tool such as CodeTwo Office 365 Migration or MigrationWiz: You want to split mailboxes by date over IMAP, or the native batch cannot handle some mailboxes.
Order to migrate in, and why

Check that Zoho allows IMAP before anything else, because it decides the route. Then create the new mailboxes, prove the copy on a pilot, copy everyone while mail still arrives at Zoho, and change the MX record (the DNS setting that tells the internet where to deliver your email) last. Keep Zoho paid up until the final export is saved.

  1. Inventory of users, aliases and groups, the Zoho renewal date and an IMAP testIf Zoho policy blocks IMAP, every batch fails, so you need to know before you plan dates. The renewal date sets your deadline.
  2. Lower the MX record TTL and save the current DNS recordsTTL is how long other systems cache your record. A short TTL takes effect only after the old one runs out, so do it days ahead. The saved records are your way back.
  3. Domain, users, shared mailboxes, lists and aliases in Microsoft 365 (MX unchanged)The batch can only copy into mailboxes that exist, and every Zoho address must work on cutover day. Leaving MX alone keeps mail arriving at Zoho during the copy.
  4. IMAP Access, app passwords, endpoint and a pilot batch of two or three mailboxesProves the server name and sign-ins, which fail in ways that look alike, before you commit everyone.
  5. Batches for everyone else, and Zoho PST exports started early for archivesThe first copy is the slow part, and Zoho builds PST exports slowly, 10 users at a time. Both run while people still use Zoho.
  6. Calendars and contacts, in the switch-over weekThe IMAP batch does not copy them. Exporting close to the switch catches recent changes.
  7. MX, SPF, DKIM and DMARC change, then devicesMailboxes are already full when mail starts arriving, and devices download from the new account only once.
  8. Keep the batch 72 hours, check, take a final Zoho export, then cancel ZohoSome senders use the old MX for up to 72 hours, and the batch copies that mail. A lapsed Zoho subscription deletes the source.
Settings checklist: decide these before you copy

Built-in and third-party tools treat these differently. Tick each one off once you have decided.

Download this checklist (Excel)
  • How each tool handles it
    Built-in methodZoho: IMAP Access must be turned on for each account. An organisation can block IMAP by email policy, and newly signed-up free-plan users have no IMAP. The IMAP server name depends on account type and data centre. If IMAP is off or the name is wrong, the built-in IMAP batch fails for that user.

    Tip: Test one account a week ahead, and copy the server name from Server Configurations Details in your own Zoho account.

    Zoho Mail Help: IMAP access
  • How each tool handles it
    Built-in methodBuilt-in IMAP batch: copies only mail in the inbox and other mail folders. Microsoft states it does not move contacts, calendar items or tasks. Filters, signatures and automatic replies are not mail items, so they stay behind too.
    CodeTwo Office 365 MigrationReads the source over IMAP, which carries mail only. Plan contacts and calendars separately.
    audrigaMigrates calendars from CalDAV systems into Microsoft 365. Test one account first, and plan contacts separately unless the test moves them.
    Zoho Calendar CalDAVZoho's CalDAV access for such a tool. Only calendars ticked under Settings > Synchronize > CalDAV are exposed.

    Tip: Export each user's calendar as ICS under Zoho Calendar Settings > Import/Export, and contacts as Outlook CSV from the Zoho Mail Contacts app. Imported recurring meetings do not update later, so ask organisers to resend important ones from Outlook.

    Microsoft Learn: Migrate your IMAP mailboxes to Microsoft 365
  • How each tool handles it
    Built-in methodBuilt-in IMAP batch: copies up to 500,000 items per mailbox, newest first. Anything past that is not copied. There is no date filter.
    CodeTwo Office 365 MigrationA time filter excludes items older or newer than a date you set, so old mail can follow in a later pass or stay behind.
    MigrationWizAdvanced Options set the earliest and latest date to migrate.

    Tip: Move recent mail by IMAP. For archived or very large mailboxes, use a Zoho PST export (paid plans) and import it into the archive mailbox.

    Microsoft Learn: Migrate your IMAP mailboxes to Microsoft 365
  • How each tool handles it
    Built-in methodBuilt-in IMAP batch: the largest message it copies is 35 MB. Larger messages are skipped.
    CodeTwo Office 365 MigrationAdvanced settings let you set the largest item size to migrate.
    PST import (Microsoft Purview)Skips only items over 150 MB, and raises the mailbox receive limit to 150 MB when it needs to.

    Tip: Ask users to save attachments from very large messages to OneDrive before the old account closes.

    Microsoft Learn: Migrate your IMAP mailboxes to Microsoft 365
  • How each tool handles it
    Built-in methodBuilt-in IMAP batch: copies every folder unless you exclude it under Migration filtering options in the batch wizard (ExcludeFolders in PowerShell), using folder names as the IMAP server shows them. Microsoft says folders with a forward slash (/) in the name are not migrated.
    CodeTwo Office 365 MigrationA folder filter excludes chosen folders completely.
    MigrationWizFilters folders with regular expressions (text patterns).

    Tip: Ask users to empty Trash and Junk in Zoho webmail first, and rename any folder with a / in its name.

    Microsoft Learn: Tips for optimizing IMAP migrations
  • How each tool handles it
    Built-in methodNot stated in Microsoft's documentation: test it in your pilot.
    CodeTwo Office 365 MigrationNot stated in CodeTwo's documentation: test it in your pilot.
    MigrationWizNot stated in BitTitan's documentation: test it in your pilot.

    Tip: In the pilot, compare a few folders in Outlook on the web with Zoho webmail: unread counts, flagged messages and dates.

    Microsoft Learn: Migrate your IMAP mailboxes to Microsoft 365
  • How each tool handles it
    Built-in methodBuilt-in IMAP batch: signs in as each user with the password in the CSV file. Microsoft documents admin (master) sign-in formats only for Exchange, Dovecot and Mirapoint servers, and says some servers, such as Courier IMAP and Oracle IMAP, do not support it.
    CodeTwo Office 365 MigrationAlso takes each mailbox login and password from a CSV file.

    Tip: Turn on IMAP Access for each account. Users with two-factor or SAML sign-in need an app password (a separate password for mail apps), and users who sign in with Google may have no Zoho password. Revoke app passwords after the batch is deleted.

    Microsoft Learn: Migrate other types of IMAP mailboxes
  • How each tool handles it
    Built-in methodMicrosoft 365: each person needs a licence that includes Exchange Online. A shared mailbox needs no licence, and each user can have up to 400 aliases. The batch copies into the mailbox named in each CSV row, so that mailbox must exist first.

    Tip: Licence only real people. Point the CSV row for a shared login at its shared mailbox.

    Microsoft Learn: Create a shared mailbox
  • How each tool handles it
    Built-in methodBuilt-in IMAP batch: the migration endpoint (the saved connection to the old server) sets how many mailboxes copy at once (MaxConcurrentMigrations in PowerShell), and you can lower it. There is no setting to run only in certain hours. Microsoft advises raising source connection limits and running small test batches to measure speed.
    CodeTwo Office 365 MigrationSets how many mailboxes migrate at once, has a throttling step for IMAP servers that limit connections, and a Scheduler that runs jobs only in the hours you choose.
    MigrationWizSets how many migrations run at the same time.

    Tip: Start large batches outside business hours, and run several small batches rather than one big one.

    Microsoft Learn: Tips for optimizing IMAP migrations
  • How each tool handles it
    Built-in methodBuilt-in IMAP batch: after the first copy it syncs new mail about once a day until you delete the batch. Microsoft says to keep it running for at least 72 hours after the MX change. Deleting the batch stops the copying for good.
    CodeTwo Office 365 MigrationA delta pass (a top-up copy of only what changed) copies only new items, not changed ones.

    Tip: Ask users not to change their old password until the batch is deleted. Microsoft warns that new mail on the old server then stops being copied.

    Microsoft Learn: Migrate other types of IMAP mailboxes
  • How each tool handles it
    Built-in methodMicrosoft's migration tool does not know about retention (MRM) or archive policies. Items they delete or move during the copy are reported as missing. Microsoft strongly recommends turning these policies off before migrating.

    Tip: A new Microsoft 365 setup usually has none. Check under Microsoft Purview > Data lifecycle management before the first batch.

    Microsoft Learn: Migrate your IMAP mailboxes to Microsoft 365
  • How each tool handles it
    Built-in methodZoho admin export: whole mailboxes as ZIP or PST (PST on paid plans only), 10 users at a time. Zoho keeps export files for 30 days, and deleting the user or the export removes them. Exchange Online has no bulk import for the per-user EML ZIP export.
    PST import (Microsoft Purview)Imports the Zoho PST files into mailboxes or archive mailboxes in one job.

    Tip: Start PST exports early, download each as soon as its link appears, and do not delete Zoho users until every export is saved.

    Zoho Mail Help: Email account export, backup and recovery
The plan, phase by phase
  1. 1

    Get ready

    One week before

    Watch out: Zoho can block IMAP by policy, and new free-plan users have no IMAP at all. Then every batch fails.

    Ways around it

    • Change the email policy in the Zoho Mail Admin Console, or plan the PST export route instead.

    Check your DNS records before and after the change

    Show the detailed steps (3) →
  2. 2

    Set up Microsoft 365

    Show the detailed steps (4) →
  3. 3

    Prepare passwords and CSV

    Watch out: Zoho needs an app password for IMAP when two-factor or SAML sign-in is on, and users who sign in with Google may have no Zoho password.

    Ways around it

    • Send users instructions a week ahead, test each password in a mail app, and revoke them after the batch is deleted.

    Watch out: The server name depends on account type and data centre, and a wrong one looks like a password problem.

    Ways around it

    • Use exactly the value shown in your own account, not one from a web page.
    Show the detailed steps (4) →
  4. 4

    Copy the mail

    Watch out: Built-in IMAP batch: each mailbox copies up to 500,000 items, newest first, with no date filter. Messages over 35 MB are skipped.

    Ways around it

    • Move recent mail by IMAP and archives by Zoho PST export (paid plans, 10 users at a time).

    Tools that can do it

    • CodeTwo Office 365 MigrationFilters IMAP items by date and folder, with delta passes (top-ups) for new mail.
    • MigrationWizSets the earliest and latest date to migrate. Since 1 October 2026 you must first add its app ID to the tenant's EWS (Exchange Web Services) allow list.

    Watch out: Zoho keeps admin export files for 30 days, and deleting a user or export removes them.

    Ways around it

    • Download each export as soon as its link appears, and do not delete Zoho users until every export is saved.

    Watch out: Exchange Online has no bulk import for the per-user EML ZIP export (one file per message).

    Ways around it

    • Use IMAP or PST for mail, and keep EML ZIPs as a backup only.
    Show the detailed steps (3) →
  5. 5

    Move contacts and calendars

    The week of the switch

    Watch out: Built-in IMAP batch: calendars, contacts and tasks are not copied.

    Ways around it

    • Export and import by hand as above (free, fine for a few users).

    Tools that can do it

    • audrigaMigrates calendars from CalDAV systems into Microsoft 365. Test one account first, and plan contacts separately unless the test moves them.
    • Zoho Calendar CalDAVZoho's CalDAV access for such a tool. Only calendars ticked under Settings > Synchronize > CalDAV are exposed.

    Watch out: Imported recurring meetings do not update if the organiser changes them later.

    Ways around it

    • Ask organisers to resend important recurring meetings from Outlook.
    Show the detailed steps (4) →
  6. 6

    Switch over

    After the first copy shows Synced

    Watch out: Other mail systems can take up to 72 hours to see the new MX, so some mail still reaches Zoho.

    Ways around it

    • Delete every Zoho MX record and leave the batch running: it copies new mail about once a day.

    Turn this phase into dated tasks with the cutover planner

    Show the detailed steps (5) →
  7. 7

    Check and clean up

    72 hours after the switch

    Watch out: Microsoft has no tool to copy mail back to Zoho, and a lapsed Zoho subscription deletes the source.

    Ways around it

    • Keep Zoho paid up until the final export is downloaded.
    • To roll back, restore the Zoho MX and drag new mail back in classic Outlook (the older Outlook for Windows desktop app).
    Show the detailed steps (5) →
You are finished when
  • Every mailbox shows Synced with no errors, and every Zoho PST export has imported.
  • Outside mail arrives in Microsoft 365, and replies pass SPF, DKIM and DMARC.
  • Every user sends and receives on desktop and phone, and no device still connects to Zoho.
  • Calendars and contacts are in Outlook, and a final Zoho export is saved.

Tools named in this plan are independent third-party products, not endorsed by the platform vendor and not paid placements. Check the tool's own documentation and run a pilot first.

Click by click

What does each step involve?

Open a part when you reach it in the plan. Each step says where to go, what to do and what you should see.

About this migrationWhat it covers, limits at a glance

Zoho Mail supports IMAP, so Microsoft's IMAP migration can copy each mailbox into Exchange Online and keep it in sync until you change MX. Zoho also documents two export routes: an admin export of whole mailboxes as ZIP or PST, and a per-user export of folders as EML files in a ZIP.

Microsoft states IMAP migration does not move contacts or calendar items, so you export those from Zoho Calendar and the Zoho Mail Contacts app and import them into Outlook. Exchange Online has no native bulk import for EML files, so use IMAP or PST for mail and keep EML ZIPs as a backup. The generic process is in IMAP email to Microsoft 365.

Native toolIMAP migration batch in the Exchange admin center
Zoho exportsAdmin console mailbox export as ZIP or PST (PST on paid plans); per-user EML export
Not moved by IMAPCalendars, contacts and tasks
Per-mailbox limits500,000 items, newest first; largest message 35 MB
Zoho export retentionAdmin export files are kept for 30 days
1What you need before step one
NeedDetailsWhere to get it
Microsoft 365 Global AdministratorTo add the domain, create users and buy licences. An Exchange Administrator can run the migration.https://admin.microsoft.com
LicencesOne licence including Exchange Online per person; shared mailboxes do not need one.Microsoft or a partner; check current pricing with them
Zoho Mail admin accessTo check IMAP policy, reset passwords and run admin exports.Zoho Mail Admin Console
IMAP access for each Zoho mailboxZoho lets organisations restrict IMAP by policy; each account must have IMAP enabled.Zoho Mail: Settings > Mail Accounts
Passwords or app-specific passwordsZoho requires an application-specific password for IMAP when two-factor authentication is on.Each user's Zoho account security settings
DNS accessLogin to wherever your DNS is hosted.Registrar or DNS provider
Optional: Exchange Online PowerShellFor command-line endpoint and batch creation.Connect to Exchange Online PowerShell
Check your Zoho renewal date. Keep the Zoho subscription active until the cutover and final checks are done. Admin export files are only available for 30 days after each export.
2Inventory Zoho and lower the MX TTL3 steps
  1. 1

    List users, groups and aliases

    Where: Zoho Mail Admin Console, the user list and the group list; record results in your mailbox inventory sheet

    Record every mailbox with its size, every email alias on each user, and every group address with its members. Mark which addresses are shared by a team so they can become shared mailboxes or distribution lists in Microsoft 365.

    You should see: A complete mailbox inventory with a planned Microsoft 365 type for each address.
  2. 2

    Save current DNS records

    Where: Your DNS host's control panel > your domain > DNS records; Command Prompt or Terminal on your admin PC

    Save the Zoho MX records, SPF (TXT), the Zoho DKIM record and any other mail records, with values and TTLs, into your DNS cutover record sheet.

    nslookup -type=mx contoso.com
    nslookup -type=txt contoso.com
    You should see: A saved copy for rollback that matches the nslookup output.
  3. 3

    Lower the MX TTL

    Where: Your DNS host's control panel > your domain > DNS records > each Zoho MX record > Edit

    Set the TTL to 3,600 seconds or less, as Microsoft recommends, and save without changing the value. Full detail: lower DNS TTL before a migration.

    nslookup -debug -type=mx contoso.com
    You should see: Each MX record shows a TTL of 3600 or lower.
3Set up Microsoft 365 mailboxes4 steps
  1. 1

    Add and verify the domain

    Where: Microsoft 365 admin center (admin.microsoft.com) > Show all > Settings > Domains > Add domain

    Type the domain, select Next, choose the TXT record option and add the MS=ms... TXT record at your DNS host exactly as shown. Select Verify. When asked how to add DNS records, choose I'll add the DNS records myself, then More Options > Skip this for now, so MX stays with Zoho. Full detail: add a domain to Microsoft 365.

    You should see: The domain is verified on the Domains page, with MX still pointing at Zoho.
  2. 2

    Create and licence users

    Where: Microsoft 365 admin center > Users > Active users > Add a user, or Add multiple users

    Create each user with the same address as in Zoho: select Add a user, enter the name, type the username and pick the domain, choose a location and a licence that includes Exchange Online, and finish. For many users select Add multiple users, choose I'd like to upload a CSV with user information, download the blank CSV, keep row 1, add up to 249 users and upload. See bulk create users and assign licences.

    You should see: Licensed users whose mailboxes open at https://outlook.office.com.
  3. 3

    Create shared mailboxes

    Where: Microsoft 365 admin center > Teams & groups > Shared mailboxes

    For each team address, select + Add a shared mailbox, enter a name, set the email address to match Zoho and select Save changes. Then select Add members to this mailbox, Add members, pick people and select Add.

    You should see: The shared mailboxes are listed with their members.
  4. 4

    Recreate Zoho groups and aliases

    Where: Microsoft 365 admin center > Teams & groups > Active teams & groups > Distribution list; and Users > Active users > user > Manage username and email

    For each Zoho group, select + Add a distribution list, enter a name, add owners and members, set the group email address on Edit settings (tick Allow people outside of my organization to send email to this Distribution group if needed) and select Create group. For each Zoho alias, open the user, select Manage username and email, type the alias, pick the domain, select Add and Save changes.

    You should see: Every Zoho address is mapped to a mailbox, alias or group. Microsoft says a new alias can take about 24 hours to update.
4Enable IMAP in Zoho and build the CSV4 steps
  1. 1

    Turn on IMAP for each account

    Where: Zoho Mail (signed in as the user) > Settings > Mail Accounts > the primary address > IMAP section

    Tick IMAP Access, scroll down and select Save. If the option is missing or blocked, the organisation's email policy restricts IMAP; change the policy in the Zoho Mail Admin Console, then retry.

    You should see: IMAP Access is ticked and saved.
  2. 2

    Copy the IMAP server name

    Where: Zoho Mail > Settings > Mail Accounts > the primary address > Server Configurations Details

    Copy the incoming IMAP server and port. Zoho documents imappro.zoho.com for paid domain accounts and imap.zoho.com for personal and free accounts, port 993 with SSL, but says exact details depend on account type and data centre, so copy them from your own account. See find your IMAP settings.

    You should see: An IMAP server name with port 993 and SSL recorded in your inventory.
  3. 3

    Get passwords or app-specific passwords

    Where: Each user's Zoho account security settings (for app-specific passwords), or the Zoho Mail Admin Console (to reset passwords)

    For users with two-factor authentication or SAML sign-in, Zoho says to use an application-specific password for IMAP; have the user generate one in their Zoho account security settings and give it to you securely. Users who sign in with Google or another federated account may need to create a Zoho password first. For others, reset or collect the password.

    You should see: A working password for every mailbox. Test one by adding it as an IMAP account in a desktop mail client with the server from the previous step.
  4. 4

    Build the migration CSV

    Where: Excel or Notepad on your admin PC, saved as CSV (for example C:\migration\zoho-pilot.csv)

    Use the exact headings EmailAddress (the Microsoft 365 mailbox), UserName (the Zoho sign-in address) and Password (or app-specific password). In Excel use File > Save As > CSV. Make a pilot file with two or three users and a second file for the rest. Store both encrypted.

    EmailAddress,UserName,Password
    alex@contoso.com,alex@contoso.com,ZohoAppPassword1
    sam@contoso.com,sam@contoso.com,ZohoAppPassword2
    You should see: One row per mailbox, headings on line one when opened in Notepad.
5Create the endpoint and run the IMAP batch3 steps
  1. 1

    Create the IMAP endpoint

    Where: Exchange admin center (admin.exchange.microsoft.com) > Migration > Endpoints (top right) > Add, or PowerShell connected with Connect-ExchangeOnline

    On Add Endpoint choose IMAP, enter a Migration endpoint name (for example ZohoIMAP) and the Zoho server in IMAP server, keep the defaults and select Create. The PowerShell line does the same. Full detail: create a migration endpoint.

    New-MigrationEndpoint -IMAP -Name ZohoIMAP -RemoteServer imappro.zoho.com -Port 993 -Security Ssl
    You should see: The endpoint appears in the Endpoints list (or PowerShell returns it with EndpointType IMAP).
  2. 2

    Run a pilot batch

    Where: Exchange admin center > Migration > Add migration batch

    Name the batch (for example ZohoPilot), choose Migrate to Exchange Online, Next, then IMAP migration, Next, confirm prerequisites, Next. Pick ZohoIMAP on Set a migration endpoint. On Add user mailboxes select Import CSV file and upload the pilot CSV. Optionally exclude Spam or Trash under Migration filtering options. On Schedule batch migration choose an automatic start, then Save and Done. Full detail: create a migration batch.

    Get-MigrationUser -BatchId ZohoPilot | Get-MigrationUserStatistics | Format-Table Identity,Status,SyncedItemCount,Error
    You should see: The batch moves to Synced, with no errors under Migration details > View details.
  3. 3

    Run the remaining batches

    Where: Exchange admin center > Migration > Add migration batch

    Sign in to Outlook on the web as each pilot user and compare folders with Zoho webmail. Then repeat the batch steps with the CSV for everyone else.

    You should see: All batches Synced and continuing to sync about once a day.
6Export calendars and contacts from Zoho4 steps
  1. 1

    Export each calendar

    Where: Zoho Calendar (signed in as the user) > Settings > Import/Export > Export

    Pick the calendar from the drop-down, choose all days or a From and To range, select ICS and select Export. Download the file from the export history. Zoho keeps exports for 30 days. If you tick Secure your download and set a password, Zoho does not save it, so a forgotten password means the file cannot be opened.

    You should see: An .ics file on your computer.
  2. 2

    Export contacts

    Where: Zoho Mail (signed in as the user) > Contacts app (from the Apps pane) > More Actions > Export

    Choose Personal Contacts (or a group), select Outlook CSV as the format and select Export Contacts.

    You should see: A CSV contacts file downloaded.
  3. 3

    Import the calendar into Outlook

    Where: Outlook on the web (https://outlook.office.com) > Calendar > Add calendar > Upload from file

    Select Browse, choose the .ics file, pick the target calendar and select Import.

    You should see: The events appear in the chosen calendar.
  4. 4

    Import contacts into Outlook

    Where: Outlook on the web or new Outlook for Windows > People > Import contacts

    Select Import contacts, Browse, choose the Outlook CSV file, select Open, then Import. Keep the column headings in the first row, as Microsoft requires.

    You should see: The contacts are listed on the user's People page.
7Optional: Zoho PST export and Microsoft PST import2 steps

Use this for archived or very large mailboxes, or if IMAP is blocked. Zoho documents PST export for paid plans only.

  1. 1

    Schedule the export in Zoho

    Where: Zoho Mail Admin Console > Mail Settings > Export Mail Account > Schedule New Export (Add after the first export)

    Select Select users, add the mailboxes (Zoho allows up to 10 at once for PST, 50 for ZIP) and select Submit. Under Export mails from choose Entire Account. Under Include folders tick Include spam or Include trash only if needed. Set Export as to PST and select Export.

    You should see: After you refresh, a download link appears in the Status column. Zoho splits large PST exports into 2 GB parts and keeps them for 30 days.
  2. 2

    Import the PST files

    Where: Microsoft Purview portal (purview.microsoft.com) > Data lifecycle management > Microsoft 365 > Import; or classic Outlook for a few mailboxes

    Select New import job, name it, choose Upload your data, copy the network upload SAS URL and upload the PSTs with AzCopy. Build the mapping CSV (Workload, FilePath, Name, Mailbox, IsArchive, TargetRootFolder and the remaining columns), create the job, Validate the file, then select Import to Microsoft 365 and Import data. Full detail: import PST files to Microsoft 365 and the PST guide.

    You should see: The job shows Complete, and the Zoho folders appear under the target mailbox or archive.
8Change MX and authentication records5 steps
  1. 1

    Replace Zoho MX with Microsoft 365

    Where: Microsoft 365 admin center > Settings > Domains > your domain > DNS records (copy values), then your DNS host > DNS records

    Copy the MX value (ending mail.protection.outlook.com) and the Autodiscover CNAME. At your DNS host add the Microsoft MX with priority 1 (or the value shown), add the Autodiscover CNAME, then delete all Zoho MX records. Full detail: change MX records.

    nslookup -type=mx contoso.com 1.1.1.1
    You should see: Lookups return only the Microsoft MX.
  2. 2

    Update SPF

    Where: Your DNS host > DNS records > the existing TXT record starting v=spf1 > Edit

    Replace the Zoho include with Microsoft's, keep any other services that still send for you, and save. Do not add a second SPF record. Full detail: set up SPF.

    v=spf1 include:spf.protection.outlook.com -all
    You should see: nslookup -type=txt contoso.com 1.1.1.1 returns one v=spf1 line with the Microsoft include.
  3. 3

    Turn on DKIM and add DMARC

    Where: Microsoft Defender portal (security.microsoft.com) > Email & collaboration > Policies & rules > Threat policies > Email authentication settings > DKIM; then your DNS host

    Select the domain, slide the toggle to Enabled, copy the two values under Publish CNAMEs and add CNAMEs selector1._domainkey and selector2._domainkey at your DNS host. Return and turn on Sign messages for this domain with DKIM signatures. Remove the Zoho DKIM record once Zoho no longer sends for you. Add or review the _dmarc TXT record. Full detail: DKIM and DMARC.

    You should see: DKIM status shows Signing DKIM signatures for this domain, and a test message shows spf=pass, dkim=pass and dmarc=pass.
  4. 4

    Wait 72 hours, then delete the batch

    Where: Exchange admin center > Migration > select the batch > Delete, or PowerShell connected with Connect-ExchangeOnline

    Leave the batch syncing at least 72 hours after the MX change, as Microsoft advises, then delete it.

    Remove-MigrationBatch -Identity ZohoPilot
    You should see: The batch is gone from the Migration page and no new mail arrives in Zoho.
  5. 5

    Reconnect clients and close Zoho

    Where: Users' computers and phones, then Zoho Mail Admin Console > Mail Settings > Export Mail Account and Zoho billing

    Remove the Zoho account from Outlook and phones and add the Microsoft 365 account (reset the Outlook profile if needed). Schedule a final Zoho admin export as a backup and download it within 30 days, then cancel Zoho.

    You should see: Everyone works in Microsoft 365 and a final export is stored safely.
Worth knowing

What can go wrong, and how do you avoid it?

The detail behind the plan: options compared, and what experienced engineers check first. Tap any item.

Compare all the ways to do this3 options

IMAP migration batch from Zoho Mail

Medium effort

Best for: Live Zoho mailboxes where IMAP access is allowed and you can collect passwords or app-specific passwords

  • Built into Exchange Online
  • Keeps syncing until you change MX, so cutover needs no mail freeze
  • Runs from the Exchange admin center or PowerShell
  • Microsoft states it does not move calendars, contacts or tasks
  • Limits of 500,000 items per mailbox and 35 MB per message
  • Users with two-factor or SAML sign-in need application-specific passwords
Read more →

Zoho PST export, then Microsoft PST import

High effort

Best for: Archived or very large mailboxes, or when IMAP is blocked by policy

  • Zoho exports whole mailboxes from the admin console, so no per-user passwords are needed
  • Network upload imports many PST files in one job
  • Zoho documents PST export on paid plans only
  • Export files are kept for 30 days, and the copy is one-off with no sync
Read more →

Third-party mailbox migration service

Medium effort

Best for: Projects that want a vendor to run the copy, or mailboxes the native batch cannot handle

  • Options such as BitTitan MigrationWiz and CodeTwo are built for moves into Microsoft 365
  • Can reduce manual export and import work
  • Extra product to buy: check the vendor's current pricing
  • Confirm the vendor supports Zoho Mail and what it moves
Our advice

Use IMAP for live mail and PST for archives: that combination covers most Zoho moves without extra tools. Do not plan on the per-user EML ZIP export, because Exchange Online has no native bulk EML import; keep those ZIPs as a backup only. Calendars and contacts move by Zoho export whichever mail route you choose.

Check the Zoho IMAP policy before planning datesSaves time

Zoho lets an organisation restrict IMAP through email policies, and IMAP is not available for newly signed-up free-plan users. If IMAP is blocked, the Microsoft endpoint and batch fail for every user.

What to do

In a test account, open Settings > Mail Accounts > IMAP. If IMAP Access cannot be ticked, change the policy in the Admin Console first, or plan the PST export route instead.

Zoho Mail Help: IMAP access
Collect app-specific passwords earlyUser impact

Zoho requires an application-specific password for IMAP when two-factor authentication or SAML sign-in is on. Users who sign in with Google or another federated account may have no Zoho password at all.

What to do

Send users instructions a week ahead and test each password in a mail client before it goes in the CSV. Revoke the app passwords after the batch is deleted.

Zoho Mail Help: IMAP access
Copy the server name from Zoho, not a blogReduces risk

Zoho says the exact server depends on account type and data centre. A wrong host name gives connection or authentication errors that look like password problems.

What to do

Use the value in Server Configurations Details in your own account for the endpoint.

Zoho Mail Help: IMAP access
Keep IMAP for live mail and PST for archivesSaves time

IMAP migration copies up to 500,000 items per mailbox, newest first, and skips messages over 35 MB. Zoho's admin PST export handles whole accounts, but only 10 users at a time and on paid plans.

What to do

Migrate recent mail by IMAP. For very large or archived mailboxes, schedule Zoho PST exports early (they take time to build) and import them into archive mailboxes.

Tools that can get around this

Microsoft's IMAP batch has no date filter, so splitting a mailbox by age natively means a Zoho PST export, which runs 10 users at a time on paid plans. CodeTwo Office 365 Migration and MigrationWiz filter IMAP items by date, so recent mail can go first and older mail can follow in a later pass over IMAP without waiting for exports. Both read the mailbox over IMAP, so they move mail only and need IMAP access to be allowed in Zoho.

  • CodeTwo Office 365 MigrationIMAP source with a time filter that excludes items older or newer than a set date, folder filters and delta passes for new mail.
  • MigrationWizAdvanced Options set the earliest and latest date to migrate, plus RegEx folder filters. For Exchange Online, add your MigrationWiz app ID to the tenant's EWS allow list first: since 1 October 2026 Microsoft blocks EWS for apps not on it.
Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
Zoho Mail Help: Email account export, backup and recovery
Download Zoho exports within 30 daysCompliance

Zoho keeps admin export files and calendar exports for 30 days, and deleting an export or a user account removes access to its files.

What to do

Download each export as soon as the Status column shows the link, store it with your migration records, and do not delete Zoho users until every export is saved.

Zoho Mail Help: Email account export, backup and recovery
Calendars and contacts move by export onlyUser impact

IMAP migration does not move calendar items or contacts. Recurring Zoho meetings imported from .ics do not update when the organiser changes them later.

What to do

Export each user's calendar (ICS) and contacts (Outlook CSV) the week of cutover. Ask organisers to resend important recurring meetings from Outlook afterwards.

Tools that can get around this

Instead of exporting an ICS file for each user, audriga can migrate calendars from any system that supports CalDAV, and Zoho Calendar offers CalDAV access (with an application-specific password when two-factor authentication is on). Zoho only exposes the calendars each user ticks under Settings > Synchronize > CalDAV, and only the primary calendar is on by default, so check that setting and test one account first. Plan contacts separately unless the test shows them coming across.

  • audrigaMigration service for email, contacts and calendars, with Microsoft 365 among its systems and support for any CalDAV or CardDAV system.
  • Zoho Calendar CalDAVZoho's own CalDAV server access, which a CalDAV-capable migration tool connects to.
Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
Zoho Calendar Help: Import or export calendars
Map Zoho groups and aliases instead of adding licencesCost lever

Zoho group addresses and aliases do not need Microsoft 365 licences. Distribution lists, shared mailboxes and aliases (up to 400 per user) cover them.

What to do

List every Zoho group and alias in the inventory and recreate them before the MX change, so no address bounces on cutover day.

Microsoft Learn: Create distribution groups in the Microsoft 365 admin center
Swap SPF and DKIM in the same change windowReduces risk

Zoho's SPF include and DKIM key stay in DNS after the move unless you remove them. Two SPF records break SPF, and an old include lets a service you no longer use send as your domain.

What to do

Edit the single SPF record to the Microsoft include, turn on Microsoft 365 DKIM, and delete the Zoho DKIM record once Zoho stops sending for you.

Microsoft Learn: Set up DKIM for Microsoft 365
Keep Zoho paid up until 72 hours after cutoverReduces risk

Microsoft says senders can take up to 72 hours to see a new MX record. If Zoho lapses earlier, mail sent to the old MX and any un-exported data are lost.

What to do

Check the Zoho renewal date before you start, and cancel only after the batch is deleted and a final export is downloaded.

Microsoft Learn: Migrate other types of IMAP mailboxes
Finish safely

How do you check it worked, or roll back?

Full validation checklist9 checks

Run these before you declare the migration complete. Record the results in the data validation report.

CheckHow to checkWhat good looks like
Every IMAP migration user synced without errors

Run Get-MigrationUser -BatchId ZohoPilot | Get-MigrationUserStatistics | Format-Table Identity,Status,SyncedItemCount,Error for each batch, or open Exchange admin center > Migration > select the batch > View details.

Every Zoho mailbox in your inventory is Synced with an empty Error column.
Folders and item counts match Zoho

Compare SyncedItemCount and folder names with the mailbox sizes in your inventory, then sign in to Outlook on the web (https://outlook.office.com) as a sample of users and compare with Zoho webmail.

All folders are present and missing items are only those over 35 MB or beyond 500,000 items, which you moved by PST or accepted.
PST imports completed where used

For mailboxes on the PST route, check the import job in the Microsoft Purview portal > Data lifecycle management > Microsoft 365 > Import and open the mailbox in Outlook on the web.

Every Zoho PST export has imported into the right mailbox or archive.
Shared mailboxes, distribution lists and aliases work

From an outside account, send a test to each shared mailbox, each distribution list that replaced a Zoho group and each alias. Trace them in Exchange admin center > Mail flow > Message trace.

Every former Zoho address delivers to the right place, including outside mail to distribution lists.
MX, Autodiscover and SPF are correct

Check Microsoft 365 admin center > Settings > Domains > your domain > DNS records, and run nslookup -type=mx contoso.com 1.1.1.1 and nslookup -type=txt contoso.com.

No Zoho MX records remain, MX ends in mail.protection.outlook.com, Autodiscover is present and the single SPF record no longer includes Zoho.
DKIM and DMARC pass

Send from Outlook on the web to an outside mailbox and read the headers. Check the domain in the Microsoft Defender portal under Email authentication settings > DKIM.

DKIM signing is enabled, the old Zoho DKIM record is removed, and SPF, DKIM and DMARC pass.
Calendars and contacts imported

Open Outlook on the web as a sample of users and compare Calendar and People with the ICS and Outlook CSV exports from Zoho.

Upcoming events and contacts are present for every user who had them in Zoho.
Outlook and phones use Microsoft 365

Ask each user to confirm the Zoho account is removed from Outlook and phones and the Microsoft 365 account works on each device.

Every user sends and receives from Microsoft 365, and no device still connects to Zoho.
Zoho has stopped receiving mail and a backup exists

After at least 72 hours, sign in to Zoho webmail as a sample of users and check the newest message dates. Confirm the final admin export in Zoho Mail Admin Console > Mail Settings > Export Mail Account has been downloaded.

No new mail reaches Zoho after the MX change, and the final export files are saved before the 30-day download window ends.
Rollback planIf it goes wrong

Roll back if

  • Outside mail is not arriving in Microsoft 365 after the MX change
  • The pilot batch cannot sign in to Zoho (IMAP blocked by policy or app-specific passwords missing) and this cannot be fixed before cutover
  • Large numbers of folders or messages are missing when you compare Outlook on the web with Zoho webmail
  • Users cannot sign in to Microsoft 365 on cutover day

Point of no return

The IMAP batch and Zoho exports copy mail and leave the Zoho mailboxes in place, so you can switch back while the Zoho subscription is active. The point of no return is cancelling Zoho or letting the subscription lapse, after which the source mailboxes are gone. Zoho admin export files are only available to download for 30 days, so an export you did not download cannot be used later. Microsoft has no tool to copy mail from Microsoft 365 back to Zoho.

  1. 1

    Restore the Zoho MX records

    Where: Your DNS host's control panel > DNS records

    Add back every Zoho MX record with the priorities saved in your DNS cutover record sheet and delete the record ending in mail.protection.outlook.com.

    nslookup -type=mx contoso.com 1.1.1.1
    You should see: Public resolvers return the Zoho MX records.
  2. 2

    Restore SPF and the Zoho DKIM record

    Where: Your DNS host > DNS records

    Put the Zoho include back in the single SPF record and republish the Zoho DKIM record exactly as saved.

    You should see: Mail sent from Zoho passes SPF and DKIM at an outside mailbox.
  3. 3

    Stop the batch

    Where: Exchange admin center > Migration > select the batch, or Exchange Online PowerShell

    Stop the batch and keep the Microsoft 365 mailboxes for a later attempt.

    Stop-MigrationBatch -Identity ZohoPilot
    You should see: The batch shows as stopped.
  4. 4

    Reconnect users to Zoho

    Where: Each user's Outlook and phone, or Zoho webmail

    Tell users to use Zoho webmail or re-add the Zoho account in their mail apps. Users who gave you an app-specific password can revoke it in their Zoho account security settings once you no longer need it.

    You should see: Users send and receive from Zoho.
  5. 5

    Move back mail received in Microsoft 365

    Where: Classic Outlook with both the Microsoft 365 and Zoho IMAP accounts added

    For each affected user, drag messages that arrived in Microsoft 365 after the MX change into the Zoho inbox.

    You should see: Messages from the cutover window appear in Zoho webmail.

Agree the triggers and who decides before the go / no-go meeting. Use the rollback plan template.

Common problems and fixes6 errors
Authentication failed for a Zoho user

Cause: IMAP is off for that account, or two-factor authentication requires an app-specific password.

Fix: Enable IMAP Access in Zoho settings and use an application-specific password in the CSV.

Endpoint cannot connect to the Zoho server

Cause: Wrong server name for your account type or data centre.

Fix: Copy the server from Server Configuration Details in your Zoho account.

PST option not available in Zoho export

Cause: Zoho documents PST export for paid plans only.

Fix: Use IMAP migration, or the ZIP export as a backup.

Export download link has gone

Cause: Zoho keeps admin export files for 30 days, and deleting the export removes the link.

Fix: Schedule a new export and download it promptly.

Calendar events missing in Outlook

Cause: IMAP migration does not move calendars.

Fix: Export ICS from Zoho Calendar and upload it in Outlook on the web.

Mail still arriving in Zoho after cutover

Cause: A Zoho MX record was left in DNS, or senders cached the old record.

Fix: Delete every Zoho MX record and keep the batch running for 72 hours.

Search the full error library →

FAQ

Frequently asked questions

Can Microsoft import Zoho's EML ZIP export?

Exchange Online has no native bulk EML import. Use IMAP migration or Zoho's PST export for mail, and keep the ZIP as a backup.

Does IMAP migration move Zoho calendars and contacts?

No. Microsoft states IMAP migration does not move calendar items or contacts. Export them from Zoho and import them into Outlook.

Do I need app passwords for Zoho?

Zoho requires an application-specific password for IMAP when two-factor authentication is on.

How many users can Zoho export at once?

Zoho documents up to 50 users per ZIP export and 10 per PST export in the Admin Console.

What if I want Google Workspace instead?

The same Zoho IMAP settings and exports apply. Follow the IMAP to Google Workspace guide.

Sources

Official sources

12 official pages this guide is based on