Skip to content

Release 2023.11.28-b5252a41

Breaking Changes

None known

Other Changes and Enhancements

  • New RFC-conformance options are available to control server behavior when receiving messages that are non-conformant:
  • HTTP injection API will now parse and re-encode the message content to ensure that it has appropriate transfer encoding applied when content is set to a string, rather than using the builder variant of the API.
  • Preliminary support for MTA-STS. It defaults to enabled. See make_egress_path for more details. At this time, we do not support TLSRPT.
  • Preliminary support for DANE. It defaults to disabled because it requires additional configuration to enable DNSSEC. See make_egress_path for more details. At this time, we do not support TLSRPT.
  • The DKIM helper now allows setting body_canonicaliation and header_canonicalization. Thanks to @cai-n! #81
  • msg:dkim_verify() and msg:add_authentication_results() #82
  • You may now use log_record to refer to the entire log record when using templated log files. See kumo.configure_local_logs for more information.
  • You may now specify an optional segment_header and optional filter_event, when customizing local logs. See kumo.configure_local_logs for more information.
  • Delivery log records now include information about the TLS cipher, protocol version and peer subject name for SMTP deliveries that used TLS
  • New regex_set_map type for efficiently matching multiple regular expressions in a single search operation and returning an associated value.
  • New smtp_client_rewrite_delivery_status event to enable rewriting SMTP client status codes.
  • minijinja templates now provide date/time formatting filters and globals via minijinja_contrib. Thanks to @cai-n! #91
  • It is no longer necessary to call shaper.get_queue_config when using the shaping helper together with TSA. You should change your config from:
kumo.on('get_queue_config', function(domain, tenant, campaign, routing_domain)
  local cfg = shaper.get_queue_config(domain, tenant, campaign)
  if cfg then
      return cfg
  end

  -- Do your normal queue config handling here
end)

to:

kumo.on('get_queue_config', function(domain, tenant, campaign, routing_domain)
  -- Do your normal queue config handling here
end)
  • It is no longer necessary to register shaper.should_enqueue_log_record when using the shaping helper together with TSA. You should remove this line from your config:
-- Remove this next line
kumo.on('should_enqueue_log_record', shaper.should_enqueue_log_record)
  • New pre_init event to aid in building optional modular lua helpers.
  • log records now only log meta values which are non-null. Thanks to @cai-n! #94
  • Admin bounces now have the option to suppress generation of AdminBounce log records. #75

Fixes

  • HTTP injection API did not expand templating in From, Reply-To or Subject headers unless they were set in the additional headers object
  • Allow optional spaces after the colon in MAIL FROM: and RCPT TO:. #76
  • Missing 334 response to clients using multi-step SMTP AUTH PLAIN
  • Messages that require "dot stuffing" could hang an outgoing SMTP session and tie up a connection until the data and/or data-dot timeout was reached.
  • DKIM Signature headers with a long list of signed headers would wrap on hyphens instead of colons, which caused problems with some but not all verifiers.