mccb
MIT, no paid editionRuns with Docker Compose

From old mailboxes to new servers: mail

mccb reads PST and OST files, Exchange, Microsoft 365, Google Workspace, IMAP, JMAP, mbox, Maildir and more, and writes to IMAP, CalDAV, CardDAV, JMAP or Exchange. It is built for sysadmins and hosting providers who migrate batches of mailboxes.

[email protected]Demo, fictional data
  1. Precheck
  2. Mail
  3. Calendar
  4. Contacts
  5. Verify
anna.pst
  • Mail60
  • Appointments8
  • Contacts12

IMAPmail.example.com

0 / 60

CalDAVmail.example.com

0 / 8

CardDAVmail.example.com

0 / 12

  • 1Idle
  • 2Idle
  • 3Idle
  • 4Idle
0Imported, out of 80
0Found on the server, not sent again
0Sent again after a check
0Duplicates

Press Start, then cut the connection whenever you like.

In production

More than 500 GB of mail already migrated without errors, with calendars and contacts.

How it works

One server, many mailboxes, one report each.

  1. Add a server

    Pick the provider, or any IMAP server: address and port are filled in, and it is checked when saved.

  2. Create a migration

    Where the mail comes from, a file or a live server, and the mailbox it goes to. Many at once: import a CSV.

  3. Start it

    The mailbox's panel says what is still missing, then starts it. Run a dry run first if you like.

  4. Follow and read

    Follow every mailbox live, and read one report per mailbox.

See all features

Limits

Read this before you migrate.

Validate a migration on a test mailbox before running it on production data.

  • One administrator, one host

    One shared password, no accounts or roles. SQLite on a local disk, no high availability.

  • Exchange, Microsoft 365 and Google are untested on real servers

    These connectors have been tested against simulated servers only. Try one mailbox with few items first.

  • Microsoft 365 limits

    Mail written through Graph gets the date of the import as its received date. Attendees are written as text by default, and archive mailboxes are not migrated.

  • JMAP calendars are not implemented

    Use CalDAV for the calendars of a JMAP provider.

  • Encrypted PSTs are not handled

    A PST whose content is encrypted or protected by a password gives errors or is marked invalid.

  • Corrupted PSTs can crash libpff

    Affected items are skipped and reported. Past a limit of crashes the job fails, and a badly damaged PST can be rejected.

  • Plain HTTP

    Port 22362 speaks plain HTTP. Put mccb behind a reverse proxy and do not expose the port directly.

  • amd64 only

    The published image is for linux/amd64.

What it does not do

Get mccb running

Open http://<host>:22362 and sign in with the printed password. It is shown once. Details are in the docs.

$ mkdir mccb && cd mccb
$ curl -fsSLO https://raw.githubusercontent.com/selfhostr/mccb/main/docker-compose.yml
$ docker compose up -d
$ docker compose logs web | grep -A2 "Admin password"