Features
What mccb does with your PST files
One image, two services: web (dashboard and API, port 22362) and worker (job queue). State is SQLite and files in ./data.
What it imports
- Mail to IMAP
Sent, Drafts, Trash and Junk go to the server's special folders. Every language and charset is preserved.
- Calendars to CalDAV, contacts to CardDAV
With automatic DAV discovery.
- Newest first
Mail is imported from the newest to the oldest, across all folders.
Built for batches
- Accounts by CSV
Add accounts one by one, or by CSV (
email;password[;login]). - Resumable uploads
Large PST files upload in chunks, each one checked by SHA-256. Free space is checked first.
- Preview
See accents and attachments before anything is written.
- Reports
Live progress, log and JSON report per mailbox.
Safe to interrupt
- Resume without duplicates
Pause, stop, crash or restart: a resume checks the server and never duplicates a message.
- Crashes stay contained
Every job and every PST analysis runs in its own subprocess, so a crash of the native PST library cannot take the worker down.
- Checks
After the mail phase, each folder's message count is compared to what was sent, and a sample of messages is read back and compared by hash.
Running it
- Tuning
Auto or manual tuning of message builders and IMAP connections, per server.
- Mailbox passwords
Stored encrypted. The application can decrypt them, so protect
./dataand theSECRET_KEY. - Backup
Everything is in
./data, includingsecret.key: without it the stored mailbox passwords cannot be decrypted.
What it does not do
- Several administrators
A single administrator: one shared password, no accounts or roles.
- Several hosts
SQLite on a local disk: a single host, no high availability, no NFS.
- Encrypted PSTs
Encrypted or password-protected PSTs have no dedicated handling. They give errors or are marked invalid. Do not rely on it.
- Survive every corrupted PST
A corrupted PST can crash libpff. Affected items are skipped and reported, and past
MAX_CHILD_CRASHEScrashes the job fails. - HTTPS
Port 22362 speaks plain HTTP. Put mccb behind a reverse proxy and do not expose the port directly.
- Other architectures
The published image is for
linux/amd64only. - Decode everything perfectly
Items with no charset information may decode imperfectly in some languages.
- Make up for the target server
Results depend on the target IMAP and DAV server.
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/yetysw/mccb/main/docker-compose.yml
$ docker compose up -d
$ docker compose logs web | grep -A2 "Admin password"