Migrating Email to Migadu with imapsync
Ditching a bundled hosting provider for Migadu and Cloudflare DNS. Covers Migadu's trade-offs, IMAP migration with imapsync, and DNS cutover prep. I’ve been on a bundled hosting plan — domain, web, and email in one package — for years. It’s the classic convenience trap: easy to set up, expensive to maintain, and opaque about what you’re actually paying for. The migration path I settled on is Cloudflare for DNS and domain registration, Cloudflare Pages for static hosting, and Migadu for email. This post covers the email side specifically: why Migadu, how to migrate existing mail with imapsync, and how to prep DNS for cutover. Migadu is a small Swiss email hosting provider. Their pricing model is unusual: you pay per plan, not per mailbox or domain. The entry-level plan (€19/year at time of writing) covers unlimited domains and unlimited addresses. If you run multiple domains, maintain catch-all addresses, or use per-service email aliases, this is significantly cheaper than per-seat alternatives. Strengths: Limitations worth knowing: For a personal domain with catch-all and low send volume, Migadu feels like a no-brainer. A long time ago I might have been woried about the send/receive limit, but email? Now, in 2026? The standard pattern for moving email between providers is IMAP-to-IMAP sync. The easiest way to run imapsync without installing it natively is the official Docker image: Key flags worth knowing: Didn’t take that long for the 600 or so mesages I had. It’s idempotent, so you can just keep running it. Certainly needs to be done (yet again) right before cutover. Not here yet - I still need to track down just how to get my domain out from one.com. They unhelpfully say “email our servicedesk from the registered email address” and provide a link to a web form. Why Migadu
Migrating Existing Mail with imapsync
imapsync handles this cleanly: it copies folders, preserves flags (read/unread, starred), and is idempotent — you can run it multiple times and it won’t duplicate messages. Before you run it
Running imapsync via Docker
docker run --rm gilleslamiral/imapsync imapsync \
--host1 imap.your-old-provider.com \
--user1 [email protected] \
--password1 'source-password' \
--host2 imap.migadu.com \
--user2 [email protected] \
--password2 'migadu-password' \
--ssl1 --ssl2
--dry — runs without copying anything; use this first to verify connectivity and see what would be transferred--folder INBOX — migrate a single folder rather than everything--exclude Trash — skip specific folders by name--automap — attempts to map folder names between providers automatically (useful if folder naming conventions differ) Run it twice
Preparing for DNS Cutover