Commit Graph
19 Commits
Author SHA1 Message Date
Jagoda Estera ŚlązakandGitHub dee00ebdcf perf(smtp-client): Cache connections (#117) 2026-04-17 11:37:05 +02:00
Jagoda Estera ŚlązakandGitHub cf64778f71 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-04-15 22:12:09 +02:00
Jagoda Estera ŚlązakandGitHub ec0413bd5f 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-04-15 22:00:42 +02:00
Jagoda Estera ŚlązakandJagoda Ślązak 05cbf2908c feat: Add experimental option to disable mailboxes (#108)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-04-01 23:05:02 +02:00
Andrey 0xdc09andGitHub 49df79bfa0 feat: configurable hosts for listen and reinject (#84)
Adds configurable listen IP and postfix host 
via `filtermail_host` and `postfix_host` chatmail.ini config fields.
2026-03-13 17:04:44 +01:00
Jagoda Estera ŚlązakandGitHub 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ązakandGitHub 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ązakandGitHub 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ązakandGitHub 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ązakandGitHub 54982b1fdd feat: Save rejected messages to /tmp (#55) 2026-02-20 15:38:46 +01:00
Jagoda Estera ŚlązakandGitHub 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ązakandGitHub 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ązakandGitHub 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ązakandGitHub 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ązakandGitHub 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
Jagoda Estera ŚlązakandGitHub cab16fc8f1 fix: Make inbound/outbound log messages consistent (#23)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-01-22 15:14:28 +01:00
Jagoda Estera ŚlązakandGitHub ca6ccd9acf fix: Set logs required by grafana to INFO (#21)
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-01-22 14:49:55 +01:00
Jagoda Estera ŚlązakandGitHub aab39be662 feat: Improve logging (#13)
Improves logs and reduces verbosity.

Fixes: #8

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-01-21 14:35:52 +01:00
Jagoda ŚlązakandJagoda Estera Ślązak 6340f479ae feat: Initial implementation
Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-01-19 16:49:50 +01:00