Skip to content

Release 2023.08.22-4d895015 - Automation

Breaking Changes

  • kumo.configure_log_hook now requires a name field to be set to identify which instance of a log hook is being considered by the should_enqueue_log_record event. This change is to support distributing logs to the traffic shaping automation service in addition to feeding them into your own reporting infrastructure.

New: Traffic Shaping Automation

  • The shaping.toml file now supports automation rules. See the UserGuide for information on how to deploy this feature.

Other Changes and Enhancements

  • Calling kumo.configure_redis_throttles now also enables redis-based shared connection limits. #41
  • kumo.make_egress_path max_deliveries_per_connection now defaults to 1024 rather than unlimited. Specifying unlimited deliveries is no longer supported as part of shared connection limit lease fairness. #41
  • Added message:remove_all_named_headers. Thanks to @postmastery! #70
  • Ready queue names now factor in the delivery protocol, making it easier to vary the protocol by eg: tenant or campaign while keeping the domain the same. You will notice a suffix like @smtp on the end of queue names in metrics and in the site_name field of log records as a result of this change.
  • It is now more convenient to do smart hosting using the new smtp protocol mx_list in kumo.make_queue_config.
  • Introduced new routing_domain meta value (see predefined values) which allows you to override the recipient domain for routing/delivery, without blending scheduled queues.
  • New kumo.cidr.make_map function for building CIDR lookup tables/mappings.
  • The listener_domains policy helper now supports relay_from_authz to allow listing out authorization identities for which relaying from a particular sending domain is permitted.
  • The kumo.digest module for computing SHA digests of strings and other data.
  • The kumo.encode module for encoding/decoding base32, base64 and hex strings.
  • kumo.dns.configure_resolver for adjusting DNS resolver configuration.
  • kumo.dkim.ed25519_signer now also supports loading signing keys that are in PEM encoded PKCS8 format.


  • Loading secrets from HashiCorp Vault failed to parse underlying json data into a byte array.
  • kumo.reject(421, ...) didn't disconnect the incoming session. #79
  • kumo.reject in smtp_server_message_received could still produce a 250 ok after the rejection response.