After setting up the new mail server, the mail from the old server has to be migrated to the new server. I’ve done this before, and I have been looking through my old posts, here and on the old blog (andre.blaatschaap.be), but it seems I haven’t written about the procedure.
- Configure the mailbox on the new server
- Put the reception of the mailbox on the old server on hold.
- Copy the maildir to the new server.
- Update DNS
- Configure a transport for the on the old server to the new server
- Release the hold
How do we put a mailbox on hold?
check_recipient_access hash:/etc/postfix/recipient_access to
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf,check_policy_service inet:127.0.0.1:10023, check_recipient_access hash:/etc/postfix/recipient_access
Create a file
/etc/postfix/recipient_access. To put the email addres
email@example.com on hold, put
in the file.
postmap /etc/postfix/recipient_access and restart posfix.
When that is done, copy the Maildir to the new server. As my mailbox is carrying over a decade of email, migrated this way several times, this takes a while. Anyhow, in the mean time, update the DNS records, and add a transport to the old server for the domain. (Please note, if there are multiple mailboxes on the domain, do this procedure to all of them before proceeding to the next step)
We want to configure a transport from the old to the new server, since it can take a while for DNS to propagate, and mail might still be arriving at the old server.
As the old server is running ISPConfig, this step can be done within ISPConfig. Select
Email Routing from the left menu.
Add new transport at the top. Enter the domain name we want to forward, select
No MX lookup and enter the new server at
When this is done, we’re going to release the HOLD we put on the mailbox before. This will cause all mail that has arrived while we were busy copy the mailbox over to be delivered to the new server. To do this, we remove the HOLD line from
/etc/postfix/recipient_access and run postmap again. Restart postfix and run
postsuper -H ALL
to release the hold.
Now everything should be ready, the mail hosting for the domain has been migrated, while still being able to receive mail at the old server while the DNS is propagating.