Migrating from any IMAP/POP3 server to Dovecot via dsync ======================================================== You need Dovecot v2.1.4+ for this. This page describes how to migrate mails to Dovecot from a remote IMAP/POP3 server, preserving the IMAP UIDs, POP3 UIDLs and everything else. We'll assume that you can log in with master user "master" that has a password "masteruser-secret". If you can't use master users, you'll need the users' plaintext passwords and change the appropriate configuration to use them. See also server-specific details: * [Migration.Gmail.txt] Generic configuration --------------------- dsync can be configured with features and workarounds. This is done by using dsync_features setting in config file, such as ---%<------------------------------------------------------------------------- dsync_features = empty-header-workaround ---%<------------------------------------------------------------------------- * empty-header-workaround - enables dsync to cope with broken (Zimbra) servers that sometimes send FETCH replies that are missing all the headers, even though the mail actually has headers and another FETCH might return them. In this situation dsync simply assumes for existing mails that the mails are a match. (v2.2.25.3+) In v2.2.30+ dsync can avoid creating a single huge transaction that can fail all at once. In case of failures the sync can be then done incrementally. ---%<------------------------------------------------------------------------- dsync_commit_msgs_interval = 100 # default in v2.2.30+ ---%<------------------------------------------------------------------------- In v2.2.33+ you can specify which email headers are used in incremental syncing for checking whether the local email matches the remote email. This should only include headers that can be efficiently downloaded from the remote server. The default is: ---%<------------------------------------------------------------------------- dsync_hashed_headers = Date Message-ID ---%<------------------------------------------------------------------------- IMAP migration configuration ---------------------------- Set up configuration for the IMAP server you wish to migrate from: ---%<------------------------------------------------------------------------- imapc_host = imap.example.com # Authenticate as masteruser / masteruser-secret, but use a separate login user. # If you don't have a master user, remove the imapc_master_user setting. imapc_user = %u imapc_master_user = masteruser imapc_password = masteruser-secret imapc_features = rfc822.size # If you have Dovecot v2.2.8+ you may get a significant performance improvement with fetch-headers: imapc_features = $imapc_features fetch-headers # Read multiple mails in parallel, improves performance mail_prefetch_count = 20 # If the old IMAP server uses INBOX. namespace prefix, set: #imapc_list_prefix = INBOX # for SSL: #imapc_port = 993 #imapc_ssl = imaps #ssl_client_ca_dir = /etc/ssl #imapc_ssl_verify = yes # for <2.2.0: change ssl_client_ca_dir=/etc/ssl to imapc_ssl_ca_dir=/etc/ssl ---%<------------------------------------------------------------------------- POP3 migration configuration ---------------------------- Set up configuration for the POP3 server you wish to migrate from: ---%<------------------------------------------------------------------------- pop3c_host = pop3.example.com # Authenticate as masteruser / masteruser-secret, but use a separate login user. # If you don't have a master user, remove the pop3c_master_user setting. pop3c_user = %u pop3c_master_user = masteruser pop3c_password = masteruser-secret # for SSL: #pop3c_port = 995 #pop3c_ssl = pop3s # for <2.2.0: change ssl_client_ca_dir=/etc/ssl to pop3c_ssl_ca_dir=/etc/ssl #ssl_client_ca_dir = /etc/ssl #pop3c_ssl_verify = yes # make sure you have also the regular inbox namespace defined, e.g.: #namespace inbox { # inbox = yes #} namespace { prefix = POP3-MIGRATION-NS/ location = pop3c: list = no hidden = yes } protocol doveadm { mail_plugins = $mail_plugins pop3_migration } plugin { pop3_migration_mailbox = POP3-MIGRATION-NS/INBOX } ---%<------------------------------------------------------------------------- The pop3-migration plugin is used to preserve POP3 UIDLs. When dsync is handling IMAP INBOX and requests a POP3 UIDL, the plugin connects to the POP3 server and figures out which IMAP messages match which POP3 messages and then returns the appropriate POP3 UIDL. Running ------- Make sure destination is exactly as source, deleting/reverting any changes in destination if necessary: ---%<------------------------------------------------------------------------- doveadm -o mail_fsync=never backup -R -u user@domain imapc: ---%<------------------------------------------------------------------------- or incremental one-way merge (it's ok to do changes on both sides): ---%<------------------------------------------------------------------------- doveadm -o mail_fsync=never sync -1 -R -u user@domain imapc: ---%<------------------------------------------------------------------------- (Fsyncing is disabled just for migration efficiency.) For per-user user/passwords use: ---%<------------------------------------------------------------------------- doveadm -o imapc_user=foo -o pop3c_user=foo -o imapc_password=bar -o pop3c_password=bar backup -R -u user@domain imapc: ---%<------------------------------------------------------------------------- Once the users are migrated, remember to remove the pop3_migration plugin from settings. Problems -------- * POP3 message order (when it's different from IMAP message order) is currently preserved only when destination is Maildir, sdbox or mdbox. * If source POP3 server merges multiple IMAP mailboxes into one POP3 INBOX, the migration won't be transparent. * If source IMAP and POP3 servers return messages somehow differently, pop3-migration plugin might not be able to match the messages (This file was created from the wiki on 2019-06-19 12:42)