All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
This version introduces breaking changes in the configuration file. Please read the UPGRADING.md file for more information on how to upgrade from previous versions.
- Distributed and fault-tolerant SMTP message queues.
- Distributed rate-limiting and fail2ban.
- Expressions in configuration files.
- Do not include
STATUS
in IMAPNOOP
responses (#234). - Allow multiple SMTP
HELO
commands. - Redirect OAuth using a
301
instead of a307
code.
This version requires a database migration and introduces breaking changes in the configuration file. Please read the UPGRADING.md file for more information.
- Performance enhancements:
- Messages are parsed only once and their offsets stored in the database, which avoids having to parse them on every
FETCH
request. - Background full-text indexing.
- Optimization of database access functions.
- Messages are parsed only once and their offsets stored in the database, which avoids having to parse them on every
- Storage layer improvements:
- In addition to
FoundationDB
andSQLite
, now it is also possible to useRocksDB
,PostgreSQL
andmySQL
as a storage backend. - Blobs can now be stored in any of the supported data stores, it is no longer limited to the file system or S3/MinIO.
- Full-text searching con now be done internally or delegated to
ElasticSearch
. - Spam databases can now be stored in any of the supported data stores or
Redis
. It is no longer necessary to have an SQL server to use the spam filter.
- In addition to
- Internal directory:
- User account, groups and mailing lists can now be managed directly from Stalwart without the need of an external LDAP or SQL directory.
- HTTP API to manage users, groups, domains and mailing lists.
- LDAP bind authentication, to support some LDAP servers such as
lldap
which do not expose the userPassword attribute. - Messages marked a spam by the spam filter can now be automatically moved to the account's
Junk Mail
folder. - Automatic creation of JMAP identities.
- Spamhaus DNSBL return codes.
- CLI tool reports authentication errors rather than a parsing error.
This version introduces some breaking changes in the configuration file. Please read the UPGRADING.md file for more information.
- Built-in Spam and Phishing filter.
- Scheduled queries on some directory types.
- In-memory maps and lists containing glob or regex patterns.
- Remote retrieval of in-memory list/maps with fallback mechanisms.
- Macros and support for including files from TOML config files.
config.toml
is now split in multiple TOML files for better organization.- BREAKING: Configuration key prefix
jmap.sieve
(JMAP Sieve Interpreter) has been renamed tosieve.untrusted
. - BREAKING: Configuration key prefix
sieve
(SMTP Sieve Interpreter) has been renamed tosieve.trusted
.
- Journal logging support
- Replaced
rpgp
withsequoia-pgp
due to rpgp bug.
- Option to allow unencrypted SMTP AUTH (#72)
- Support for
rcpt-domain
key inrcpt.relay
SMTP rule evaluation.
- SMTP strategy
Ipv6thenIpv4
returns only IPv6 addresses (#70) - Milter
DATA
command is sent after headers which causes ClamAV to hang. - Sieve
redirect
of unmodified messages does not work.
- Arithmetic and logical expression evaluation in Sieve scripts.
- Support for storing query results in Sieve variables.
- Results of SPF, DKIM, ARC, DMARC and IPREV checks available as environment variables in Sieve scripts.
- Configurable protocol flags for Milter filters.
- Fall-back to plain text when
STARTTLS
fails andstarttls
is set tooptional
.
- Do not panic when
hash = 0
in reports. (#60) - JMAP Session resource returns
EmailSubmission
capabilities using arrays rather than objects. - ManageSieve
PUTSCRIPT
should replace existing scripts.
- TCP listener option
nodelay
.
- SMTP: Allow disabling
STARTTLS
. - JMAP: Support for
OPTIONS
HTTP method.
- JMAP: Support for setting custom HTTP response headers (#52)
- JMAP/IMAP: Successful authentication requests should not count when rate limiting
- IMAP: Case insensitive Inbox selection
- IMAP: Automatically create Inbox for group accounts
- Encryption at rest with S/MIME or OpenPGP.
- Support for referencing context variables from dynamic values.
- Support for PKCS8v1 ED25519 keys (#20).
- Automatic retry for import/export blob downloads (#14)
- Sender and recipient address rewriting using regular expressions and sieve scripts.
- Subaddressing and catch-all addresses using regular expressions (#10).
- Dynamic variables in SMTP rules.
- Added CLI to Docker container (#19).
- Workaround for a bug in
sqlx
that caused SQL time-outs (#15). - Support for ED25519 certificates in PEM files (#20).
- Better handling of concurrent IMAP UID map modifications (#17).
- LDAP domain lookups from SMTP rules.
- Milter filter support.
- Match IP address type using /0 mask (#16).
- Support for OpenLDAP password hashing schemes between curly brackets (#8).
- Add CA certificates to Docker runtime (#5).
- LDAP and SQL authentication.
- subaddressing and catch-all addresses.
- S3-compatible storage.
- Merged the
stalwart-jmap
,stalwart-imap
andstalwart-smtp
repositories intostalwart-mail
. - Removed clustering module and replaced it with a FoundationDB backend option.
- Integrated Stalwart SMTP into Stalwart JMAP.
- Rewritten JMAP protocol parser.
- Rewritten store backend.
- Rewritten IMAP server to have direct access to the message store (no more IMAP proxy).
- Replaced
actix
withhyper
.
- JMAP for Sieve support.
- Faster parsing of e-mail messages.
Initial release.