An extension to ease the migration between 2 IMAP servers using offlineimap
Clone or download
Latest commit deebe01 May 24, 2018
Failed to load latest commit information.
.landscape.yaml Integration with external tools. Jun 10, 2015
README.rst Added badges Nov 17, 2017


Mailboxes migration using OfflineIMAP

travis codecov Code Health

A simple Modoboa extension which provides a way to migrate existing mailboxes using OfflineIMAP.

How does it work

This extension mainly provides a cron script which periodically synchronize user mailboxes from an existing IMAP server to a new one. The workflow is pretty simple:

  • A user from the old server logs into Modoboa using the same credentials
  • A new account is automatically created and a new migration task is created using the provided credentials
  • The cron script periodically synchronizes mailboxes corresponding to migration tasks
  • Once a migration is done, it can be disabled through the admin panel


Install this extension system-wide or inside a virtual environment by running the following command:

$ python install

Then, edit the file of your modoboa instance and add modoboa_imap_migration inside the MODOBOA_APPS variable like this:

  # ...

Restart the python process running modoboa (uwsgi, gunicorn, apache, whatever).

Run the following commands to setup the database tables:

$ cd <modoboa_instance_dir>
$ python migrate modoboa_imap_migration
$ python load_initial_data

You also need to install OfflineIMAP.


Authentication backend

An IMAP authentication backend is provided by the extension and must be enabled.

Edit the file and modify the AUTHENTICATION_BACKENDS variable as follows:


cron script

The synchronization script must be configured to run periodically on your new server. Since it will copy mailboxes content to its final destination, filesystem permissions must be respected. To do that, it must be executed by the user which owns mailboxes (generally vmail).

Here is a configuration example where the script is executed every hours. You can copy it inside the /etc/cron.d/modoboa file:


0       */1     *       *       *       vmail   cd /srv/vmail && $PYTHON $INSTANCE/ generate_offlineimap_config --output .offlineimaprc && /usr/local/bin/offlineimap > /dev/null 2>&1

Feel free to adapt it.

Helper script for OfflineIMAP

OfflineIMAP will need a way to retrieve user passwords of the old server. To do that, just copy the following Python code into a file called

import os
import site
import sys

os.environ["DJANGO_SETTINGS_MODULE"] = "instance.settings"

from django.apps import apps
from django.conf import settings

from modoboa_imap_migration.models import Migration

def get_user_password(username):
    """Retrieve a password from Modoboa's database."""
    return Migration.objects.select_related().get(

Then, copy this file into the home directory of the user owning mailboxes (generally vmail). For example:

$ cp /srv/vmail
$ chown vmail:vmail /srv/vmail/

Online settings

You need to configure the access to the old IMAP server.

All the configuration is done from the admin panel (Modoboa > Parameters > IMAP migration).