Migrate a mailbox
By the end of this page a mailbox, its calendar and its contacts will be imported from a PST file, with a report.
- Servers. Create a server: IMAP host and port, security (
ssl,starttls,none), TLS verification (can be disabled), optional root folder (root_folder, e.g.PST Import), CalDAV/CardDAV URL (empty = auto-discovery, see DAV discovery), number of parallel connections (workers). A test button checks the connection. - Accounts. Add mailboxes one by one or via CSV. The IMAP login is
tested when added, then again before the run (
precheck). For each account you can enable or disable mail, calendar and contacts. - PST upload. Drag and drop the file onto the Uploads page. It is split into chunks
(32 MiB by default), sent 3 in parallel with automatic retry. Each chunk is verified by
SHA-256 server-side. The upload is resumable: after a refresh or a network drop, sending
the same file again (key
name + size + modification date) resumes at the missing chunks. Disk space is checked before the upload (507 if there is not enough room). - Validation / scan. When the upload finishes, the server checks the size, then the worker verifies the
!BDNsignature and analyzes the whole PST (counting mails, appointments and contacts per folder) in a subprocess. The PST becomesvalidorinvalid(with the reason). - Preview (.zip). On a
validPST, downloadGET /api/psts/{id}/preview?limit=20(limit from 1 to 200): a zip of an evenly spread sample of mails (.eml), appointments (.ics) and contacts (.vcf), organized by folder. Open it before launching to check accents (subjects, bodies, folder names), attachment names and types, and embedded images. Generated in a subprocess, 120 s maximum; 409 error if the PST is not valid, 500 if libpff crashes. - Association. Attach a valid PST to each account.
- Runs. Select accounts then “Run” (
POST /api/runs): one job per mailbox, queued. The worker runsWORKER_CONCURRENCYat a time. Phases:precheck(IMAP, DAV, quota),mail,calendar,contacts,verify. - Pause / resume / stop. From the job detail: pause, resume, stop, full retry, or “retry errors”. Commands take effect between two items.
- Monitoring and report. Progress per phase, current folder, rate, ETA, live log (SSE),
error list. At the end of the job, a JSON report (
GET /api/jobs/{id}/report, also indata/reports/): sent, present, errors, warnings, skipped. A job isdoneif everything passed,done_with_errorsotherwise (errors, failed verification or unfinished items).