Part 12 of the grommunio 2026 series shows a generic IMAP migration to grommunio with imapsync. The lab covered inventory, target preparation, initial sync, delta sync, resume, bulk migration and web validation.
Overview
Source: isolated Dovecot IMAP server with realistic test mailboxes.
Target: grommunio Appliance 2026.06.1 with gromox 3.10.123.
Tooling: imapsync 2.229 from the grommunio appliance packages.
Result: initial sync, delta sync, idempotency, resume, bulk and web validation passed.
What IMAP Migrates And What It Does Not
IMAP migrates mailbox contents, folders, typical message flags, internal dates and attachments. IMAP does not automatically migrate calendars, contacts, tasks, server-side rules, Sieve rules, delegations, shared mailbox permissions, public folders, GAL data, identities, passwords or mobile device profiles.
Tested Environment
- grommunio-release 2026.06.1
- gromox 3.10.123
- grommunio-imapsync 2.229
- imapsync 2.229
- Source IMAP via isolated Dovecot lab server
Source Baseline
{"source": "alice@example.test","state": "before initial sync","totalMessages": 12,"folders": {"INBOX": {"messages": 6,"unread": 4,"flagged": 1,"sampleFlags": ["\\Recent","\\Seen \\Recent","\\Flagged \\Recent"]},"Drafts": {"messages": 1,"sampleFlags": ["\\Draft \\Recent"]},"Sent": {"messages": 1,"sampleFlags": ["\\Seen \\Recent"]},"Trash": {"messages": 1,"sampleFlags": ["\\Seen \\Recent"]},"Junk": {"messages": 1,"sampleFlags": ["\\Recent"]},"Projects": {"messages": 1,"sampleFlags": ["\\Recent"]},"Projects/2024": {"messages": 1,"sampleFlags": ["\\Answered \\Recent"]},"Archive": {"messages": 0}},"attachments": ["migration-proof.txt","larger-attachment.bin"]}
Prepare The grommunio Target
Before syncing, the domain, users, mailboxes, passwords, IMAP privileges and web access were prepared. imapsync does not create the full grommunio identity structure.
{"target": "alice@example.test","state": "before initial sync","totalMessages": 0,"folders": {"INBOX": 0,"Drafts": 0,"Sent Items": 0,"Deleted Items": 0,"Junk Email": 0}}
Initial Sync
imapsync --host1 source.example.test --port1 993 --ssl1 --user1 alice@example.test --passfile1 /root/imapsync-lab/secrets/alice-source.pass --host2 mail.example.test --port2 993 --ssl2 --user2 alice@example.test --passfile2 /root/imapsync-lab/secrets/alice-target.pass --automap --subscribe
Initial sync: PASSHost1 -> Host2: source IMAP -> grommunio IMAPMessages transferred : 12Messages skipped : 0Detected errors : 0Return value : 0 (EX_OK)Folder mapping : Sent -> Sent Items, Trash -> Deleted Items, Junk -> Junk Email
Delta Sync And Idempotency
The second imapsync run added only the delta data and did not duplicate existing mail.
{"deltaSync": "PASS","transferred": 3,"skipped": 12,"errors": 0,"targetAfterDelta": {"totalMessages": 15,"flagged": 3,"folders": {"INBOX": {"messages": 8,"flagged": 2,"sampleFlags": ["\\Flagged","\\Seen",""]},"Delta/NewFolder": {"messages": 1,"flagged": 1,"sampleFlags": ["\\Flagged"]},"Drafts": {"messages": 1,"sampleFlags": ["\\Draft"]},"Projects/2024": {"messages": 1,"sampleFlags": ["\\Answered"]}}}}
Attachment And Web Validation
Resume, Bulk And Negative Test
Resume test: PASSInterrupted first run: intentionally stoppedRerun transferred : 179Rerun skipped : 3Final target count : 182/182 messagesDetected errors : 0Return value : 0 (EX_OK)
Negative test: PASSScenario : wrong source passwordResult : source login rejectedIMAP response: NO [AUTHENTICATIONFAILED] Authentication failedReturn value : 161 (EXIT_AUTHENTICATION_FAILURE_USER1)
Cutover Model
- Run the initial sync before the cutover window.
- Test target users and grommunio Web.
- Switch mail flow separately; MX is not imapsync.
- Freeze or control source access.
- Run the final delta sync.
- Validate grommunio Web and clients.
Result Check / Technical Acceptance
| Area | Check | Expected result | Status |
|---|---|---|---|
| Tooling | Check grommunio-imapsync and imapsync | imapsync is usable on the appliance | PASS |
| Initial sync | Synchronize pilot mailbox | Folders, mail, flags, dates and attachments exist on target | PASS |
| Delta sync | Sync new source mail and flag changes | Only delta is added, no duplicates | PASS |
| Resume | Repeat interrupted run | Rerun completes mailbox | PASS |
| Bulk | Synchronize multiple users | Additional mailboxes migrate successfully | PASS |
| Web | Check grommunio Web | Migrated mail, folders and attachments are visible | PASS |
Tooling
- Check
- Check grommunio-imapsync and imapsync
- Expected result
- imapsync is usable on the appliance
- Status
- PASS
Initial sync
- Check
- Synchronize pilot mailbox
- Expected result
- Folders, mail, flags, dates and attachments exist on target
- Status
- PASS
Delta sync
- Check
- Sync new source mail and flag changes
- Expected result
- Only delta is added, no duplicates
- Status
- PASS
Resume
- Check
- Repeat interrupted run
- Expected result
- Rerun completes mailbox
- Status
- PASS
Bulk
- Check
- Synchronize multiple users
- Expected result
- Additional mailboxes migrate successfully
- Status
- PASS
Web
- Check
- Check grommunio Web
- Expected result
- Migrated mail, folders and attachments are visible
- Status
- PASS
Conclusion
Generic IMAP migration to grommunio is reproducible with imapsync when target users are prepared, password files are used, folder mapping is validated and the delta/cutover model is planned explicitly.



