Commit Graph

76 Commits

Author SHA1 Message Date
Jagoda Estera Ślązak b31e13a417 chore(release): prepare for 0.6.0 (#92)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-03-13 12:51:38 +01:00
Jagoda Estera Ślązak 8dd9436a0d feat!: Remove IP verification for domain-literals (#90)
BREAKING CHANGE: messages using domain-literal
  addresses don't require to match the origin
  SMTP connection IP anymore.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-03-13 12:25:45 +01:00
Jagoda Estera Ślązak 82a9850a4b docs(readme): Improve README.md (#88)
Fixes #85

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-03-12 18:15:08 +01:00
Jagoda Estera Ślązak 779e7ca2b4 docs(readme): Clarify licensing of the binaries
Co-authored-by: holger krekel  <holger@merlinux.eu>
2026-03-11 19:00:56 +01:00
Jagoda Ślązak 0d7f5d7b05 docs(readme): Fix license link
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-03-11 18:04:14 +01:00
dependabot[bot] 07496abab4 chore(deps): Bump tokio from 1.49.0 to 1.50.0 (#86)
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.49.0 to 1.50.0.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.49.0...tokio-1.50.0)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.50.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-03-11 10:56:32 +01:00
dependabot[bot] a8033b107e chore(deps): Bump taiki-e/install-action from 2.68.13 to 2.68.20 (#87)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.68.13 to 2.68.20.
- [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/a3324fb0eb94b8230ec968c3389c1b7929fc2f3b...4a136ceac97fe29b942ff3b6c749a46c7950d853)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.68.20
  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-03-11 10:53:51 +01:00
Andrey 0xdc09 c088cbfe4d refactor: use enum for mode cli arg (#83) 2026-03-05 10:17:37 +01:00
dependabot[bot] 3a571b7aa7 chore(deps): Bump actions/download-artifact from 7.0.0 to 8.0.0 (#81)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7.0.0 to 8.0.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/37930b1c2abaa49bbe596cd826c3c89aef350131...70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 13:50:01 +01:00
dependabot[bot] 962de095c0 chore(deps): Bump taiki-e/install-action from 2.68.5 to 2.68.13 (#82)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.68.5 to 2.68.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/71b48393496777ee11188c07a34d48b048a985cd...a3324fb0eb94b8230ec968c3389c1b7929fc2f3b)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.68.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-03-03 13:48:30 +01:00
dependabot[bot] 954d950c2f chore(deps): Bump actions/upload-artifact from 6.0.0 to 7.0.0 (#80)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/b7c566a772e6b6bfb58ed0dc250532a479d7789f...bbbca2ddaa5d8feaa63e36b76fdaad77386f024f)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 13:47:50 +01:00
Jagoda Estera Ślązak f149797775 chore(ci): Fix binary publish job (#79) 2026-02-28 18:30:47 +01:00
Jagoda Estera Ślązak 3054b31dc7 chore(release): prepare for 0.5.2 (#78)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-27 18:02:11 +01:00
Jagoda Estera Ślązak edca7cbf2a chore(ci): Add missing Zig dependency (#77)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-27 17:46:16 +01:00
Jagoda Estera ?l?zak 6bb90f8811 chore(ci): Build and upload binaries in CI (#76)
Use zigbuild directly instead of cargo-dist,
as cargo-dist doesn't suit our needs well
(e.g. uploading binaries at top level).

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-27 10:54:14 +01:00
Jagoda Estera Ślązak e62b161848 chore: Bump cargo-dist (#73)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-25 16:24:58 +01:00
Jagoda Estera Ślązak 82618de311 feat: Check incoming email return address (#72)
If the MAIL FROM doesn't match the From header,
we do not reject the mail, as this can be caused
by e.g. SRS forwarding. Instead, we reset the envelope
address, so it is reinjected as `MAIL FROM:<>`
to prevent sending a bounce message.

Closes #67

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-25 16:20:08 +01:00
Jagoda Estera Ślązak a5c6880ceb refactor: Check if email is encrypted before verifying DKIM (#71)
This way we won't be logging DKIM rejections on messages that
would be rejected anyway due to not being encrypted.

Fixes #69

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-25 16:10:01 +01:00
Jagoda Estera Ślązak 2e1c38466c fix(logs): Log correct address for outbound messages (#70)
Fixes #68

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-25 16:08:41 +01:00
Jagoda Estera Ślązak ff3ffd54ef chore(release): prepare for 0.5.1 (#65)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-24 12:04:43 +01:00
Jagoda Estera Ślązak e1841cb590 fix(logs): Log From address instead of envelope MAIL FROM. (#66)
Fixes #64

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-24 11:58:28 +01:00
Jagoda Estera Ślązak 52208c42b6 fix(dkim): Accept TXT records with escaped quotes (#61) 2026-02-24 08:12:17 +01:00
Jagoda Estera Ślązak 8a1684d488 fix(smtp): Properly handle bounce messages (#63)
Closes #58

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-23 19:45:21 +01:00
dependabot[bot] 38627bfb4b chore(deps): Bump taiki-e/install-action from 2.67.30 to 2.68.5 (#57)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.67.30 to 2.68.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/288875dd3d64326724fa6d9593062d9f8ba0b131...71b48393496777ee11188c07a34d48b048a985cd)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.68.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-02-23 19:45:01 +01:00
Jagoda Estera Ślązak 6145be4108 fix(dkim): Accept TXT records with no v= tag (#62)
Cache at most 3 TXT records instead of trying to find one that includes `DKIM`.

Closes #59

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-23 19:44:30 +01:00
Jagoda Estera Ślązak 288afa3273 chore(release): prepare for 0.5.0 (#56)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-20 18:12:35 +01:00
Jagoda Estera Ślązak 54982b1fdd feat: Save rejected messages to /tmp (#55) 2026-02-20 15:38:46 +01:00
l 94f1b29917 refactor: do not copy the mail in memory for DKIM verification (#54)
`String::from_utf8_lossy` always copies the data
for the case when it needs to replace invalid UTF-8,
but we don't want invalid UTF-8 anyway as replacing
invalid UTF-8 characters will break DKIM signature.
2026-02-19 19:06:08 +01:00
Jagoda Estera Ślązak 7d4fac698f fix(dkim): Make simple header canonicalization work properly (#53)
Previously header parsing caused leading whitespaces to be
trimmed in HeaderBody, which resulted in incorrect simple
header canonicalization.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-19 14:33:40 +01:00
Jagoda Estera Ślązak 083ec1a60b chore(release): prepare for 0.4.1 (#51)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-17 13:07:46 +01:00
Jagoda Estera Ślązak 6e2a37956c chore(tests): Add a way to disable DKIM for tests (#50)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-17 13:00:31 +01:00
Jagoda Estera Ślązak 4eb7e9fd63 chore(release): prepare for 0.4.0 (#49)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-17 10:38:31 +01:00
Jagoda Estera Ślązak 4837754245 feat: Support addresses using domain literals (#42)
If the incoming email comes from address that uses
domain literals `[<ipv4>]` or `[IPv6:<ipv6>]`,
skip DKIM verification and instead check IP
alignment with originating IP from XFORWARD
command.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-16 18:25:21 +01:00
Jagoda Estera Ślązak a096d0550f feat!: DKIM verifier (#35)
* feat!: DKIM verifier

This implements a DKIM verification as well as a strict
DKIM signature alignment check with domain in `From`
header address.

Caches the retrieved RDATA using in-memory LRU.

BREAKING CHANGE: incoming messages now require DKIM signatures
  aligned to domain of the `From` header address.

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

* chore(license): License binaries under GPLv3

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

---------

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-16 09:50:55 +01:00
Jagoda Estera Ślązak 3bf8395ef6 chore(release): prepare for 0.3.0 (#45)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-14 14:42:55 +01:00
dependabot[bot] 85d6c381b3 chore(deps): Bump dtolnay/rust-toolchain (#46)
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561 to efa25f7f19611383d5b0ccf2d1c8914531636bf9.
- [Release notes](https://github.com/dtolnay/rust-toolchain/releases)
- [Commits](https://github.com/dtolnay/rust-toolchain/compare/f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561...efa25f7f19611383d5b0ccf2d1c8914531636bf9)

---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
  dependency-version: efa25f7f19611383d5b0ccf2d1c8914531636bf9
  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-02-14 14:36:27 +01:00
dependabot[bot] 21f0614b5d chore(deps): Bump taiki-e/install-action from 2.67.24 to 2.67.30 (#48)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.67.24 to 2.67.30.
- [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/4573997e3b6c0fbc22f7acab193b00a8a3ca817d...288875dd3d64326724fa6d9593062d9f8ba0b131)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.67.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-02-14 14:35:33 +01:00
dependabot[bot] 10fd148155 chore(deps): Bump env_logger from 0.11.8 to 0.11.9 (#47)
Bumps [env_logger](https://github.com/rust-cli/env_logger) from 0.11.8 to 0.11.9.
- [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.8...v0.11.9)

---
updated-dependencies:
- dependency-name: env_logger
  dependency-version: 0.11.9
  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-02-14 14:34:36 +01:00
Jagoda Estera Ślązak cc1604b0b2 feat: Support legacy, pre-OpenPGP packet format (#44)
Support legacy packet format for compatibility with GnuPG.

Closes: #43

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-13 12:31:39 +01:00
dependabot[bot] c1f728535f chore(deps): Bump taiki-e/install-action from 2.67.16 to 2.67.24 (#37)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.67.16 to 2.67.24.
- [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/a362280ea100b5bb920cf9040c038ce9a50c7943...4573997e3b6c0fbc22f7acab193b00a8a3ca817d)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.67.24
  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-02-10 11:29:31 +01:00
Jagoda Estera Ślązak 0ee1e9924c refactor: Use a custom, minimal SMTP client instead of lettre (#33)
This disables the Nagle's algorithm on re-insertion.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-06 11:15:14 +01:00
Jagoda Estera Ślązak 8d18b73681 refactor: Remove unnecessary Arc (#36)
`Arc` around handler configs are not needed,
as they are not shared.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-02-05 16:42:06 +01:00
dependabot[bot] 47f16360a4 chore(deps): Bump taiki-e/install-action from 2.67.6 to 2.67.16 (#34)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.67.6 to 2.67.16.
- [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/8444b4f2165ec93147f3ee41e06495653063ad11...a362280ea100b5bb920cf9040c038ce9a50c7943)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.67.16
  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-02-02 11:05:48 +01:00
Jagoda Estera Ślązak 7be2004051 chore(dist): Switch to musl targets (#31)
Ensures filtermail binaries are 100% statically linked.

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-01-28 20:06:04 +01:00
Jagoda Estera Ślązak 95fd106e43 chore(release): prepare for 0.2.0 (#30)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-01-28 18:22:53 +01:00
Jagoda Estera Ślązak 23231d462c feat: Configurable rate limiter max burst size (#28)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-01-28 17:47:48 +01:00
dependabot[bot] 9a8e4fe65c chore(deps): Bump taiki-e/install-action from 2.66.7 to 2.67.6 (#24)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.66.7 to 2.67.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/542cebaaed782771e619bd5609d97659d109c492...8444b4f2165ec93147f3ee41e06495653063ad11)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.67.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-01-27 10:07:52 +01:00
dependabot[bot] c0104152e8 chore(deps): Bump actions/checkout from 6.0.1 to 6.0.2 (#25)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [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/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.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-01-27 10:06:35 +01:00
link2xt aa5999cc25 refactor: remove Mutex around rate limiter
Rate limiter handles all the necessary locking internally.
2026-01-26 17:59:12 +00:00
link2xt 3be4c4d5ee perf: disable Nagle's algorithm and do own buffering on server connections
I don't know if Postfix as the client disables delayed ACKs,
but if delayed ACKs are enabled, Nagle's algorithm introduces unnecessary delays.
2026-01-26 14:56:36 +00:00