This release adds JMAP as an ingestion provider, allows address filters in advanced search to match a whole domain or a name at any domain using wildcards, moves the date format into system settings, and corrects a number of cases where mail was archived with the wrong date, archived twice, or not archived at all. The new version also supports Apache Tika 4, which is now the bundled text extractor.
Highlights
JMAP mailboxes can now be archived
A new JMAP provider archives a mailbox from any server that speaks JMAP, including Fastmail, Stalwart, Cyrus IMAP and Apache James. It signs in with an API token or with a password or app password, and reads the mailbox without ever writing to it.
See the new JMAP guide for Fastmail and Stalwart setup.
Wildcards in search
Every address filter in advanced search, including the exclude filters, now accepts two patterns: *@example.com matches every address at the given domain, and name@* matches that name at any domain.
The patterns apply to mail indexed from this version on. A Full rebuild on Admin → Index applies them to older mail.
The date format is now an organisation-wide setting
Dates and times across the archive, search results, email details and the audit log are shown in a format chosen once by an administrator on the System Settings page: following the interface language, ISO 8601, European, or US. The ISO 8601 option shows the time with its UTC offset, so an audit entry reads the same for reviewers in different time zones.
Search and indexing
- Emails missing from search can be found and re-indexed. Some emails are marked as indexed but have no entry in the search engine, most of them left behind by the v0.5.1 upgrade, and the automatic self-healing never looked at them. A new Verify index coverage action on Admin → Index checks every indexed email against the search engine and queues the missing ones. Nothing is deleted. It needs Meilisearch 1.14 or newer, which the bundled compose file already provides.
- Apache Tika 4 is the bundled text extractor. The compose file now ships Tika 4.1.0. A busy Tika server is retried instead of being recorded as an empty result, and a document that Tika could only partly read keeps the text it managed to extract. Instances that point
TIKA_URLat their own Tika 3 keep working: the server's version is read on first use and the right request is sent to each. - One attachment with malformed text no longer holds up a batch. Text extracted from some attachments contained characters the search engine rejected, which failed every document sent alongside it until the offender was isolated (#472).
- A PDF with an oversized image no longer hangs the indexing worker. The built-in PDF parser looped forever on such files and the worker sat at full CPU until it was killed (#497). These files are now skipped and logged.
Ingestion
- IMAP initial imports on providers with account-wide message numbering take minutes, not hours. On web.de, GMX and similar servers the first message in a folder can sit tens of millions of positions above the start, and the connector used to walk every one of them. It now asks the server which messages exist (#483).
- Emails are archived with their own date. When an email's Date header used a time-zone name such as CEST, a localised month name, or was missing, the email was archived as sent at the moment it was fetched, and so was its stored copy (#372). The date is now read from the header as written, then from the delivery trail, then from the provider's record, and only then from the clock.
- Two workers archiving the same message no longer overwrite each other's stored file. When one message reached two mailboxes of a merge group, or a job was redelivered after a stall, the second writer replaced the first's file while each row kept its own checksum, and every row but the last writer's then failed its integrity check. A stored file is now never overwritten.
Administration and security
- A Seats page on the Admin menu shows how many seats an Enterprise licence would need, calculated from the mailboxes already in the archive, with the mailboxes listed and classified as person, shared, room or equipment. Nothing is reported or enforced in the open-source edition; the page exists so the number is known before a licence is chosen.
Interface
- Multi-language translation is complete. All language translations are now complete based on English.
Deployment and operations
- Containers no longer download dependencies when they start. Production dependencies are now part of the Docker image, built for the image's own architecture, so a container boots without reaching the npm registry (#481). The pinned pnpm was also moved to a release that includes several security fixes.
- Database passwords with special characters work in
DATABASE_URL. The password was encoded twice, so a password containing@or similar characters was sent to Postgres in the wrong form (#493). - The
RETENTION_BATCH_SIZEexample in.env.examplenow matches its documented default of 100 (#490).
Upgrade notes
- Apache Tika 4. Compose deployments pick up the new image with
docker compose pull. IfTIKA_URLpoints at a Tika server you run yourself, both 3.x and 4.x are supported and the version is detected on first use;TIKA_API_VERSION(3or4) can force it if a proxy hides the server's version endpoint. The Tika image is no longer published for 32-bit ARM. - Verify index coverage needs Meilisearch 1.14 or newer. The Docker Compose file ships 1.38.
- Wildcard address filters apply to mail indexed from this version on; run a Full rebuild on Admin → Index to cover older mail.
- Date format. The per-browser preference from the account page is gone; an administrator chooses the format once under System Settings, and the default follows the interface language.
Contributors
- @weishest — JMAP ingestion, wildcard search filters, system-wide date format and settings hardening, index verification, the ingestion and indexing corrections above, Tika 3 and 4 compatibility, Seats page, Docker image and translations.
- @morph027 — Apache Tika 4 support with an integration test and CI workflow (#492).
- @kisst — user-selectable date format, the basis for the system-wide setting (#469).
- @raubinpierce — Google OAuth Mailbox refresh token (#478).
- @egezamb —
DATABASE_URLpassword encoding (#493). - @JulianFriedle — error logging at startup (#484).
Thanks to everyone who reported the issues that shaped this release.
Full changelog: v0.6.0...v0.6.1