Skip to content

Unreleased Changes in The Mainline

Breaking Changes

  • Enabling batch_handling="BatchByDomain" will cause message:recipient and the recipient field of Log Record to switch to an array holding the list of recipients. These are NOT active by default, but if you wish to enable them you should audit your policy and consider switching to using message:recipient_list as well as review your log processors to ensure that they are able to handle the recipient field being either an array or a string, or otherwise adjusting your log templates accordingly.
  • HTTP injections no longer consider the Forwarded header as a source of information to populate the received_from metadata. Instead, only the directly connecting IP information will be used. See the upstream issue for more information.
  • Our SMTP client now treats a 552 response during RCPT TO as a TransientFailure instead of a PermanentFailure as described by RFC 5321 Section 4.5.3.1.10. If you are employing smtp_server_rewrite_response and happen to rewrite transient codes to 552 then you will find that the disposition remains as a TransientFailure even after the rewrite. Our recommendation is that you update such rewrite rules to use 550 or 555 to avoid this classification.

Other Changes and Enhancements

Fixes

  • smtp server would incorrectly return a 451 instead of a 452 status when max_recipients_per_message or max_messages_per_connection limits were exceeded.
  • spf: a NoRecordsFound response from DNS during an exists: rule check could cause the result to incorrectly be reported a temperror
  • spf: %{h} macro expansion could incorrectly enclose the domain in double quotes
  • spf: relax macro parsing to allow spaces in, for example, explanation txt records
  • kumo.spf.check_host: %{h} will be assumed to have the value of the domain field when sender is not set, as ehlo_domain won't be set in the connection context until after smtp_server_ehlo returns successfully.
  • kumo.start_esmtp_listener.line_length_hard_limit could by off-by-two in certain cases when applied to DATA, and could sometimes allow up to 1024 bytes for a single SMTP command outside of DATA, even though the limit was set smaller.
  • Message builder API didn't quote every possible character that needed to be quoted in the display name of a mailbox. #428
  • Incorrectly treated a 552 as a transient failure for non-RCPT-TO 552 responses. #431
  • spf: we now populate smtp.mailfrom in the Authentication-Results props map.
  • keysource now supports inline binary bytes being passed via key_data. Previously, only UTF-8 strings could be passed that way.
  • keysource now supports callback/event based data loading, which is similar to inline key_data, but allows for more efficient cache keys that use less RAM.
  • dkim verification would incorrectly treat i=@fexample.net as a valid subdomain of d=example.net.
  • mx_list says that the list of addresses are tried in the order specified, but they were incorrectly tried in the reverse of that order (because internally that list is placed into a LIFO stack). This has now been corrected and the connection plan now follows the ordering of your mx_list. You might consider using kumo.version to accommodate this change in behavior.