Commit Graph

1273 Commits

Author SHA1 Message Date
Wez Furlong 91c0c2ac57 mailparsing: fallback to Content-Type::name for attachment name
Adjusts how we resolve the attachment name when processing mime
attachment parameters:

* First check Content-Disposition::filename
* Then check Content-Type::name

De-couple parsing out the `Content-Id` header from having
`Content-Disposition`.

In the lua bindings; remove the synthesized filename fallback;
we now just leave it nil to match the rust logic.
2025-09-10 10:42:48 +01:00
kay ozaki 934a8eebab adding crc32
closes: https://github.com/KumoCorp/kumomta/pull/404
2025-09-09 14:35:48 +01:00
Wez Furlong 7fffccf410 Add support for generating NDRs
This commit adds some plumbing to facilitate generation of RFC 3464
non-delivery reports and some corresponding glue to enable calling
it from lua.

Examples in the docs that are also added.
2025-09-09 14:12:52 +01:00
Wez Furlong c7cbd99a9f add kumo.inject_message 2025-09-09 10:38:36 +01:00
Wez Furlong 1bf9d138ce extended lua mime parsing API
refs: https://github.com/KumoCorp/kumomta/issues/117

Could also make it possible to do eg:
https://github.com/KumoCorp/kumomta/issues/142
without any explicit direct support in the product.
2025-09-09 09:15:58 +01:00
Mike Hillyer 9c16e45a92 Working on clarifying the scopes used in Kumo's shaping.lua. 2025-08-28 11:46:12 -04:00
Daniel Schaaff 3a42354289 fix prettier removing indentation on note section
Signed-off-by: Daniel Schaaff <daniel@danielschaaff.com>
2025-08-28 10:21:44 -04:00
Daniel Schaaff 1bcb2c31ac fix minor typo in logging doc 2025-08-28 10:21:44 -04:00
smsvip 05d4a23b60 Update set_smtpsrv_threads.md
Repair set_smtpsrv_threads documents
2025-08-25 22:20:23 -04:00
Tom Mairs a1a5f71852 Update note about minimum supported instance 2025-08-08 14:47:18 +00:00
Wez Furlong 6a05a65f73 mpsc: provide shutdown event and clarify single-consumer parts
It was possible to deadlock your policy by triggering queue
length/emptiness checks conurrently with the queue consumer thread.

Let's make it more explicitly clear which methods cannot be used that
way by making their mutex acquisition non-blocking and raise an error.

In addition, let's improve the close method so that it doesn't require
exclusive access to the consumer side of the queue.

Provide a shutdown_logging event that can be used to explicitly close
queues on shutdown, if that is appropriate for your use case.
2025-07-29 15:22:51 +01:00
Tom Mairs 634a00ec6f Add new tested cloud environments 2025-07-27 22:50:10 +00:00
Wez Furlong 91884d3892 docs: format 2025-07-26 13:30:00 +01:00
Wez Furlong 33b109c792 docs: changelog for #399 2025-07-25 06:05:53 +01:00
Wez Furlong bc7c95b42a docs: changelog for #394 2025-07-25 06:02:57 +01:00
Pankaj Rathi eae61a90fe Add support for custom key names in HashiCorp Vault secrets (#399)
* Add support for custom key names in HashiCorp Vault secrets

Co-authored-by: Wez Furlong <wez@wezfurlong.org>
2025-07-25 06:02:21 +01:00
Wez Furlong 9e62a275c5 add tls_required_client_ca esmtp listener parameter
This enables configuring mTLS support in the listener.

Adjust TLS client tests to use this on the sink side and verify
that mTLS works for both inbound and outbound SMTP.

refs: #100
refs: #391
2025-07-24 15:40:49 +01:00
Wez Furlong c8027effb6 smtp_server: collect incoming tls information for logs/meta
This commit extracts the TLS version, cipher and subject name from
the TLS state and captures it:

* In the trace headers
* In the connection metadata
* In the Reception log record

In order to capture the info in trace headers, this commit will
now change the reception protocol to ESMTPS (for SSL) or ESMTPSA (for
authenticated SSL), and emit the version and cipher information as
a comment like: `with ESMTPS (TLSv1_3:TLS13_AES_256_GCM_SHA384)`.

closes: #100
2025-07-24 13:01:13 +01:00
kayozaki 76add2ced5 Adding support for presenting Client cert as part of make_egress_path (#391) 2025-07-24 13:00:27 +01:00
Wez Furlong 7e6ca34e2d new: kumo.fs lua module
The read_dir and glob functions have been logically moved into that new
namespace, leaving deprecated versions of them in the `kumo` module.

A new `kumo.fs.open` function that works similarly to `io.open` is
provided.  This function cooperates with the kumo async io scheduler
and won't block it if the filesystem is under pressure.

It returns file handles that are simlar to the builtin lua file handle
objects, but do not support formatting or parsing of writes or reads
respectively: the calling code is responsible for that.  The rationale
for this difference is that is that lua's semantics for those functions
are frankly a bit weird and are hard to replicate precisely.
2025-07-23 16:51:06 +01:00
Wez Furlong 7d617bb270 add kumo.mpsc.define
This function allows defining a non-durable, non-persistent, in-memory
queue that is intended to be used as glue when building up more advanced
processing flows within kumomta.

The intent is that the queue is processed from within a task spawned via
`spawn_task`.
2025-07-23 12:44:10 +01:00
Tom Mairs 88b182d3c3 removed duplication 2025-07-22 23:08:46 +00:00
Tom Mairs 7064344b04 Update list of command line tools 2025-07-22 22:49:12 +00:00
Wez Furlong 7903dff857 docs: update json file versions
these were lagging behind due to a local configuration issue
on my build system in an earlier commit.
2025-07-22 09:08:40 +01:00
Wez Furlong 5a3c942675 docs: update for #390 2025-07-22 09:08:18 +01:00
kayozaki a7315633de add kumo.dns.lookup_ptr (#390)
* add lookup_ptr

Co-authored-by: Wez Furlong <wez@wezfurlong.org>
2025-07-22 08:45:27 +01:00
Wez Furlong fa5d6a6e7a allow specify port number in queue and routing_domain meta
The motivating use case here is to allow using a rebind command to
specify `smarthost:port`.  You can achieve that via an invocation
like:

```
kcli rebind --everything --set queue=smarthost:port
```

or:

```
kcli rebind --everything --set routing_domain=smarthost:port
```

refs: https://github.com/KumoCorp/kumomta/issues/352
2025-07-21 15:38:28 +01:00
Wez Furlong d9a2392ccb allow setting destination smtp port via mx_list 2025-07-21 12:30:29 +01:00
Mike Hillyer 58e9770206 We miss you Mister Rogers. 2025-07-18 12:11:14 -04:00
Tom Mairs 535fc00e2e Add Mint to OS list 2025-07-11 02:52:19 +00:00
Mike Hillyer 34ceef78dd Update User Guide references to log_arf and log_oob to use the new LogThenRelay and LogThenDrop directives. 2025-07-09 15:11:42 -04:00
Wez Furlong e0db075d5f docs: kumo.disconnect
kumo.disconnect was added as part of an earlier commit (to facilitate
some testing), but without any docs.

This commit adds docs for it!
2025-07-07 18:35:46 +01:00
Bjarn Bronsveld 440fe285b2 Update user guide to replace 'log_fbl' with 'log_arf' in example 2025-06-29 09:24:09 +01:00
Tom Mairs f498cf3482 fix formatting 2025-06-20 20:03:56 +00:00
Tom Mairs a8157812de Add systemd service instructions for KumoProxy 2025-06-20 19:38:23 +00:00
Mike Hillyer 9dba9c5b5f Update traffic shaping defaults to require TLS for Google as per conversation with Gmail admins. 2025-06-10 09:26:07 -04:00
Wez Furlong 705c76ec1a mailparsing: fix potential panic when fixing broken base64 parts
The sampled region needs to be clamped to fit the length of the string;
we were previously assuming that there could be 8 additional bytes after
the error position, which is not guaranteed.
2025-05-27 06:58:57 -07:00
Mike Hillyer ac67fdf71e Linter complaint 2025-05-22 14:39:40 -04:00
Mike Hillyer 02537213aa Typo fix. 2025-05-22 14:27:29 -04:00
Mike Hillyer 168fb14e67 Correction. 2025-05-21 09:53:41 -04:00
Wez Furlong bf76ddd066 docs: fixup get_egress_path_config
You can't actually define this multiple times; I was on early-morning
autopilot when I wrote that up in 48f1e48e6d
2025-05-16 14:07:10 -07:00
Wez Furlong 42bf5c5e61 docs: adjust reference to improve search terms
We've been hoping that mkdocs-material will ship the much anticipated
search enhancements for some time, but it's time to recognize that
we need to do something to improve the search results with how
things work right now.

This is a big commit that changes the titles of the various pages
from the code-annotated synopsis to just the name of the function.

This makes it much easier now to match things like `kumo.reject`
directly, but `reject` remains awkward to find.

I think this is the best that we can do at this time.

A few functions have been annotated with the `status: deprecated` to
show as deprecated in the toc/nav (shows with a little trash can next
to the name).
2025-05-16 14:02:19 -07:00
Wez Furlong 36a14f1ff7 docs: add explicit titles to event reference pages
This makes it easier to search for eg: get_egress_path_config and have
mkdocs return that page as a result.
2025-05-16 06:35:45 -07:00
Wez Furlong 48f1e48e6d docs: expand get_egress_path_config event docs 2025-05-16 06:28:13 -07:00
Wez Furlong b2cdc079e1 docs: fmt 2025-05-15 09:12:17 -07:00
Wez Furlong 1a7875c663 docs: update configure_resolver page for hickory changes
Since we published a stable release on the new hickory,
tweak this page to show the now-current form of things.
2025-05-14 12:54:19 -07:00
Mike Hillyer 41d8cd92a1 Add Postmastery integration. 2025-05-09 13:01:36 -04:00
Wez Furlong b0c6b1cf6a smtp_dispatcher: retry more aggressively in transport-error-ish scenarios
Some sites are non-conforming in their behavior when they have a policy
that issues a transient failure and then snips the connection without
explicitly issuing a 421.

This can cause "splash damage" where a message is transiently failed
and the connection snipped "disgracefully" and a subsequent message
that is due to go out on that same established connection encounters
a transport error when the RSET part of the pipeline is sent.

This commit provides methods on the ClientError and Response types
to help reason about whether the response might be specifically
about the message being delivered, vs. more of a transport error.

The gist of this check is that timeouts and transport level stuff
where there is no protocol level response are not considered to
be due to the message.  Protocol level responses prior to MAIL FROM
are similarly considered to be more like transport errors.

The functional change in this commit is:

* If we get a transport-ish error and we have more candidate hosts
  available in the connection plan, then after logging a
  TransientFailure for the error we just encountered, we'll push
  back the message to be tried again on the next connection that
  we open in the current session.

* For timeout errors specifically, this behavior is gated behind
  a try_next_host_on_timeout boolean option.
2025-05-08 10:41:06 -07:00
Wez Furlong c3dff7e2c8 docs: update for latest release 2025-05-06 18:24:15 -07:00
Wez Furlong b29689af74 docs: memoize: allow_stale_reads 2025-05-06 05:55:44 -07:00