Commit Graph

1449 Commits

Author SHA1 Message Date
l d12e1d53f7 fix: switch ratelimiter to MonotonicClock (#167)
There is a known bug that `quanta` clock
used by default sometimes jumps back:
<https://github.com/metrics-rs/quanta/issues/111>.
This results in `governor` rate limiter
incorrectly rejecting the messages
even when less than the configured burst size
has been sent.

Switched to standard monotonic clock
which does not have this problem.
I tested that this fixed the problem for me,
chatmail relay test `test_exceed_rate_limit`
stopped failing randomly.

Fixes <https://github.com/chatmail/filtermail/issues/166>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak bd995918ba chore(release): prepare for 0.7.0 (#163)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak a1d54dca93 docs(readme): Remove docs for options removed in 664ad57 (#162) 2026-08-18 12:21:28 +02:00
link2xt 4d6f6af20b fix: do not crash if accepting new connection fails
If we run out of file descriptors, we cannot do anything
to accept queued connections, so at least don't crash the process.
Fixes <https://github.com/chatmail/filtermail/issues/139>.
2026-08-18 12:21:28 +02:00
holger krekel 7d7bccd44b feat!: remove passthrough options that allowed unencrypted mail to pass
see https://github.com/chatmail/relay/pull/970/ for the related removal of chatmail.ini options
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 7c9d4422a5 chore(release): prepare for 0.6.6 (#156)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
holger krekel 9896541fbb ci: run cmlxc tests in all classic/classic-ipv4/madmail combinations 2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 54ecc59345 feat: Improved SMTP error responses (#147)
Fixes: #140

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 24922fbada ci: Remove mac and windows from matrix tests (#154)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
holger krekel 02e68ac146 fix: return HTTP 200 because madmail expects it, and make sure https is immediately retried when SMTP fails (#153) 2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak b0c452afe5 chore(release): prepare for 0.6.5 (#152)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 0b34522b22 chore(deps): Bump taiki-e/install-action from 2.75.22 to 2.75.28 (#148)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.75.22 to 2.75.28.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/cf525cb33f51aca27cd6fa02034117ab963ff9f1...51cd0b8c0499559d9a4d75c0f5c67bec3a894ec8)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.75.28
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
l 49b65b676a fix: Validate mail data (#150)
Do not allow bare CR and LF etc.
2026-08-18 12:21:28 +02:00
holger krekel 0473f5a588 fix: advertise 8BITMIME to prevent conversion after DKIM signing (#149)
for bounces postfix sets Content-Transfer-Encoding: 8bit
which causes a quoted-printable conversion when filtermail SMTP does not offer 8BITMIME,
which in turn breaks DKIM verification.
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak d07a51522d perf(smtp-client): Use pipelining if server advertises support (#146)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 0c917d4d87 fix(smtp-client): Handle 421 on reused connection (#145)
If a reused connection was closed
in the meantime, open a new connection,
instead of failing immediately.

Fixes #143

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 2e80eb651f chore(deps): Upgrade hickory-resolver (#138) 2026-08-18 12:21:28 +02:00
dependabot[bot] 8742ead65e chore(deps): Bump webpki-roots from 1.0.6 to 1.0.7 (#136)
Bumps [webpki-roots](https://github.com/rustls/webpki-roots) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/rustls/webpki-roots/releases)
- [Commits](https://github.com/rustls/webpki-roots/compare/v/1.0.6...v/1.0.7)

---
updated-dependencies:
- dependency-name: webpki-roots
  dependency-version: 1.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 24ecb41dee chore(deps): Bump tokio from 1.51.1 to 1.52.1 (#135)
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.51.1 to 1.52.1.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.51.1...tokio-1.52.1)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.52.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] ababa88a2d chore(deps): Bump lru from 0.16.3 to 0.17.0 (#133)
Bumps [lru](https://github.com/jeromefroe/lru-rs) from 0.16.3 to 0.17.0.
- [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jeromefroe/lru-rs/compare/0.16.3...0.17.0)

---
updated-dependencies:
- dependency-name: lru
  dependency-version: 0.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 5312341404 chore(deps): Bump taiki-e/install-action from 2.75.17 to 2.75.22 (#132)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.75.17 to 2.75.22.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/58e862542551f667fa44c8a2a4a1d64ad477c96a...cf525cb33f51aca27cd6fa02034117ab963ff9f1)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.75.22
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
holger krekel 3ee0bfd35b ci: build and deploy relays with filtermail binary and run interop tests against madmail (#131)
* ci: Run relay integration tests using cmlxc

Builds filtermail and runs cmlxc
tests against a patched chatmail/relay.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>

* ci: run integration tests with branch filtermail binary deployed with chatmail/relay main code

---------

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
Co-authored-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak a30c8b3995 chore(release): prepare for 0.6.4 (#130)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 2ddd5d0cc7 feat: https transport channel (#122)
Transport mode:
Implements an additional mail delivery
channel over HTTPS.

Incoming mode:
Adds a http server listening for
incoming messages delivered over HTTPS.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Ślązak 3c32af1c47 refactor(transport): Explicitly handle RFC7505 null MX
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Ślązak 4131fd0823 fix: Implement missing "implicit MX" rule
Implements "implicit MX" as described by
https://datatracker.ietf.org/doc/html/rfc5321#section-5.1

Fixes: #126
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 6121d46234 chore(deps): Bump taiki-e/install-action from 2.75.5 to 2.75.17 (#125)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.75.5 to 2.75.17.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/7a4939c09608b2a1986b484eca1d16fd0db8ebef...58e862542551f667fa44c8a2a4a1d64ad477c96a)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.75.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 99efe7a371 chore(deps): Bump bnjbvr/cargo-machete from 0.9.1 to 0.9.2 (#124)
Bumps [bnjbvr/cargo-machete](https://github.com/bnjbvr/cargo-machete) from 0.9.1 to 0.9.2.
- [Release notes](https://github.com/bnjbvr/cargo-machete/releases)
- [Changelog](https://github.com/bnjbvr/cargo-machete/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bnjbvr/cargo-machete/compare/7959c845782fed02ee69303126d4a12d64f1db18...ac30a525c0a8d163a92d727b3ff079ee3f6ecb08)

---
updated-dependencies:
- dependency-name: bnjbvr/cargo-machete
  dependency-version: 0.9.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak e29ffd1179 chore(release): prepare for 0.6.3 (#121)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 82a2a8e39f feat(smtp-server): Log malformed SMTP commands (#118)
Closes #110

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 080cd0118d chore(deps): Bump actions/upload-artifact from 7.0.0 to 7.0.1 (#119)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/bbbca2ddaa5d8feaa63e36b76fdaad77386f024f...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 82cdf49e62 chore(deps): Bump taiki-e/install-action from 2.71.2 to 2.75.5 (#120)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.71.2 to 2.75.5.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/d858f8113943481093e02986a7586a4819a3bfd6...7a4939c09608b2a1986b484eca1d16fd0db8ebef)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.75.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 25c8987904 perf(smtp-client): Cache connections (#117) 2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 0755bb931f chore(release): prepare for 0.6.2 (#116)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 21b4c0d1a8 feat(transport): Remote delivery over SMTP (#104)
Implements a new mode "transport",
that allows filtermail to be used for
remote delivery.

In transport mode, filtermail listens for LMTP
connections, splits messages by domain
and performs delivery to remote MTAs over SMTP.

SMTP client tries to open socket on all resolved
addresses in parallel and uses one that succeeds
the first, fixing the issue described in:
chatmail/relay#900

Extends the built-in SMTP client
with STARTTLS support.

Extends the built-in SMTP server
with LMTP greeting support.

Groundwork required for mxdeliv endpoint
(HTTP channel for MTA-to-MTA communication):
chatmail/relay#900

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 1518537ae4 feat: Log disabled recipients (#113)
Logs disabled recipient addresses
when removing them from RCPT TO.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 07dd9c88c6 docs(readme): Reformat README.md (#115)
Fixes: #91

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak dc6b4f4b75 chore(dependabot): Update configuration (#114)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] b689fd2f75 chore(deps): Bump tokio from 1.50.0 to 1.51.0 (#111)
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.50.0 to 1.51.0.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.50.0...tokio-1.51.0)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 4fc1ddbeae chore(deps): Bump taiki-e/install-action from 2.69.13 to 2.71.2 (#112)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.69.13 to 2.71.2.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/704f92c11daa75bff5b4e01fcb083350c16c47b9...d858f8113943481093e02986a7586a4819a3bfd6)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.71.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 8f6f5a9f81 chore(release): prepare for 0.6.1 (#109)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak 7f1521d7cd feat: Add experimental option to disable mailboxes (#108)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 8927fc5c58 chore(deps): Bump taiki-e/install-action from 2.69.4 to 2.69.13 (#107)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.69.4 to 2.69.13.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/a7e592b24782184db1613493a5e65d2e12199f80...704f92c11daa75bff5b4e01fcb083350c16c47b9)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.69.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 7f83b82f14 chore(deps): Bump env_logger from 0.11.9 to 0.11.10 (#106)
Bumps [env_logger](https://github.com/rust-cli/env_logger) from 0.11.9 to 0.11.10.
- [Release notes](https://github.com/rust-cli/env_logger/releases)
- [Changelog](https://github.com/rust-cli/env_logger/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-cli/env_logger/compare/v0.11.9...v0.11.10)

---
updated-dependencies:
- dependency-name: env_logger
  dependency-version: 0.11.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 26128aca27 chore(deps): Bump dtolnay/rust-toolchain (#105)
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from efa25f7f19611383d5b0ccf2d1c8914531636bf9 to 3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9.
- [Release notes](https://github.com/dtolnay/rust-toolchain/releases)
- [Commits](https://github.com/dtolnay/rust-toolchain/compare/efa25f7f19611383d5b0ccf2d1c8914531636bf9...3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9)

---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
  dependency-version: 3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
Jagoda Estera Ślązak af581d558f feat(resolver): Enable DNSSEC (#94)
From hickory-resolver docs:
> To enable DNSSEC, enable the dnssec-ring feature.

Related: https://github.com/chatmail/relay/issues/877
Related: https://github.com/hickory-dns/hickory-dns/issues/3519
Closes: https://github.com/chatmail/filtermail/issues/93

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-08-18 12:21:28 +02:00
dependabot[bot] 79e1d78e5b chore(deps): Bump taiki-e/install-action from 2.68.20 to 2.69.4 (#102)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.68.20 to 2.69.4.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/4a136ceac97fe29b942ff3b6c749a46c7950d853...a7e592b24782184db1613493a5e65d2e12199f80)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.69.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00
Andrey 0xdc09 d4acf064a9 refactor: derive Default for Envelope (#100) 2026-08-18 12:21:28 +02:00
Andrey 0xdc09 5b6140a30a docs(readme): fix typo (#99)
As suggested in https://github.com/chatmail/filtermail/pull/84#issuecomment-4056084708
2026-08-18 12:21:28 +02:00
dependabot[bot] 96d53b7303 chore(deps): Bump Swatinem/rust-cache from 2.8.2 to 2.9.1 (#96)
Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from 2.8.2 to 2.9.1.
- [Release notes](https://github.com/swatinem/rust-cache/releases)
- [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md)
- [Commits](https://github.com/swatinem/rust-cache/compare/779680da715d629ac1d338a641029a2f4372abb5...c19371144df3bb44fab255c43d04cbc2ab54d1c4)

---
updated-dependencies:
- dependency-name: Swatinem/rust-cache
  dependency-version: 2.9.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-18 12:21:28 +02:00