Released 2024-07-10


Released 2024-06-20

  • Imp MTA improvements

    • Support for the PROXY protocol v2 TLV by passing it to the connect hook

    • Added tenantid queue policy field for supporting segmenting for example sender domains more easily

    • Make servers[] configurable

    • Expired messages are now removed from the active queue as well

    • Updated c-ares (asynchronous name resolver) to 1.31.0

  • Imp Script language improvements

  • Imp Command line tool improvements

    • New hqfmove tool be able to migrate messages between hosts

  • Bug Various bug fixes

    • Fixed issue in halonctl when sorting a groupby

    • Fixed issue with HalonMTA_message_getinfo() and HALONMTA_MESSAGE_TAGS

    • Fixed memory leak when moving messages manually from the defer queue

  • Dep Important changes

    • Removed peer_cert in return value of smtp_lookup_rcpt()


Released 2024-05-14

  • Bug Downgrade included c-ares package due to upstream regression


Released 2024-05-08

  • Bug Fixed issue affecting CentOS7 due to bug in libc


Released 2024-05-02

  • Bug Fixed regression in multi-field suspends with localip


Released 2024-05-02

  • Imp Improved multicore performance on certain workloads

  • Bug Fixed rare issue with certain types of dynamic suspends


Released 2024-04-26

  • Imp MTA improvements

    • Improved suspend and policy evaluation performance

    • Added the ability to specify PROXY protocol servers per localip

    • Added queues.threads.rate.priority setting

    • Added support for suspend flag in queue list and queue groupby

    • Default rate algorithm for "6.2" policy configuration is now fixed-window instead of token-bucket (smtpd-policy.yaml: rate: algorithm: fixedwindow/tokenbucket)

    • Added support for systemd notifications in smtpd process

    • Ability to trace a specific transaction

    • Added support for RFC8616 - EAI In DKIM and DMARC

    • Added option for disabling announcing PIPELINING (servers[].extensions.pipelining)

    • Added check to enforce protocol synchronisation (compatibility.synchronization)

    • Added spool.threads.loader.wait setting

    • Domain DNS cache may include nullmx

    • C-ares upstream (1.28.1)

  • Imp Script language improvements

    • Improved detection of “Message expired” in Post-delivery script hook

    • DNS resolving functions are now async (dns_query, spf_query, and verifyDKIM)

    • sleep function is now async

    • signDKIM now signs List-Unsubscribe headers by default

    • Optimized pcre_replace replacements

  • Imp Command line tool improvements

    • Added colors to halontop

    • Clarified usage of --reason argument in halonctl queue update commands

    • halonconfig will now use stable sort when compling running configuration (smtpd-app.yaml) includes

  • Bug Various bug fixes

    • Fix issue with conflicting Ansible roles (When running multiple roles on the same server)

    • Remove leading spaces when unfolding headers with MailMessage->getHeader()

    • Fixed issue where csv_encode omitted all empty columns at the start of the list

  • Dep Important changes

    • MAIL FROM: <> SIZE parameter is now enforced

    • Removed getpeercert on TLSSocket

    • Removed dnsbl function (use dns_query since 5.3)

    • Removed dns and dns(mx|txt|...) functions (use dns_query since 5.1)

    • Removed support for custom servers and timeout for dns_query, spf_query, and verifyDKIM

    • Deprecated peer_cert in return value of smtp_lookup_rcpt (peercert should be used)

    • In protobuf API rename UNKNOWN state to OTHER

    • The halonctl.yaml starting from file version 6.2, does now use smtpd.yaml format (and path).


Released 2023-12-27

  • Imp Explicitly configure bare LF behaviour (compatibility.barelf)

    • Default is changed to auto-detection, to keep the previous behaviour set it to true.


Released 2023-12-14

  • Imp Plugin API(s)

  • Imp MTA improvements

  • Imp Command line tool improvements

    • Improved --json-request option so it includes the full request (including command)

    • Added option to show queue trace with elapsed time

    • Added possibility to update jobid in queue update command

    • Added ability to delete suspends by filter

    • Added ability to list and delete policy conditions by filter

  • Imp Script language improvements

    • Allow configuration of sourceip for proxyprotocol

    • Added localipid to post-delivery connection logging object

    • Added a nullish coalescing assignment operator to HSL (??=)

    • Added more insights into generic delivery errors (such as DNS response code) in post-delivery

    • Throw an exception ("No such transportid") if message is queued on a non-existing transport

    • Added mx_exclude_bypass to override any mx_exclude

    • Added support for identity option to additional_signatures option in signDKIM

    • Added Map->merge() function to merge keys

    • Added “buffered” option to File() to disable buffering file:// files into memory

    • Added mimeword_decode and mimeword_encode functions

    • Added header_addresslist_compile function to properly escape a list of addresses with display names

    • header_addresslist_extract can now extract display names for addresses as well

    • http(), TLSSocket(), smtp_rcpt_lookup, smtp_rcpt_auth(), MIME.send(), MailMessage.send(), Predelivery.Try() now support tls client certificate option as array of “x509”, “chain” (array) and “privatekey” resources

    • pkcs7_sign() now support certificate option as array of “x509”, “chain” (array) and “privatekey” resources

    • Improve overall performance of crypto functions using PKI or keys from the configuration

    • Added toResource method on X509 object

    • Added support for importing certificates as resources in HSL

    • Improved performance of halonconfig when used with large configurations

  • Dep Important changes

    • Revamped license system

    • The cache [ per_message ] option has now been removed as a no-op (deprecated in 6.0)

    • Private keys in the configuration (pki[].private) now needs to be in PEM format. In the case of ed25519 private keys without PEM header, use the following command (printf \\x30\\x2e\\x02\\x01\\x00\\x30\\x05\\x06\\x03\\x2b\\x65\\x70\\x04\\x22\\x04\\x20 && cat ed25519.key | base64 -d) | openssl pkey -inform DER -outform PEM to add PEM header.


Released 2023-11-15

  • Bug Problem with eviction of connection based on grouping


Released 2023-10-02


Released 2023-09-01

  • Bug Fix issue with OpenMetric output in halonctl

  • Bug Suppress warning for unhandled submission.yaml file in halonconfig

  • Bug HTTP2 wasn’t available in http() on Ubuntu 22.04


Released 2023-08-16

  • Imp MTA improvements

    • Overall performance and memory usage improved

    • Ability to configure custom thread pools for internal SMTP event loops

    • Allow pooling reuse by grouping fields

    • New C-ABI functions

    • Improvements to halonctl

      • Added support for all metadata filter options in halonctl queue commands

      • Added --limit option to queue update command

      • Added --probability option to halonctl queue update, list and unload commands

      • Added types and help to OpenMetric output for halonctl process-stats command

    • Include CycloneDX SBOM files for the smtpd package

    • Improvements to metadata queries in queue protobuf API

    • Increase tag limits (16 to 32 characters) for queue pickup policies and suspends

  • Imp Script language improvements

    • Added additional_fields and additional_recipient_fields options to Bounce() function

    • Added remotemta override to fields options for Bounce() function

  • Dep Important changes

    • Remote SMTP bounce messages no longer include SMTP states

    • Removed special meaning of lookup-mx as hostname to Try(), smtp_() and MIME|MailMessage.send() functions

    • Removed special meaning of MIME("0") (to get the EOD hooks root MailMessage object)

    • The cache [ per_message ] option is now deprecated and will become a no-op in 6.1 (use $context variable instead)

    • Removed builtin LDAP(), ScanDLP() and ScanDMARC() functions (use halon-extras-ldap, -dlp and -dmarc instead)

  • Bug Various bug fixes


Released 2023-05-03

  • Bug In HSL fix an issue with Map/Sets iterators and foreach


Released 2023-04-12

  • Imp MTA improvements

    • Faster policy evaluations and subdomain matching

    • Added a new grouping field to the queue structure to be used for combined recipientdomain/remotemx groupings

    • Added LOGIN parameter support to the XCLIENT command

    • Added support for network matching in PROXY, XCLIENT and TLS client cert settings

    • Added connection pooling reuse setting based on remotemx

    • Various improvements to DNS resolving

    • Priority messages now also have priority in resolver and script execution queues

    • Allow overriding serverhost (servers[].hostname) in connect hooks’s Accept() function

    • Added ability to read plugin configurations from file paths

    • Improvements to halonctl

      • Added --no-pipelining options to queue trace command

      • More precise time (usec) resolution in queue trace command

      • Queue update command now supports changing only localpart or domain of senders/recipients

    • halontop now resizes layout to terminal size

    • Added a new C-API (HalonMTA_deliver_trace) to do custom trace outputs in delivery plugins

    • Added a new C-API for queue pickup plugins

  • Imp Script language improvements

  • Dep Important changes

    • Deprecated ScanDMARC() (install halon-extras-dmarc)

    • Deprecated builtin LDAP class (install halon-extras-ldap)

    • Removed MailMessage.deliver (deprecated since 5.2, use MailMessage.queue() instead)

    • Removed /dev/null as special transport destination

    • Removed GetMailQueueMetric() (deprecated since 5.3)

  • Bug Various bug fixes

    • Missing dynamic policy id in $arguments in post-delivery on rate only policy conditions

    • Fixed timeout issue with PIPELINING

    • queue_policy_delete() function was missing in AUTH hook

    • Fix issue with unset in foreach loops

    • Fix issue with scripting.rootpath ending with /

    • In HSL do not allow index dereference of string with key types other than numbers

    • In HSL do not allow slice operator dereference with key types other than numbers

    • jobid set in pre-delivery Try() function was not updated in post-delivery hook

    • Fixed rare crash with queue trace command on busy systems


Released 2023-02-17

  • Bug Improved error handling with HTTP submissions API

  • Bug Fix error message with halonconfig --dist-check and missing schemas

  • Bug Fix rare issue connection retry


Released 2023-02-06

  • Bug Fix a rare issue with configuration reload on Ubuntu


Released 2023-02-03

  • Imp MTA improvements

    • Added a halonctl queue trace command to trace outbound SMTP connections

    • Outbound PIPELINING support

    • Ability to change TLSv1.3 cipher suites on server and clients

    • Queue performance optimisations

    • Added setDateLater() function to set Date header on delivery

    • Added connection id and numbers of transactions to post-delivery attempt connection array

    • Added support for networks in the Try() argument ip_exclude

    • Allow changing jobid with Queue() functions in pre- and post-delivery

    • Added remotemx information to outbound connection list

    • Added support for --size, --subject, --metadata-and filter conditions to halonctl

    • Added the ability to clear the internal DNS cache using domain wildcards in halonctl

  • Imp Script language improvements

    • Map/Set iterator are now thread safe with imports (modifications are not)

    • Added support for data types when importing YAML files

    • Added support for private key import (RSA and ED25519 keys)

    • Added rsa_privatekey() and ed25519_privatekey() function to load keys as PrivateKey resources

    • Added array_combine() function

    • Added exclude_headers to signDKIM() functions

    • Added support for PrivateKey resources to signDKIM() functions

    • Added support for tags when parsinging YAML files

    • Added MIMEPart.getByID() functions to retrive a MIMEPart by ID

    • Added support for Regex types to MIMEPart.findByType() and MIMEPart.findByFileName() functions

    • csv_encode() will not added quotes to string with spaces

  • Bug Fix issue with slow graceful shutdown of smtpd

  • Bug Fix issue with the halonctl queue groupby command if jobid was set with Try()

  • Bug Fix issue with including files using symlinks within the rootpath in HSL

  • Bug Fix issue with global functions and module imports in HSL

  • Dep Important changes

    • Migrating away from Cyren (ctasd and ctipd)

    • The deprecated DirectDeliver() function now acts as a queuing deliver

    • Removed deprecated GetTLS(), Allow(), Block() and DeliverWithDKIM() functions

    • On Linux, trying to reload with Halon script compilation errors will continue using the previous configuration


Released 2022-12-06

  • Bug halonctl resolver command didn’t ignore SIGPIPE

  • Bug halontop didn’t show patch version properly

  • Bug On some Linux distros environment.rlimit.nice could not be set to a negative value

  • Bug Improved error handling on JSON payloads in smtpd HTTP API

  • Bug On configuration load filename was missing in error message

  • Bug Fixed a stability issue


Released 2022-10-11

  • Imp Package and repository improvements

    • Builds for Ubuntu 22.04 LTS

    • Packages for extras projects written in Halon script

  • Imp MTA improvements

    • Ability to change IP address family (v4/v6) preference

    • Support for implicit TLS for outbound connections

    • New outbound TLS mode dane_fallback_require_verify for DANE/MTA-STS coexistence

    • Added peer certificate error and TLSA to post-delivery’s attempt information

    • Store last attempt’s localip, remoteip and remotemx in the defer queue

  • Imp Script language improvements

  • Imp Protobuf API improvements

    • QueueGroupBy by localip as well

    • QueueGroupBy support policy grouping (MX rollup, etc)

    • More ServerConnectionsList information; transactions, local IP and ports

  • Imp Command line tool improvements

    • halonctl groupby overhaul, adding lots of new functionality

    • halonctl queue update now have a dry-run flag to test queries

    • halonctl process-stats may now output Prometheus compatible formats

  • Bug Fix issue with dynamic policies in the 35/8 subnet

  • Dep Important changes

    • The Ubuntu packages no longer depends on halon-extras-rate and halon-extras-dlp (need to be explicitly installed)

    • The per-recipient end-of-DATA function DirectDeliver is deprecated, use MailMessage.send() instead

    • The post-delivery function GetTLS() is deprecated, use the tls object in $arguments instead


Released 2022-12-05

  • Bug Fixed a stability issue


Released 2022-08-16

  • Bug GetTLS() in post-delivery could fail on non-delivered messages

  • Bug Issue with Queue() in post-delivery with no retry delay

  • Bug Fixed an error message in halonconfig


Released 2022-05-31

  • Bug Fix issue with IPC (Unix domain socket) permisson on Linux


Released 2022-05-30

  • New Added priority for queued messages

  • New Added max age of messages in queue (retry.during) as an alternative to retry.count

  • Imp MTA improvements

    • Added support for thread priority for various thread pools and event loops

    • Made ip_exclude_temporary also work with mx_exclude in SMTP clients

    • Added dane_fallback_require as TLS mode in SMTP clients

    • Added support for more AUTH mechanisms in SMTP clients (eg. XOAUTH2)

    • Randomize the order of equal-preference MX host addresses

    • Added possibility to configure custom script thread pools per hook

    • Delivery settings may now change max retries/during and retry intervals

    • Added queues.maxmessages to limit number of messages to hold in memory

    • Added data.fixheaders (false) and data.mimepart.fixheaders (false) to inject \r\n before bad headers

    • Added counter to hold total messages currently loaded

    • Postmaster address may be configured separately as localpart and domain (inherit from reporting-mta)

    • Added possibility to disable MIME multipart parsing for performance

    • Added maxparts to configure max MIME parts

    • Added ability to change transportid in Try()

    • Added $arguments["expired"] to post-delivery hook to indicate bounces due to age or max retry count

    • Added reason to Delete() in the pre-delivery hook

    • Added support for DSN options to Bounce() in the pre-delivery hook

  • Imp Script language improvements

  • Imp Native (C ABI) plugin improvements

  • Imp HTTP submission API improvements

    • Added /health endpoints to be used with load balancers

    • Added $arguments["headers"] to end-of-DATA script

    • Added concurrency limit setting per server

    • Certificates are soft reloadable in configuration

  • Imp Protobuf API improvements

    • Include HTTP connection in ServerConnectionsList replies

    • Support for close reason of HTTP connections with ServerConnectionsClose

    • Added option to reset transactionid, ts and retrycount upon message import

    • Bounce action may set status and diagnosticcode on queue updates

    • Added regular expression support in StringMatch in API for message conditions

    • Added unique count feature to groupby

    • Added maximum values to process stats and present them nicely in halontop

  • Imp All halonctl commands accepting time now allows for X[dhms] syntax

  • Imp Added dist-check command to halonconfig to check generated configuration

  • Imp Added option to stop-on-match in smtpd-policy.yaml when matching rules

  • Imp Add configurable rate sync delay to improve UDP synchronization reliability

  • Bug Fix validation bug in JSON schema with HTTP submission API

  • Bug Fix validation bug in post-delivery hook with $arguments["dsn"]["status", "diagnost

  • Bug Allow long lines in message body when receiving messages with CHUNKING

  • Bug Fix rate issue with dynamic policies which could cause MTA restarts

  • Bug HTTP submission API header name “X-API-Key” was not case insensitive

  • Bug Statistics queue.policy.rate.suspends not decreased on manual message deletes

  • Bug Fix bug in C API when invoking function pointers in class member functions

  • Bug Properly detect temperror in ScanDMARC()

  • Bug Fix escaping of email addresses by escaping additional characters

  • Bug Added detection newer versions of .docx and .xlsx files in ScanDLP()

  • Dep Deprecated use of MIME(“0”) in EOD, use $arguments[“mail”] or GetMailMessage() instead

  • Dep Important changes

    • Removed “eodrcpt” from Linux builds

    • Removed ability to control “rated” and “dlpd” from “halonctl” (use ratectl or dlpctl instead)

    • Removed deprecated functions from per-message end-of-DATA script: Queue(), GetMailMessage(), GetTLS(), GetAddressList(), DKIMSign(), DKIMSDID(), DKIMVerify()


Released 2022-03-16


Released 2022-02-10

  • Bug Auto-detection of DKIM keys in additional_signatures fixed

  • Bug Reduce risk of rated UDP packet loss for initial synchronisation

  • Bug Issue with ScanDLP() and custom rules fixed

  • Bug Updated libcurl to 7.81


Released on 2022-01-25

  • Bug DKIM validation issue under certain circumstances


Released on 2022-01-10

  • Bug Privdrop after creating control socket in rated

  • Bug Fix rated startup rate hit sync

  • Bug Fix minor issue parsing bad headers


Released 2021-12-13

  • New Templates for Docker and Kubernetes

    • The dlpd content filtering connection now uses a HTTP based API

    • The rated rate control connection supports DNS with dynamic re-resolve

  • New APT/deb and RPM repositories

    • Components are now in separate packages (MTA, rate control, content inspection, etc.)

    • Added separate dlpctl an ratectl tools for the respective new packages

  • New MTA features

    • HTTP submission API for pre-formatted RFC822 messages

    • halontop program showing realtime process metrics

    • Faster DKIM dual-signing with additional_signatures to signDKIM()

    • Ability to use multiple spool paths

    • Added support reserved connection slots

    • Export message using with QueueExportRequest API

  • New Native (C ABI) plugin features

  • Imp Script language improvements

  • Imp MTA improvements

    • Improved DSN generation by supporting to include full original messages and DSN field customization

    • Include DSN arguments in post-delivery $arguments["dsn"] array

    • Include queue policy insights in post-delivery $arguments["policy"] array

    • Added support for customization of the Received header (tls and for)

    • Order queue list by retrycount

    • Support message retry with a jitter (distribution) in queue actions

    • Added support for queue message grouping of remoteip and remotemx

    • Added lists, grouping of conditions, and custom properties to active queue policy and delivery settings

    • Allow configuration of multiple pickup threads

    • Added delivery counters to process stats

    • Added support for .halonignore files when packaging configuration using halonconfig

  • Bug Fix bug with localip in smtpd-delivery.yaml

  • Dep Important changes

    • Removed the deprecated GetMailFile() function

    • It’s no longer valid to send message to plain IP addresses user@ip

    • Standard ciphers names are now used in logs (instead of OpenSSL convention)

    • Graceful shutdown for inbound connections

    • Renamed process threads (visible in top)


Released on 2021-11-09

  • Bug MIME formatting issue with append/prependPart() on non-MIME messages

  • Bug Issue with DKIM signature in bounces

  • Bug MIME() not storing decoded headers when queuing


Released on 2021-09-19

  • Bug Direct deliver in EOD rcpt hook


Released on 2021-08-24

  • Bug File type detection in DLP engine


Released on 2021-08-06

  • Bug Make linter recognise $connection["tls"]["sni"]

  • Bug Startup bulk synchronisation in rated

  • Bug PROXY protocol heartbeat connections


Released 2021-07-21

  • New Introducing exception handling with accompanying try, catch and throw control structures

  • New Visual Studio Code plugin support for debugging script in the smtpd MTA process

  • New ServerConnectionsListRequest API

  • New Ability to close inbound connections with ServerConnectionsCloseRequest API

  • New Added array_unique() and array_shuffle() functions

  • New Added pcre_compile() function to pre-compile regular expressions from user input

  • New Added #/myregexpattern/ syntax for creating pre-compiled regular expressions

  • New Added X509::String() method for creating an X.509 resource from PEM or DER

  • New Added MIME.send() method for inline delivery directly from MIME object

  • Imp New HQF2 queue file format which combines .eml and .hqf

  • Imp Added --unpack option to halonconfig to reverse packing

  • Imp The halonconfig command now validates plugin configuration schemas

  • Imp Added additional_headers option to pre-delivery Try() function for passing data

  • Imp Added modified_original DSN option to post-delivery Bounce() for altering original headers

  • Imp Added connection id and remoteuid to SMTP server $connection array

  • Imp Added remove_if_zero argument to memory_dec() for automatic cleanup

  • Imp Added json and regex formatters to import and csv_decode()

  • Imp Ability to import text file lines as Set object items for fast lookups

  • Imp Allow foreach on $this in classes to iterate all instance properties

  • Imp Added depth option to domain_includes() function

  • Imp Ability to use response_headers with extended_result in http()

  • Imp Support for loading File from standard input when running in hsh

  • Dep The =~ and !~ operators now throws on invalid regular expressions

  • Dep Messages with empty remotemx or jobid are not matched against queue policies with those

  • Dep Modules loaded with import can no longer access global user-defined functions

  • Dep Removed mail() option rawbody and URI fallback for ldap_bind() (deprecated since 4.8)


Released on 2021-07-19

  • Bug No longer passes function pointers from in $context (only data is supported)

  • Bug Fixed long loading times of hsl-lint and halonconfig with large YAML files

  • Bug Resolved issue with queue_suspend() and queue_policy() argument order

  • Bug Connection pooling didn’t work with outbound PROXY protocol

  • Bug In post-delivery attempt array, localip was not set correctly with outbound PROXY protocol

  • Bug Issue with cache [] size if is set to 2**32

  • Bug The transport retry intervals didn’t override the transport group’s intervals


Released on 2021-06-29

  • Bug Issue with the cache [] when exception was thrown from cached function

  • Bug Context switching with plugins wasn’t supported in the PROXY script

  • Bug The $context variable wasn’t updated after the EOD script hook

  • Bug Only one DKIM signature was supported on the MIME() object

  • Bug Imported function could not resolve nested function in some special cases

  • Bug Imported object between multiple hooks could not resolve imported functions in some special cases


Released on 2021-05-28

  • Bug Fixed issue with updated variables and logging in per-recipient end-of-DATA script

  • Bug Fixed auto generation of transaction ID on API QueueImport

  • Bug Fixed encoding issue in xtext_encode()


Released on 2021-04-08

  • Bug Fixes a race condition in the queue script


Released on 2021-03-22, see the release notes for notable changes

  • New Added native plugin support by loading C ABI compatible libraries

  • New Added CSV schema validation support in import so that imported files gets validated

  • Imp Ability to start the server without any listeners in order to drain queue

  • Imp Allow server control socket to listen on IP in addition to socket file

  • Imp Ability to group queue distribution view by sending domain

  • Imp Added variables for disconnect reason to disconnect script hook

  • Imp http() function now supports explicit http_version and post_size

  • Imp Ability to modify (rather than just add and delete) queue suspend and policy items

  • Imp Added total count in API response for queue list and groupby CLI/API commands

  • Imp Possibility to disable the Received header (instead of having to delete it from script)

  • Imp Added In-Reply-To to DSN messages (to support threaded bounces)

  • Imp Added decode option to MIMEPart.getHeader functions

  • Imp Added binary option to all hashing functions (eg. sha2 function)

  • Imp Improved concurrent cache miss behaviour in the HSL cache

  • Imp Added possibility to disable hook logs

  • Imp Default() function now allows configuration of bounce settings

  • Imp Try() function IP include and excludes (similar to mx_include and mx_exclude)

  • Bug Resolved an issue with the queue updates

  • Bug Resolved an issue with the import statements and reloads

  • Bug Fix bug with paging of Halon script rates

  • Bug Fix a memory leak in the backend authentication script (with modules)

  • Bug Missing error counters on connect and disconnect

  • Bug Halon script Socket classes’ close() method could cause unexpected disconnect behaviours

  • Bug Fix support for BDAT and the proxy script hook

  • Bug Fix an issue with SNMP and the firewall script

  • Dep queue_suspend() and queue_policy() has changed its return value

  • Dep Text log formats has been slightly changed

  • Dep File.toFFIValue() function now returns C-compatible FILE pointer.

  • Dep Remove functions a per the deprecation note

  • Dep Queue suspend and policy API calls return UUIDs instead of uint64

  • Dep Minimum supported API version is (5.6)


Released on 2020-11-16, see the release notes for notable changes

  • New DSN extension support

  • New Outbound PROXY protocol support

  • New Function generators and yield

  • New Map() and Set() data container classes

  • New Ability to disable sourceip_random, useful during for example IP warmup

  • New Added halonctl hsl memory list and corresponding HSLMemoryListRequest API

  • New Added base32_encode and decode functions

  • New Added url_encode and decode functions

  • New Test command for the asynchronous DNS resolver halonctl resolver query

  • New Queue suspend filters with halonctl queue suspend list and SuspendRequest API

  • New Settings for max messages, recipients and hops

  • New Added unix_socket_path option to http() function

  • New Added spool.corrupt setting for controlling handling of bad queue files

  • New High-resolution process runtime counter process.elapsed

  • New Active queue performance counters queue.pickup.X

  • New Script error counters servers.X.scripts.Y.errors

  • Imp Fraction of second in sleep()

  • Imp Improved performance for large active queue policy rate buckets and exclude lists

  • Imp Ability to specify an ID for dynamic active queue suspensions and policy conditions

  • Imp Ability to filter halonctl hsl rate list based on conditions

  • Imp More relaxed rules for naming of ID and file path in YAML schemas

  • Imp Improved smtpd process shutdown

  • Imp Improved SMTP command diagnostics (“in reply to”) in bounces

  • Imp Added Original-Envelope-ID and Original-Recipient headers to bounces

  • Imp Consider all 2xx-codes successful in SMTP client

  • Imp File descriptor exhaustion error logging and handling improved


Released on 2020-11-09

  • Bug Support binary POST data in background http() calls

  • Bug Fixed MIME’s verifyDKIM() after doing message modification

  • Bug Fixed error flag issue with consecutive calls to ScanKAV() (on same message)

  • Bug Prevent announcing extensions from HELO/EHLO script hook on HELO

  • Bug Fixed halonctl missing fields senderhelo, saslusername and duration

  • Bug Fixed issue with queue list duration sort order


Released on 2020-10-01

  • Bug Fixed issue with PROXY protocol and implicit TLS

  • Bug Fixed proxy script and lint issue with halonconfig

  • Bug Fixed counting issue with the scripts.proxy.running/finished process stats

  • Bug Restored the id and ts fields in ScanDMARC() output

  • Bug Enable queuing of messages from hsh


Released on 2020-08-14

  • Imp UUID version selector (time/v1 or random/v4)

  • Bug Fix default enhanced status code in bounces for certain errors

  • Bug Added validation of certain CLI arguments to improve error reporting


Released on 2020-07-22, see the release notes for notable changes

  • New CHUNKING/BDAT and the SIZE service extension

  • New Disconnect script hook

  • New yaml_decode() function and import loader (similar to JSON)

  • New Ability to export an File classes as a C++ std::istream

  • New Ability to export an X.509 resources as a OpenSSL pointer

  • New FFI callback function

  • New DSN options to Bounce() and Queue() that allows overriding content, headers, delay, etc

  • New Pre-defined variable of the DSN that is to be generated

  • New Default() function in post-delivery to terminate script based on delivery result and settings

  • New Settings for minimum amount of free inodes and bytes for receiving email

  • New Setting for fsync before 250 on DATA

  • New Settings for number of max hops (loop protection) of 30 seconds

  • New Pre-defined variable for username when accepting email on local Unix socket

  • New http() callback function for POST data

  • New MailMessage queue() function

  • New MailMessage get/setPreamble() and get/setEpilogue() functions

  • New MailMessage modifyContent() function advanced, direct modification of email data

  • New Static File::read() function that returns all data from a file path

  • New LDAP class getoption() function

  • New Numeric separator

  • New Zero-fill right shift bitwise operator

  • Imp Ability to change import loader type

  • Imp Includes SIZE= in MAIL FROM if server announces SIZE service extension

  • Imp SMTP client always send EHLO first (and then try HELO)

  • Imp Do not include detail in local-part in license count (user+detail@domain)

  • Imp MIME queue() options for delay and hold

  • Imp Ability to override recipient domain for MX lookup in pre-delivery and all other places

  • Imp Access to the queued email data in pre/post-delivery as a File resource

  • Imp dns_query() option for extended results including TTL and type-specific fields

  • Imp Added reply code option to all Accept() functions

  • Imp Auto-Submitted header to bounces (rfc3834)

  • Imp Saving custom views on queue pages

  • Imp Custom metadata groupings and columns on queue pages

  • Imp Number compare for metadata filters on queue pages

  • Imp Partial and case sensitive matching of local parts on queue pages

  • Imp Real-time rates for counters on process statistics page

  • Imp Added process stat counter for finished script hooks

  • Imp Added multiple recipientdomain and remotemx option to if statements in delivery configuration

  • Imp Network matching in queue conditions for sender-, local- and *remoteip&

  • Imp The API output is always normalised as UTF-8

  • Imp The API supports comparing queue metadata as numbers

  • Imp The MIMEPart.setBody() and MailMessage.toString() limitation of 1 MiB is now removed

  • Imp Extended error reporting from Sophos AV

  • Imp Added -R to hsh to override scripting.rootpath

  • Imp Added –ffi to hsh to override scripting.ffi

  • Imp Added –binary flag to hsh

  • Imp Added support for FFI in hsl-lint

  • Imp Protobuf schemas are now part of the Linux package

  • Imp Removed httprd from the Linux package

  • Imp Added queue load command to halonctl to import messages

  • Bug Resolved issue with SMTPUTF8 and connection pooling

  • Bug Wait for support processes like rated and dlpd

  • Bug Log thread creation errors in updateQueue

  • Bug Make the domain_includes() function non-case-sensitive

  • Bug Depend on uuidd runtime on Linux

  • Dep The Queue() function (overrides the built-in logic) may now exceed the transport’s max retry count

  • Dep The SetDSN() function has been deprecated in favour of the “dsn” option to Bounce() and Queue()

  • Dep The inet_includes() function now return none on errors

  • Dep The and File.readline() now return false on end-of-data instead of none

  • Dep The MIMEPart.setBody() limitation of 1 MiB is now removed

  • Dep The dns_query() function’s ttl result property has been removed in favour of the extended_result option

  • Dep All messages in the active queue now have at least one localip (instead of showing an empty address)


Released on 2020-06-10

  • Bug Fixed a stability issue with the connection pool


Released on 2020-05-26

  • Bug Fixed issue with server connection concurrency limit

  • Bug Fixed tags (comments) for some types of manual active queue suspends

  • Bug Fixed issue with the proxy script hook


Released on 2020-03-10

  • Imp Support more charsets by inclusion of latest GNU iconv

  • Imp Changed log level of ldap_auth() function failures

  • Bug Fixed issue with active queue policy with certain groupings

  • Bug Fixed issue with decoding of RFC2231 parameters values

  • Bug Fixed regression with decoding of certain charsets

  • Bug Fixed regression with Mellanox (mlx5en) network adapters


Released on 2020-02-24

  • Imp Added SMTP state information to delivery error logs

  • Imp Added port option to dns_query() function

  • Bug Fixed issue with duplicate messages API call

  • Bug Fixed “neq” condition (not equal) with “size” and “retry_count” fields

  • Bug Fixed issue with message size variable and per-recipient end-of-DATA script


Released on 2020-02-11