Skip to content

Instantly share code, notes, and snippets.

@scottnunemacher
Last active August 23, 2025 07:31
Show Gist options
  • Select an option

  • Save scottnunemacher/799eed064e575948dbac99e1be998561 to your computer and use it in GitHub Desktop.

Select an option

Save scottnunemacher/799eed064e575948dbac99e1be998561 to your computer and use it in GitHub Desktop.
Sync (migrate) a Dovecot Email Account from One Dovecot Server to Another

Sync (migrate) a Dovecot Email Account from One Dovecot Server to Another

The man doveadm-sync pages are cryptic and not very well explained, as well they are missing quality real-world examples.

This gist aims to give some clarity and explanation.

Here is the command I got to successfully transfer (and sync backwards too) an email account from an old Dovecot email server to a new Dovecot email server:

To my knowledge, both servers must have a matching account already setup for this to work:

  • Old Dovcot server: email account [email protected] setup, used and populated with emails.
  • New Dovecot server: email account [email protected] also setup, possibly empty, awaiting email migration from old server.

YMMV - lemeknow

Hint: you have to create/use an ssh key-pair with ssh-keygen, transfer the contents of the ....pub key into the new mail server's ~/.ssh/authorized_keys file before this can run.

!!! WARNING: MAKE A BACKUP OF ANYTHING YOU'RE NOT WILLING TO LOSE !!!

Command

This must be run on the server that contains the transferable account and email data (old server):

doveadm -Dv sync -u [email protected] ssh new.mail.server.com -i /path/to/.ssh/privatekeyfor_new.mail.server.com_rsa doveadm dsync-server -u [email protected]

Explanation

  • doveadm -Dv: run with verbose and progress indicator.
  • sync: sync both ways if email is on both servers (otherwise, just old to new).
  • -u [email protected]: sync this ONE email address (don't bork all emails in case something fails).
  • ssh new.mail.server.com -i /path/to/.ssh/privatekeyfor_new.mail.server.com_rsa: This will ssh into new server using the setup ssh-keygen private key file above (see hint above).
  • doveadm dsync-server -u [email protected]: (from my understanding) ssh runs this part of the command on the new remote dovecot server to get this whole thing working. This is where I spent most of my time experimenting. It would be great if the man doveadm-sync pages expanded better on this in simple details and included more examples.

I hope this saves someone time.

You're welcome.

—Maui

MIT license: This gist, and everything in it comes with absolutely no warranty!

@mawillcockson
Copy link

Thank you so much for this!

I use mail-in-a-box/mailinabox and only needed to copy from the remote/old server, to the new one. So, in addition to this gist, on the remote/old server I allowed the ssh login user to use sudo without requiring a password, and then ran:

sudo -u mail \
    doveadm -Dv sync -1Rl 10 -u [email protected] \
        ssh -i /path/to/ssh_id [email protected] \
            sudo -u mail doveadm dsync-server -u [email protected]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment