Commit Graph

148 Commits

Author SHA1 Message Date
Jagoda Ślązak 03ca4a010b docs(readme): Update Transport mode doc
Add information about workers,
and synchronization of deliveries.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-26 11:38:25 +02:00
Jagoda Ślązak db86cfc6ed refactor: Implement Display for AddressDomain
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-26 11:11:30 +02:00
Jagoda Ślązak c7452526fa test: Test filtermail-transport
Adds filtermail-transport tests and
a test setup for recording SMTP transactions.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-26 11:11:20 +02:00
Jagoda Ślązak 7ea7904ea0 feat(transport): Destination worker pool
Implements a per-destination worker pool,
so that connections to the same destination
are not parallelized, but instead queued.
If a queue is full, new messages are immediately
deferred, before mail data is sent from postfix.

Closes: #141

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-26 11:07:34 +02:00
dependabot[bot] 7d0db2c46e chore(deps): Bump taiki-e/install-action from 2.81.6 to 2.81.10 (#183)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.81.6 to 2.81.10.
- [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/59012be0884e296ca2da49b530610e72c49039ad...7a79fe8c3a13344501c80d99cae481c1c9085912)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.81.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-06-22 18:29:12 +02:00
dependabot[bot] b36856a383 chore(deps): Bump taiki-e/install-action from 2.79.14 to 2.81.6 (#182)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.79.14 to 2.81.6.
- [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/873c7452cadb7c034694a1282227095d93fbdf92...59012be0884e296ca2da49b530610e72c49039ad)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.81.6
  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-06-15 13:42:27 +02:00
dependabot[bot] a66887b778 chore(deps): Bump actions/checkout from 6.0.2 to 6.0.3 (#181)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.3
  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-06-15 13:41:54 +02:00
Jagoda Estera Ślązak 488bbcb182 docs(readme): Disable colors in mermaid diagrams (#180)
Previously used colors caused
diagrams to be unreadable in
light mode.
Removing styling completely,
as this was redundant anyway.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-10 22:31:53 +02:00
Jagoda Estera Ślązak 81aac3cb77 chore(release): prepare for 0.7.1 (#179)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-09 13:45:03 +02:00
Jagoda Estera Ślązak d3f5412420 feat: switch to aws-lc-rs cryptography provider (#178)
Switches crypto provider to keep
chatmail codebase consistent,
analogous to https://github.com/chatmail/core/pull/8313

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-06 15:28:53 +02:00
dependabot[bot] 73b684f90c chore(deps): Bump log from 0.4.29 to 0.4.30 (#173)
Bumps [log](https://github.com/rust-lang/log) from 0.4.29 to 0.4.30.
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.29...0.4.30)

---
updated-dependencies:
- dependency-name: log
  dependency-version: 0.4.30
  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-06-06 10:20:04 +02:00
l fb5a25939c fix: ignore CNAME records when resolving TXT records (#177) 2026-06-06 16:55:18 +09:00
dependabot[bot] 939e5367c9 chore(deps): Bump taiki-e/install-action from 2.79.6 to 2.79.14
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.79.6 to 2.79.14.
- [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/f48d2f8ba2b452934c948b7be1a768079c3632ff...873c7452cadb7c034694a1282227095d93fbdf92)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-05 22:51:57 +00:00
dependabot[bot] b0214a71d7 chore(deps): Bump memchr from 2.8.0 to 2.8.1
Bumps [memchr](https://github.com/BurntSushi/memchr) from 2.8.0 to 2.8.1.
- [Commits](https://github.com/BurntSushi/memchr/compare/2.8.0...2.8.1)

---
updated-dependencies:
- dependency-name: memchr
  dependency-version: 2.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-05 22:51:26 +00:00
dependabot[bot] 2538caa1b2 chore(deps): Bump lru from 0.17.0 to 0.18.0 (#171)
Bumps [lru](https://github.com/jeromefroe/lru-rs) from 0.17.0 to 0.18.0.
- [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jeromefroe/lru-rs/compare/0.17.0...0.18.0)

---
updated-dependencies:
- dependency-name: lru
  dependency-version: 0.18.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-06-03 14:57:12 +02:00
dependabot[bot] f82f34d054 chore(deps): Bump tokio from 1.52.1 to 1.52.3 (#172)
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.52.1 to 1.52.3.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.52.1...tokio-1.52.3)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.52.3
  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-06-03 14:56:45 +02:00
Andrey 0xdc09 8a60245183 fix(resolver): disable negative caching (#170) 2026-06-02 12:04:32 +02:00
j4n 6d6517f8f3 chore: add filtermail.mtail so filtermail failures can be monitored (#169)
Example Prometheus queries:

Outbound errors by reason:
  sum by (reason) (rate(filtermail_transport_error_total[5m]))

filtermail-incoming drops by reason:
  sum by (reason) (rate(filtermail_inbound_drop_total[5m]))
2026-06-01 21:51:34 +02:00
Jagoda Estera Ślązak e9a63222e6 fix(smtp-server): Correct error when EOF while reading DATA (#168)
Log
`Unexpected EoF while receiving DATA!`
instead of
`Malformed DATA line without CRLF ending!`

Fixes: #165

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-06-01 16:27:30 +02:00
dependabot[bot] 893ceab107 chore(deps): Bump taiki-e/install-action from 2.75.28 to 2.79.6 (#164)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.75.28 to 2.79.6.
- [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/51cd0b8c0499559d9a4d75c0f5c67bec3a894ec8...f48d2f8ba2b452934c948b7be1a768079c3632ff)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.79.6
  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-06-01 09:51:57 +02:00
l a6361a2194 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-06-01 09:51:33 +02:00
Jagoda Estera Ślązak febfb90510 chore(release): prepare for 0.7.0 (#163)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-05-26 06:56:00 +02:00
Jagoda Estera Ślązak c84a96ac78 docs(readme): Remove docs for options removed in 664ad57 (#162) 2026-05-26 02:25:51 +09:00
link2xt 847e19546b 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-05-14 20:59:59 +00:00
holger krekel 664ad571b6 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-05-14 20:59:13 +02:00
Jagoda Estera Ślązak 91d09ab370 chore(release): prepare for 0.6.6 (#156)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-05-12 13:02:17 +02:00
holger krekel e2be5dc92d ci: run cmlxc tests in all classic/classic-ipv4/madmail combinations 2026-05-12 12:46:20 +02:00
Jagoda Estera Ślązak d74e5b85b3 feat: Improved SMTP error responses (#147)
Fixes: #140

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-05-12 12:37:02 +02:00
Jagoda Estera Ślązak b7a213ff1b ci: Remove mac and windows from matrix tests (#154)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-05-12 12:20:25 +02:00
holger krekel 3896044f36 fix: return HTTP 200 because madmail expects it, and make sure https is immediately retried when SMTP fails (#153) 2026-05-12 12:13:00 +02:00
Jagoda Estera Ślązak e26cca0260 chore(release): prepare for 0.6.5 (#152)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-05-12 09:52:13 +02:00
dependabot[bot] 272744115f 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-05-12 07:01:30 +02:00
l a65e7a1490 fix: Validate mail data (#150)
Do not allow bare CR and LF etc.
2026-05-12 07:00:21 +02:00
holger krekel 36921dd29f 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-05-12 06:56:11 +02:00
Jagoda Estera Ślązak 5295d175d6 perf(smtp-client): Use pipelining if server advertises support (#146)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-05-07 15:05:51 +02:00
Jagoda Estera Ślązak 10119033a3 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-05-07 14:20:49 +02:00
Jagoda Estera Ślązak d29cbafda4 chore(deps): Upgrade hickory-resolver (#138) 2026-05-05 02:17:21 +02:00
dependabot[bot] bc769e0d2a 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-05-04 12:54:28 +02:00
dependabot[bot] 59944a46ff 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-05-04 12:52:55 +02:00
dependabot[bot] 457461b4ff 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-05-04 09:45:26 +02:00
dependabot[bot] 94dcd6c728 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-05-04 09:44:33 +02:00
holger krekel 36ff21ff91 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-05-01 17:58:11 +02:00
Jagoda Estera Ślązak 5b79d2d08a chore(release): prepare for 0.6.4 (#130)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-05-01 10:39:46 +02:00
Jagoda Estera Ślązak 0a652e61ee 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-05-01 10:30:09 +02:00
Jagoda Ślązak 1b1585eb7d refactor(transport): Explicitly handle RFC7505 null MX
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-04-28 08:24:27 +02:00
Jagoda Ślązak 21aaea0d92 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-04-27 14:44:21 +02:00
dependabot[bot] c1a4d99d2e 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-04-27 10:36:58 +02:00
dependabot[bot] 17ccd3e2ca 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-04-27 10:36:40 +02:00
Jagoda Estera Ślązak 3eb3b86bc9 chore(release): prepare for 0.6.3 (#121)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-04-20 14:09:53 +02:00
Jagoda Estera Ślązak 1e356315da feat(smtp-server): Log malformed SMTP commands (#118)
Closes #110

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-04-20 13:03:49 +02:00